Szóstatisztika

 ( NZs | 2007. november 3., szombat - 0:08 )

Üdv!

Van egy adott .odt doksim (de lehetne akar .txt is, mert csak sima szöveg alapvető formázással). Arról szeretnék szóstatisztikát készíteni, magyarul, hogy a szavak milyen gyakran fordulnak elő.

Egy olyan programra lenne szükségem, ami ezt meg tudná csinálni helyettem. Tehát számolja össze, és a végén valamilyen kimeneti fájlba listázza ki nekem, lehetőleg csökkenő/növekvő sorrendben, hogy az adott szavak milyen gyakorisággal fordulnak elő.

Mindenképpen jó lenne, ha nem tenne különbséget a kis- és nagybetűs írás között, esetleg ha valami alapszinten felismerné a ragokat, toldalékokat, az se lenne rossz, de az nem lényeges.

Előre is köszönöm a segítséget.

Ja, lehetőleg Linux alatti megoldások érdekelnek (hogy külön program, parancssoros cucc vagy OpenOffice plugin az lényegtelen), de ha Windows alatti megoldást javasoltok, az se rossz.

Hozzászólás megjelenítési lehetőségek

A választott hozzászólás megjelenítési mód a „Beállítás” gombbal rögzíthető.

Sima szövegre szűrő:
tr -s " " "\n"|sort|uniq -ci|sort -nr

Ez nem semmi öregem :) Tetszik hogy ilyen szinten tudod alkalmazni a shell-t ;)
Tanulságos... én is köszködtem hasonlóval

Engem is érdekelne ilyen progi akár milyen formában

már a megvalosítási ötletek is jók de nem tudom hol induljak el

köszi

Ez nem jó? Lecserélem a szóközöket újsorra, rendezem, a uniq paranccsal kiszűröm az ismétlődő sorokat (szavakat) és a sorok elé íratom az előfordulások számát, majd rendezem az előfordulások száma szerint.

Az odt néhány XML fájl zip-elve, a content.xml-ből sed-del el lehet távolítani a tag-eket.

ezt terminálba írjam be vagy ez hogy müködik mert nem értem

szia

ez hogy mükődik vagyis hogy tudom használni?? :-))

terminálba?

köszi

Igen, terminálban. Pontosabban: ez egy "szövegszűró", azaz ha kiadod ezt a parancsot, a bemenetére küldött szöveg szavait vizsgálja, és a kimenetre írja a statisztikát.

Ha nem ismernéd: ha két parancs közé | jelet írunk, az első parancs kimenete lesz a második parancs bemenete. Az általam írt sorban mind a 4 parancs úgy működik, hogy a bemenetére küldött szöveget átalakítja, és a kimenetre küldi. Tehát az első parancs bemenetére küldött szöveg átmegy a 4 szűrőn, és a negyedik parancs kimenete lesz a végső kimenet, a statisztika. Ha egy fájlból akarsz statisztikát csinálni, az első parancs bemenetét olvastasd egy fájlból, azaz az első parancs után (az első | elé) írd ezt: <fájlnév . Ha a statisztikát fájlba akarod íratni, akkor az utolsó parancs kimenetét irányítsd egy fájlba, azaz az utolsó parancs után írd ezt: >fájlnév .

akkor ez így jó?

--kimenet.txt

a két vonal előtte az nincs ottt:-)

akkor ez így jó?

[i]kimenet.txt[\i]

akkor ez így jó?

< arany.txt tr -s " " "\n"|sort|uniq -ci|sort -nr > kimenet.txt

Nem. Azt, hogy egy parancs bemenete vagy kimenete a terminál helyett egy fájl legyen, mindig a parancs után kell megadni, tehát ahhoz, hogy az első parancs (az első | előtti parancs) bemenete az arany.txt legyen, ez kell:
tr -s " " "\n"<arany.txt|sort|uniq -ci|sort -nr>kimenet.txt

Amúgy: amíg nem válaszoltak a hozzászólásodra, tudod szerkeszteni, ha alatta a Szerkesztés linkre kattintasz. Nem kellett volna mindig új hozzászólást küldeni.

Tudom hogy lehet szerkeszteni de az internetem nem olyan jó mint volt...

aztán így nem láttam hogy mit ír vissza...
bocsi nem akartam 3 üzit küldeni

köszi a választ

Dehogynem, Bash-ben (nem Dos-ban :) nyugodtan mehet az átirányítás az elejére, sőt akárhova, akár az argumentumok közé is. Még szebb is úgy, ha az elején van a stdin átirányítás, a végén meg a stdout.

<arany.txt tr -s " " "\n" | sort | uniq -ci | sort -nr >kimenet.txt

nagyon király vagy gd!!a parancsodat hogy lehetne úgy kiegészíteni hogy a szavak számát is kiirja

ilyen alapon akkor egy adott doksira van betűstatisztika nem?ahol megszámolja adottt betűkből és írásjelekből mennyi van?

van ilyen?

köszi

man wc

Karakterekkel kapcsolatban ilyesmire gondoltal?:
sed 's/\(.\)/\1\n/g' |sort|uniq -ci|sort -nr

Valóban wc: tr -s " " "\n"|sort|uniq -i|wc -l

szia én ezt beírtam de nem ment

sed 's/\(.\)/\1\n/g'< arany.txt |sort|uniq -ci|sort -nr> kimenet.txt

mi a gond ezzel?

Az, hogy a sed-nek a parancs elé -e kell.

és akkor mit is írjak be hogy jó legyen?
nem tudok rájönni!

eza betűstatisztika progi nem?

sed -e 's/\(.\)/\1\n/g'< arany.txt |sort|uniq -ci|sort -nr> kimenet.txt

man sed

Az eredeti felvetésben említve volt a ragozás. A ragozás figyelembe vétele már jó ideje megvalósítható szabad szoftveres eszközökkel, konkrétan a Hunspell csomag hunstem programjával és a morfológiai információkkal kiegészített magyar szótárral.

Pl.

$ echo "A kutya szereti a macskát. A macskák szeretik a kutyákat." | ./hunstem ./hu_HU_morph.{aff,dic} /dev/stdin | grep -v ">" | sort | uniq -c

      4 a
      2 kutya
      2 macska
      2 szeret

SZiasztok!

Hogy kell ezt a hunspell nevű morfológiai elemzőt feltelepíteni?
aot-get install- al feltettem de mégsem megy
Köszi a választ

A kérdés már csak az, hogy mit tettél fel apt-get install-lal...
Nézz körül a projektek oldalain, nincs ez még annyira kényelmesre csinálva, hogy elsőre menjen.
http://hunspell.sf.net/
http://magyarispell.sf.net/

Szia!

ezeket az oldalakat jócskán átnéztem már de nem sikerült semmi jót összehozni eddig !

a hunspellt feltettem (apt-vel)

jó lenne egy kis segítség mert már nagyon megszenvedek ezzel

(én egy szövegben lévő szavakat szeretnék szótövesíteni)

Szted hogy csináljam vagy mit tegyek még fel!

Nagyon örülnék egy kis segítségnek

köszi

1. kérdés: van "hunstem" binárisod? Ha nincs, fordíts forrásból (hunspell része)
2. kérdés: van morfológiai információval ellátott szótárad? Ha nincs, készíts forrásból (magyarispell része)

Ezeket a dolgokat nem fogod tudni csomagból feltenni, mert nincsenek becsomagolva, vagy ha be vannak, akkor is egyszerűbb gyorsan fordítani egyet, mint keresgélni. Ha próbáltál fordítani, és nem ment, akkor írd le, hogy mi nem ment.

Szia!valahogy próbáld így fórumon keresztül elmondani mert nagyon kezdő linuxos vagyok nem olyan régóta tolom. ezeket a forrásos dolgokat nem értem(hunsteam,ispell)

az elejétől kellene segítség

hogy mit szedjek le hogy mit telepítsek(fordítsak)

vhogy nem tudjuk felvenni a kapcsolatot?

köszönöm a segítséget

Visszavonom tanaimat. Először is, a legújabb hunspell-ben nincs is hunstem. Másodszor is nem igazodok ki a jelenlegi helyzeten, és a dokumentáció sem segít.

Pl. man-ban:

hunspell -r *.html
Az aktuális könyvtárban található összes HTML állomány szavainak és a szavak szótöveinek kiírása.

Igen ám, de -r kapcsoló valójában nincs. További nyomozás szükséges, hogy a probléma hogyan oldható meg.

Nagyon szépen köszönöm a válaszokat!

Azért megkérdezem hogy segítesz e nekem a probléma megoldásában?

Köszi a választ

A dokumentációt most frissítem. A hunstem funkciók az analyze programba kerültek, de a napokban várható kiadásban a parancssori hunspell -s kapcsolójával (ami egyben szavakra is tördel, tehát egyből szövegfájlokon futtatható) is elérhető lesz.
A magyar tövezést sajnos még javítani kell, elsősorban azért, mert a képzett alakoknál nagyon lelassul a tövezés (toldalékolást is használ itt a program, ami a nem optimalizált szótárral még meggátolja, hogy nagy mennyiségű szöveg indexelésére lehessen használni).

Mikorra várható hogy tudom használni a tövezést kár lassan akár optimalizálva?
Nekem csak egy viszonylagos eredmény kell!
Ha lesz bármiféle info erről a dologról írj már nekem ide vagy egy emailt.
köszi
ja és a dokumentációt honnan érem el és mit töltsek le hogy majd menjen?
sapi87 kukac citromail pont hu

Magad uram, ha szolgád nincsen: http://pastebin.com/VMUNr56Z

Ez a regex-gyűjtemény szolgált 4-5 éve egy tízezer egyedi tételt tartalmazó név- és címmutató toldalékainak leválasztására. (Persze nem teljes, de nálam csak ezek fordultak elő, és nem is hibátlan, azért javítgatnom kellett egy-két tételt utólag :)

A dokumentáció jól fog jönni, mert nem úgy működik, mint régen.

timar@jars-desktop:~/magyarispell-1.3$ analyze hu_HU_morph.aff hu_HU_morph.dic /dev/stdin
majom
> majom
analyze(majom) = st:majom [noun]{+[NOM]}
stem(majom) = majom
majmot
> majmot
Unknown word.
majomot
> majomot
Unknown word.
kutya
> kutya
analyze(kutya) = st:kutya [noun]{+[NOM]}
stem(kutya) = kutya
kutyát
> kutyát
Unknown word.
cica
> cica
analyze(cica) = st:cica [noun]{+[NOM]}
stem(cica) = cica
cicát
> cicát
Unknown word.
megyek
> megyek
Unknown word.
megy
> megy
Unknown word.

A tövezett szóstatisztika ügyében van e már valami eredmény????

hol van a friss dokumentáció?

Köszönöm

A kettővel fenti példám azért nem ment, mert elrontottam a szótárkészítést. Tehát elvileg minden jó már most is.

A te fő problémád, sapi, ha jól látom, az, hogy az "ilyen forrásos dolgokat nem érted". Ezen nehéz lesz segíteni egy rövid hozzászólásban, meg kell tanulnod valahonnan, ha terveid vannak a szabad szoftverekkel.

Általában annyira egyszerű, hogy a forráscsomagot le kell tölteni, ki kell csomagolni, majd a ./configure && make && sudo make install parancsot kiadni. A kicsomagolt forrás gyökerében szokott lenni readme, azt el lehet olvasni.

A magyarispell csomagot egyszerűen úgy kell "lefordítani" hogy 'make'.

Te valamire vársz most? Mondjuk a Hunspell 1.2.2 kiadására? Ez szerintem nem szükséges, mert a feladatodat az 1.2.2 bétával vagy egy régebbi kiadással is megoldhatod. Laci leírta, hogy a 'hunstem' átneveződött 'analyze'-ra, vagy egyik, vagy másik meglesz. Utána meg a fórumban feljebb gördítve megnézed, hogy hogy kell használni, leírtam már. Ha odáig eljutsz, hogy elkészíted a tövező programot és a szótárat, és parancssorban működik, akkor jelezd, és továbbléphetünk, hogy hogyan dolgozd fel a kimenetét céljaidnak megfelelően.

"Ha odáig eljutsz, hogy elkészíted a tövező programot és a szótárat, és parancssorban működik, akkor jelezd, és továbbléphetünk, hogy hogyan dolgozd fel a kimenetét céljaidnak megfelelően."

Na ezt nem értem!

Tehát letöltöm a csomagokat és ezzel kell megcsinálni ./configure && make && sudo make install

ez ok a következő kérdés
Mit kell letölteni és forrásból feltenni?

kicsit értetlen vagyok mert egy két dolog nem tiszta:-)

köszi a kitartó válaszokat :-)

így csomagolod ki őket:
tar xzf fájlneve
minden ilyesmi parancsot terminálba vagy konzolba írj be. TAB billentyűvel kiegészíthetsz. Ha nem egyértelmű, nyomd meg kétszer.
ha alap dolgokkal sem vagy tisztában, nézz körbe pl. itt: http://szabilinux.hu/ - bár kissé elavult, még mindig sokat tanulhatsz belőle.

na kész van feltettem a hunspell -t (kicsomagoltam majd ./configure && make && sudo make install - lal)
aztán ispell kicsomagolás és make és a végén ezt kaptam

===> ragozási táblázat (magyar.aff) előállítása
/bin/sh: m4: not found
make: *** [magyar.aff] Error 127

eddig kész várom az instrukciókat

ez mit jelent!

hogy kell parancssorbol megnézni hogy mükődik e?

eddig kész várom az instrukciókat

mit csináljak most???

köszi a kitartást

apt-get install m4
és utána a magyarispell mappában még egyszer: make clean && make

Az m4 csomag feltétlenül szükséges a ragozási táblázatok előállításához.

apt-get install m4


It doesn't matter if you like my song as long as you can hear me sing

ez kész:-))))
most egy txt fájlból hogy tudnám kinyerni az adatokat?
vagy kimenetróől vagy bárhonnan is?

köszi

Tegyük fel, hogy a szöveg utf8 kódolásban van. Akkor:
$ analyze hu_HU_u8_morph.aff hu_HU_u8_morph.dic valami.txt

lefutattam egy txt(utf-8) re és ezt kaptam ez egy részlet

generate(társal­kodónője,, a tiszt korábbi kedvese és annak az anyja között, kiket ő mind személye) = NO DATA
generate(en, ismert. Ez volt az alapeszme, a végkatasztrófa, amihez aztán nekem a megelőző történetet) = NO DATA
generate(, mely e végzethez elvezet, hozzá kellett építenem, s a szereplő alakokat, helyzeteket mind ö) = NO DATA
generate(sze­válogatnom:, hihetővé tennem. De azok az alakok és helyzetek mind megvoltak valósággal.) = NO DATA
generate(A, “Senki szigetének” a létezéséről pedig Frivaldszky Imre nagynevű természettudósunk �) = NO DATA
generate(ltal, értesültem, s az a hatvanas években még a maga kivételes állapotában megvolt, mint egy) = NO DATA
generate(se, Magyar-, se Törökországhoz nem tartozó új alkotású terület.) = NO DATA
generate(Ennyit, jónak láttam elmondani.) = NO DATA
generate(Dr., Jókai Mór) = NO DATA

mit rontottam el ??

nekem ilyesmi erdemény kellene:

http://hup.hu/node/46561#comment-515732

Ejnye, megint rossz tanácsot adtam, mert a hunstem nagyon berögzült az agyamba. Az analyse úgy működik, hogy ha egy sorban 2 szó van, akkor az elsőt a másodiknak megfelelően próbálja ragozni. Ez nem sikerülhetett.

Szóval mondjuk azt lehetne csinálni, hogy a szöveget szavakra bontani előbb.

$ cat valamit.txt | tr -d '.,:;!?' | tr ' ' '\n' | analyze hu_HU_u8_morph.aff hu_HU_u8_morph.dic /dev/stdin

És akkor ennek a kimenetét szűrni igény szerint. Mondjuk

$ cat valamit.txt | tr -d '.,:;!?' | tr ' ' '\n' | analyze hu_HU_u8_morph.aff hu_HU_u8_morph.dic /dev/stdin | grep analyze | sed -e "s/^.*st://" -e "s/ .*//" | sort | uniq -c

Én ilyeneket szoktam gányolni magamnak, biztos lehetne szebben is...

az első ilyet ad:
Unknown word.
> új
Unknown word.
> alkotású
Unknown word.
> terület
Unknown word.
> Ennyit

a második meg a promtot adja

???

az első ilyet ad:
"...
> új
Unknown word.
> alkotású
Unknown word.
> terület
Unknown word.
> Ennyit
... "
a második meg a promtot adja

???

Megjelent a Hunspell 1.2.2. Töltsd le, a hunspell program -s kapcsolóval tövez, minden eddiginél egyszerűbben. Magyarul is van friss dokumentáció a csomagban.

Pontosan mit tegyek fel és hogyan és milyen paranccsal tudok egy txt-t letövezi!!

köszi a választ

feltettem a hunspell új kiadását de mondjuk hunspell -s arany.txt-re ezt kapo:
Nem lehet megnyitni a ragozási vagy a szótárfájlt.

Pontosan mit tegyek fel és hogyan és milyen paranccsal tudok egy txt-t letövezni!!

köszi a választ

hunspell -d /a/szotar/eleresi/utja/hu_HU_u8 -s <arany.txt

A szótár ugyanaz, mint amit már egyszer feltettél: magyarispell 1.3

Egyébként meg: man hunspell

A szótár elérési útja micsoda alap esetben mert ezt nem tudom?,

köszi

amit eddig csináltam:

(letölt hunspell
letölt magyarispell
kicsomagolom őket
majd ahunspell ./configure && make && sudo make install
apt-get install m4
majd magyarispell make
ennyit csináltam semmit nem állítgattam)

Akkor ott van a szótár, ahol elkészítetted, a kicsomagolt magyarispell könyvtárban. Annak az elérési útját kell megadni. Ha átmásolod az /usr/share/hunspell könyvtárba (amit valószínűleg előbb létre kell hozni), akkor nem kell a -d után elérési utat írnod, csak a szótár nevét. Ha itt a szótárt átnevezed default.dic-re és default.aff-ra, akkor -d kapcsoló sem kell.

úgy néz ki megy adolog de lehet h még lesznek gondok!:-)
példa: hunspell -d /home/sapi/magyarispell-1.3/hu_HU_u8 -s

+ Törökország
*
+ tartozik
*
+ alkot
*

+ ennyi
+ jón
*
+ mond

de ez jó eredmény mert a tartozik szó sz nem szótő!? ez szerintem nem szótövesített!?

de megkérdezem hogy a meglehet e valahogy számoltatni hogy melyik szótöből mennyi van és ezt sorba rendezni és egy txt-be tenni

köszi a választ

A "tartozik" szónak szerinted mi a töve? Szerintem ezt speciel jól csinálta.

Természetesen meg lehet számolni és txt-be is ki lehet tenni.

grep, sed, sort, uniq

ezekre lesz szükséged. Pl. ha a kimenet olyan jellegű, mint amilyet írtál fent, akkor a parancs után illeszd be:

| grep "+" | sed -e "s/^.* //" | sort | uniq -c >kimenet.txt

igazad van rossz példát hoztam de a txt-ben ez is van: 5 zsibbad 2 zsibbadt ezeknek a szótöve a zsibbad nem?
akkor ez most jó eredmény?

ja meg nem rendezte előfordulás szerint sorba melyik paraméter írjam át?nekem ilyen eredmény kell: http://hup.hu/node/46561#comment-515732 ami te írtál!!:-)

köszi a választ

5 zsibbad 2 zsibbadt: hát ehhez nem tudok hozzászólni, lévén más szófajú a két szó, nem tudom hogy vannak a szótárban stb. Nem biztos, hogy egy igéből generálódik minden képzett forma, lehet, hogy külön is fel van véve.

Amit én írtam, ott véletlenül úgy jött ki, hogy az 'a'-ból volt a legtöbb. A számosság szerinti rendezéshez a uniq -c után írd be:
| sort -gr

De nem is értem, miért nem tudod ezeket kiolvasni a man-ból?! Én is onnan nézem, a fene sem tudja fejből.

köszi minden segítséget megoldódott minde! ezt a man hunspell dolgot meg teljesen elfelejtettem.BOCSI!

mostmár elsőnek man - t fogok olvasni aztán kérdezgetek?.:-)

köszi mindent

Ha már man-ról van szó, hogyan lehet parancssorból szinonimákat keresni? Egyáltalán lehet e?

Szia!

Nagyjából megismertem a program mükődését de arra nem tudok rájönni hogy az "a" mért nem hozza ki eredményként!
valahogy nem lehetne eredményként azt is számon tartani?

köszi a választ

Ez melyik programhoz megy?

az új hardy heron ubuntu nem megy a dolgo valami gond van és azt írja hogy

hunspell: error while loading shared libraries: libhunspell-1.2.so.0: cannot open shared object file: No such file or directory

na most mit tegyek?
a régi rendszer szerint lett telepítve és itt nem jó!!

Ezt találtam, de már lehet késő ;)
Nekem épp ilyenre volt szükségem:
http://www.csgnetwork.com/documentanalystcalc.html