… akkor jó helyen jársz. Az Adatlabor csinálta a kutatást. (inspirácóért köszönet Kajtár Róbertnek) Itt megmutatok néhány technikaibb háttér-infot az elemzésről. Röviden újra összefoglalom az eredményeket. (Ha a kódolás részét túl bonyolultnak érzed, ugord át nyugodtan.) A kutatás célja az volt, hogy kiderítsük, melyik költőnknek a legnagyobb a szókincse, azaz melyik költőnk használ legtöbb »e
gyedi« szót verseiben. Az eredmények röviden:
egyedi szavak | egyedi szótövek | leírt szavak | egyedi szótő arány | ||
1 | Arany János | 59697 | ~16.000 | 287425 | 20.77% |
2 | Vörösmarty Mihály | 43938 | ~12.000 | 214104 | 20.52% |
3 | Petőfi Sándor | 32855 | ~9.600 | 154721 | 21.23% |
4 | Ady Endre | 30243 | ~10.400 | 124574 | 24.28% |
5 | Babits Mihály | 27116 | ~11.000 | 398003 | 6.81% |
6 | József Attila | 19635 | ~8.200 | 62811 | 31.26% |
Tehát, ahogy azt magyar órán is megtanulhattuk: Arany János a nyertesünk.
Több részletet: az origo-s cikkben olvashatsz.
Nézzük a technikai hátteret az egész mögött.
1. Milyen technológiát válasszunk?
Ez nem volt nehéz döntés. Csak egy gondolat: a Big Data nagyjából 1 milliárd sornyi adatnál kezdődik és mivel ennyit együtt sem írtak költőink, bár használhatnánk Big Data script-eket, ez amolyan ágyúval verébre megoldás lenne.
Egyébként Apache Pig-ben egy szószámláló script kb így néz ki hozzá:
A = load './input.txt'; B = foreach A generate flatten(TOKENIZE((chararray)$0)) as word; C = group B by word; D = foreach C generate COUNT(B), group; store D into './wordcount';
(Forrás: itt)
A másik nyelv a Python lehetne, de az igazság az, hogy ilyen „kicsi” (pár százezer sor) adatmennyiséggel még egy egyszerű Bash script is megbirkózik és ott lényegesen rövidebb a kód:
cat text.txt \ |tr -d '[:punct:]' \ |sed 's/[[:upper:]]*/\L&/' \ |tr ' ' '\n' \ |wc -l
Az első sor beolvassa az adott szöveget, a második kiveszi a központozást, a harmadik gondoskodik arról, hogy a kisbetű-nagybetű ne számítson külön szónak (pl. mondat eleji „Kalap” és mondatközepi „kalap”) – a negyedik sor, minden szót egy új sorba tesz, az utolsó pedig megszámolja, hogy hány sorunk van.
Ha az egyedi szavakra vagyunk kíváncsiak, ki kell szednünk a szóismétléseket és minden egyedi szót csak egyszer számolni. Ehhez beteszünk az utolsó előtti sorba még egy kódot.
cat text.txt \ |tr -d '[:punct:]' \ |sed 's/[[:upper:]]*/\L&/' \ |tr ' ' '\n' \ |sort -u \ |wc -l
A szótövezés (azaz a „kalaptól” és „kalapban” szavak hasonlóságának felismertetése) egy kicsit bonyolultabb folyamat, úgyhogy abba nem is nagyon mennék bele.
Még a top 100 kifejezés listának a kódja lehet érdekes. Ez írja ki, hogy pl. mi volt az Ady Endre által legtöbbször leírt száz szó.
cat text.txt \ |tr -d '[:punct:]' \ |sed 's/[[:upper:]]*/\L&/' \ |tr ' ' '\n' \ |sort |uniq -c |sort -nr| head -100
Ha csak a Toldit elemezzük, akkor a legtöbbször használt kifejezések (az ún. stop-word-öket, mint pl. „a”, „az”, „hogy”, „is”, stb… eltávolítva):
65 Toldi
54 Miklós
29 jó
28 király
27 György
21 Isten
19 szépen
…
Egyébként a kutatás relatív egyszerű volt, az egész elemző script tokkal vonóval 40 sor — de jellemzően maga az adat megszerzése (versek lekérése) és letisztítása volt ebből 35 sor, a számláló megírása pedig 5.
Ígérem, ez volt a legtechnikaibb cikkünk! :-)
Tomi