Fórumok
Magyar szövegek bányászatához keresek szótövező könyvtárat. Ötletek? Lehetőleg python, de bármi jöhet.
Halovány ötletem, hogy elvileg libreoffice-ban vagy hunspellben lennie kell ilyennek, ugye? Viszont lövésem sincs, hogy hogy lehetne ezt kiragadni a környezetéből :)
Hozzászólások
Itt nézelődj: https://cgit.freedesktop.org/libreoffice/dictionaries/tree/hu_HU
Nemrég csináltam ilyet, a sima hunspell elég jól szótövez:
--
Csaba
Persze, csak egy hosszabb pipeline-ból másoltam ki a releváns részt, és nem akartam sokat szerkesztgetni.
--
Csaba
Kösz, erre ránézek!
Jee, valami ilyesmire gondoltam!
Ubuntun látok egy ilyet:
python3-hunspell
--
eutlantis
Nagyon könnyen megírhatod magadnak:
http://snowball.tartarus.org/algorithms/hungarian/stemmer.html
Egyszerű 9 lépéses algoritmus.
1-2 óra alatt anno Javaban összedobtam, amikor kellett segítenem egy szakdogához, de már nincs meg a kód.
A babakocs azért erős I nélkül. Értem én hogy a legrövidebb értelmes, de ez nem értelmes jelentésű
Van még ott sok ilyen. Például:
baba -> ba
baglyokat -> bagly
mulat -> mul
mulatt -> mulat
mulattat -> mulatt
Ha alaposan megnézi valaki, akkor talál néhányat, ami helyes is. :-)
Ilyen ez az NLP, ha algoritmikusan, és nem kézzel válogatott szótárral csinálod. Mert az utóbbi nem nagy kunszt gépileg, cserében nem kevés élőmunkával jár.
Ha egyszemélyes pjt-ben kellene ilyet összehoznom, összeboronálnám a kettőt:
1. az algoritmus próbálkozzon: minimális találat,
2. a tőjelöltet kikeresni a MEK-ről letölthető nagyszámú darab szövegéből kinyert, uniq-olt és indexelt mintájából*,
3. ha nincs találat, hibalistára írni kézi ellenőrzésre, és visszalépni az aktuálisnál hosszabb tőjelöltre,
4. goto 2
* Ez a minta nagyon helypazarló volna, és tizenöt éve nem is javasoltam volna ilyet, de ma már...
Szerintem ez elméletileg érdekesebb, gyakorlatban viszont úgy tűnik a hunspelles megoldás a jobb.
Egyébként ha már tökéletességre törekszünk, akkor szerintem hibás megközelítés izoláltan kezelni a szavakat, mert egy ember is a szövegkörnyezet, jelentés és gyakoriság (valószínűség) kombinációjából találja ki, hogy a szó végén toldalék van-e, vagy a szó része. De én csak egy kis poén projektet készítek, amihez jó lesz ez is.
Mondjuk nem árt, ha tisztázod, hogy nyelvtani szótövek kellenek, vagy valamit algoritmust akarsz futtatni azokon a töveken, mert akkor lehet, hogy így beljebb vagy. Máskor meg úgy.
--
Csaba
Egyébként :-)
- baba: ezt talán nem kell magyarázni
- Kocs: egy község. Illetve egyes vidékeken a szőlő kocsányát hívják így.
Teljesen egyetértek, ez ilyen könnyű műfaj, amit 1-2 óra alatt össze lehet dobni normálisra. Főleg a magyar szótövezés, ami rogyásig van hangváltó és tőváltó kivételekkel (pl. tó-tavat). Szerintem a hunspell is azért dolgozik szótáralapon, mert a gazdija nem akarta bevállalni a könnyű kis 9 lépéses algoritmuskát. Az a mocsok nagy szerencsénk, hogy legalább az elválasztás könnyebb.
„Pár marék nerd-et leszámítva kutyát se érdekel már 2016-ban a Linux. Persze, a Schönherz koliban biztos lehet villogni vele, de el kéne fogadni, ez már egy teljesen halott platform. Hagyjuk meg szervergépnek…” Aron1988@PH Fórum
A kérdező könyvtárat keresett, és nem szótárat, erre mindenki szótárat ajánlott neki :(
Ha megelégszünk azzal, hogy a végeredmény „nyomokban szótövet is tartalmazhat” akkor ez is lehet jó megoldás. Egyébként a fentebb javasolt python3-hunspell-nek olyan könyvtár kinézete van. Az más kérdés, hogy használja a hunspell szótárakat.
Eredetileg tényleg azt kerestem, de igazából bármilyen megoldás érdekel, a lényeg, hogy megoldás legyen :)
Aki még nem csinálta úgy, hogy utána gyakorlatban használta is az eredményt, az nem is sejti, hogy még a pofátlanul egyszerűen építkező angol szavakat többé-kevésbé tökéletesen lecsupaszítani is eltart egy ideig.
Azt hiszem, a fentebb említett python-hunspell lesz a befutó. https://github.com/blatinier/pyhunspell
Kösz mindenkinek a tippeket. És persze jöhetnek továbbiak is.