rtf2txt

Egy P1 120-as notin (48M RAM) szeretnék rtf formátumú könyveket olvasni, dsl linux-al. A ted nekem nagyon nem jött be, mert ezen a gépen lassú, és nem is minden rtf-et nyit meg.
Ezért úgy gondoltam, hogy az rtf-eket txt-vé alakítom, és konzolból olvasom őket.

A konvertálással viszont gondom van:
- a catdoc gyors (5s per könyv), de a magyar ékezetes karaktereket elrontja: (é helyett e, ö helyett ?, stb), méghozzá úgy, hogy a sed-el nem tudom őket helyreállítani
- az rtfreader-el ugyanez a baj, csak ez látszólag egy digites hexa számokkal (1-F) helyettesíti az ékezetes karaktereket (ami szintén nem dolgozható meg a sed-el, mert nem lehet tudni, hogy pl. az 1-es tényleg egy egyes, vagy egy é betű-e az eredeti szövegben)

Ezért aztán írtam egy saját szkriptet, ami elég jól és ékezethelyesen átalakítja az rtf-et txt-be, csak az a baja, hogy kegyetlenül lassú; ezen a gépen kb. 5 perc/könyv. Lehetne ezt úgy optimalizálni, hogy kb. 5-ször ilyen gyors legyen?

Itt a szkript:

cat | sed '1,/pgdscno0/d' | sed -e 's/\\\(keepn\|aspalpha\|rdblquote\|dbch\|par \|pard\|plain \|ltrpar\|qc\|qj\|\*\|rtlch\|ltrch\|endash\|loch\)//g' -e 's/\\\(revtim\|creatim\|updnprop\|langfe\|hyphen\|hyphlead\|hyphtrail\|hyphmax\|deftab\)[0-9]*//g' -e 's/\\\(vern\|info\|page\|lang\)[0-9]*//g' -e 's/\\\(rin\|afs\|lin\|min\)[0-9]*//g' -e 's/\\\(yr\|mo\|dy\|hr\|up\|cs\|ai\|af\|li\|ri\|cf\|fs\|fi\|sb\|sa\|ab\)[0-9]*//g' -e 's/\\\(s\|f\|i\|b\)[0-9]*//g' -e "s/\\\'e9/é/g" -e "s/\\\'e1/á/g" -e "s/\\\'fa/ú/g" -e "s/\\\'f3/ó/g" -e "s/\\\'ed/í/g" -e "s/\\\'fc/ü/g" -e "s/\\\\u337 ?/ő/g" -e "s/\\\'f6/ö/g" -e "s/\\\u369 ?/ű/g" -e "s/\\\'d3/Ó/g" -e "s/\\\'c1/Á/g" -e "s/\\\'c9/É/g" -e "s/\\\'cd/í/g" -e "s/\\\\u336 ?/Ő/g" -e "s/\\\'d6//g" -e "s/\\\'da/Ú/g" -e "s/\\\\u368 ?/Ű/g" -e "s/\\\'d6/Ö/g" -e 's/\({\|}\)//g' | sed -f /usr/local/bin/splitlines.sed | sed '/^$/d'

A splitlines.sed a szóközöknél nagyjából egyenlő hosszú sorokra tördeli a szöveget, ezen nem hiszem, hogy lehetne javítani:

/.\{80\}/!b
s/^\(.\{1,79\}\) /\1\n /
s/^\(.\{1,78\}\)\n /\1 \n/
/\n/!s/ /\n /
P
D

Szóval, hogyan lehetne a fentieket optimalizálni, vagy esetleg van-e valami más konzoli rtf2txt megoldás, ami gyors, és a magyar ékezetes karaktereket is helyesen kezeli?

Hozzászólások

"ezt nezd meg:

http://py.vaults.ca/apyllo.py/514463245.137382805.875495488"
Ez egy végletekig lecsupaszított linux, összesen 60M az egész, még rendes bash sincs benne (bár ami van helyette, az egész tűrhető), úgyhogy nem hiszem, hogy lenne benne python (és hasonló a helyzet a perl-el is). Mindenesetre amint ismét "notiközelben" leszek, ellenőrzöm.

"lehet a forrasokat mar nehez beszerezni. a distrodhoz nincs rtf2txt csomag?"
Lehet hogy van, de ahhoz, hogy ezen a gépen forrásból fordítsak, elég sok mindent kellene még letölteni (gcc, make), és se hely, se sávszélesség (modem) nem nagyon van hozzá.

A catdoc-ot és az rtfreader-t is egy másik gépen (SuSE) fordítottam, és csak átmásoltam a notira. Lehet, hogy ezért nem jók velük az ékezetek? Hogyan lehetne őket a másik gépen a "dsl linux környezetre" fordítani? (Más a kernel, más a karakter kódolás).

---
If you have money, use Windows!
However, if you also have a brain, use Linux!

Most találtam, nem néztem, hogy működik-e:


#! /bin/bash
# Simple rtf->txt control sequences remover. Useful when you want read just text
# Petr Koloros 2003, <silk@sinus.cz>
# Bugs: no arguments of control sequences disappear

cat $1 | tr -d '{}\n\r' | sed 's/\\pa[rd]\+/˙/g; s/\\[^ ]*//g' | tr -s ' ' | tr '˙' '\n'

--
A nyúl egy igazi jellem. Ott ül a fűben, de akkor sem szívja!

Ez így tényleg villámgyors, viszont nem gondoskodik se ékezetes karakterekről se a rövid sorokra tördelésről.
Ráadásul kiderült, hogy a tördelés volt a leglassúbb művelet az eredeti szkriptben. Hálistennek az is kiderült, hogy minden linuxon ott az fmt parancs, ami kb. 80x gyorsabban végzi a sortördelést, mint a sed szkript. :)))

Úgyhogy most összekombináltam az általad talált parancsokat (kódok eltávolítása) az én szkriptem egyes részeivel (ékezetes karakterek) meg az fmt paranccsal (sortördelés), és előállt egy egyszerűbb, és nagyjából elfogadható sebességgel és eredménnyel működő szkript:

cat | sed '1,/pgdscno0/d' | tr -d '{}\n\r' | tr -s ' ' | sed -e "s/\\\'e9/é/g" -e "s/\\\'e1/á/g" -e "s/\\\'fa/ú/g" -e "s/\\\'f3/ó/g" -e "s/\\\'ed/í/g" -e "s/\\\'fc/ü/g" -e "s/\\\\u337 ?/õ/g" -e "s/\\\'f6/ö/g" -e "s/\\\u369 ?/û/g" -e "s/\\\'d3/Ó/g" -e "s/\\\'c1/Á/g" -e "s/\\\'c9/É/g" -e "s/\\\'cd/í/g" -e "s/\\\\u336 ?/Õ/g" -e "s/\\\'da/Ú/g" -e "s/\\\\u368 ?/Û/g" -e "s/\\\'d6/Ö/g" -e 's/\({\|}\)//g' | sed -e 's/\\pa[rd]\+/˙/g; s/\\[^ ]*//g' | tr '˙' '\n' | tr -s '\n' | fmt -w 80 | sed 's/^$//'

Köszi!
---
If you have money, use Windows!
However, if you also have a brain, use Linux!

http://www.gnu.org/software/unrtf/unrtf.html

Konvertal textbe, htmlbe, latexbe, meg amit akarsz. Ha htmlbe konvertalok szoktam raereszteni egy sed -e 's/<[\/]*[font|div][^>]*>//g -t, mert kulonben eleg szarul nez ki (kiszedi a font es div tagokat, nem kell belekotni, biztos gyenge, de muxik es kesz =).

Ugy emlekszem azert konvertalom htmlbe, mert a textben elcseszi az ekezeteket, de ha tevedek akkor hajra, egyebkent meg html.