Ha Arany és Petőfi miatt vagy itt…

… 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 »egyedi« 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