InfoMC 3. labor

Szószámlálás

EngVocab = WordList[]
Length[EngVocab]

SortBy[EngVocab, StringReverse]

mytext=Import["http://sandbox.hlt.bme.hu/~gaebor/ea_anyag/InfoMC/kjb.txt", "Text"];
bibleCounts=WordCounts[mytext]
bibleVocab=Keys[bibleCounts];

Total[bibleCounts[#]&/@bibleVocab]
Length[bibleVocab]

ListPlot[Values[bibleCounts], Joined->True]

Zipf törvény

ListLogLogPlot[Values[bibleCounts], Joined->True, PlotRange->All]

letterCounts=Counts[Characters[mytext]]

Feladatok

Készítsünk magyar rímszótárat.
Nincsen magyar szótár a Mathematica-ban, gyártsuk le magunk. Ehhez szöveg:
http://sandbox.hlt.bme.hu/~gaebor/ea_anyag/InfoMC/biblia.txt

Megoldás

Lényegében ez a fenti részek megfelelő sorainak egymásutánja.

mytext=Import["http://sandbox.hlt.bme.hu/~gaebor/ea_anyag/InfoMC/biblia.txt", "Text"]
bibleCounts=WordCounts[mytext]
bibleVocab=Keys[bibleCounts]
SortBy[bibleVocab, StringReverse]

Hogyan tehetjük kereshetővé?
Írjunk függvényt, ami egy adott szóhoz visszaad 10 hasonló végű szót (5 előtte és 5 utána lévő szót).

Megoldás

rendezett=SortBy[bibleVocab, StringReverse];(*ez ugyan az, mint az előbb, csak eltárolom az eredményt egy változóba*)

Hely[szo_]:=Position[rendezett, szo][[1,1]] (*Ez egy függvény, ami megmondja, hogy hol van az adott szó a (hátulról) rendezett szószedetben *)

Hely["kutya"]

Rimek[szo_]:=Table[rendezett[[i]], {i,Hely[szo]-5, Hely[szo]+5}] (*Ez kiszedi a megfelelő részt a szószedetből*)

Rimek["kutya"]

Csináljuk meg a a rímszótárat úgy, hogy kisbetűsítsünk minden szót és csak a magánhangzókat vegyük figyelembe a rendezésnél!

Megoldás

A fájl beolvasásánál kisbetűsítek, azon kívül ugyan az.

mytext=ToLowerCase[Import["http://sandbox.hlt.bme.hu/~gaebor/ea_anyag/InfoMC/biblia.txt", "Text"]]
bibleCounts=WordCounts[mytext]
bibleVocab=Keys[bibleCounts]

A rendezéshez egy speciális függvényt készítek.

Vowel[x_]:=MemberQ[{"a", "á", "e","é", "i", "í", "o", "ó", "ö", "ő", "u", "ú", "ü", "ű"},x]

Vowel["a"]
Vowel["b"]

Special[x_]:=Select[Characters[StringReverse[x]], Vowel](*kiválasztja a megfordított szóból a magánhangzókat*)

Special["fiaiéinak"]

rendezett= SortBy[bibleVocab, Special]

Ezzel már más rímeket ad ki a függvény.

Rimek["kutya"]