Hunspell 1.7.2+, Szabad Magyar Szótár 1.8 és LibreOffice 7.6

Van-e értelme a szótári alapú helyesírás-ellenőrzésnek a ChatGPT-k korában? Biztosan, mert a nagy nyelvi modellek nem nélkülözik a jövőben sem, hogy a vitás kérdésekben a szabályzat alapján döntsenek. Az új magyar nyelvi fejlesztések nemcsak naprakész szókinccsel, hanem olyan újdonságokkal is szolgálnak, mint a kontextusfüggő helyesírás-ellenőrzés, amely például a „hot”-ot magában elutasítja, de a „hot dog”-ot elfogadja a LibreOffice Writerben:

  • a szóellenőrző valójában még csak szópárellenőrző, de ezzel már lehetővé vált az olyan elütések elutasítása, mint „*pro és kontra” (helyesen „pró és kontra”, illetve „pro bono”);
  • az elütéseket nem fogadja el három vagy több tagból álló szóösszetételnek, l. Helyesírás-ellenőrzés „*perecízebben”;
  • a korrektorok számára új lehetőség, hogy a LibreOffice-ban kikapcsolhatóvá vált a szóösszetétel-generálás (külön a kötőjeles összetételekre is), amivel a két szóból álló összetételeket, illetve az annak elfogadott elütéseket is ellenőrizni lehet;
  • ha egy helyesírási hibát súlyosnak, illetve tipikusnak ismer fel a Hunspell helyesírás-ellenőrző, akkor egyéb javaslatatot nem is tesz a program: pl. szűzen -> szüzen (nincs már szüzén, szűzén, szűzien, szűzben, szűken, szűzin, szűzen, szűzön), vagy szervíz -> szerviz (nincs szervez, szerváz, szemvíz);
  • valamint helyes (és egyetlen) javaslatot tesz a leggyakoribb hibás egybeírásokra (több száz új különírás szótári felvételével), pl. testre szab, Petőfi híd (*Petőfi-híd) stb.

A fejlesztéseket az FSF.hu Alapítvány támogatta. A fejlesztésről részletes beszámoló jelenik meg hamarosan a LibreOffice.hu oldalon.

Hozzászólások

Szerkesztve: 2023. 05. 23., k – 08:33

> Van-e értelme a szótári alapú helyesírás-ellenőrzésnek

hat ez egy eredekes kerdes. egyreszt az LLM-ek tanitasahoz eloszurjuk az anyagot, hogy a nagy hulyesegeket ne tanulja meg, es ott pl. en is hasznaltam a hunspellt. meglepoen sok hiba van meg a hirportalok cikkeiben is...

masreszt viszont a transformer LLM-ek (inkabb a BERT-leszarmazottak, mint a decoder-only modelek pl. mint a chatgpt) nagyon jol hasznalhatok nyelvi problemakra, es a nagy elonye hogy nem kell kezzel szotarakat es algoritmusokat gyartani hozza, megtanulja magatol ezeket (unsupervised learning). persze ennek feltetele, hogy a tranitasahoz hasznalt szoveg tobbsegeben helyes legyen...

de hiaba lenne jobb erre egy LLM, nem fogod tudni offline hasznalni, a hatalmas memoria es szamitasi kapacitas igenye miatt...

pedig egy prediktiv (GPT/LLaMA) LLM is hasznos lehetne a LibreOffice-ban, ahogy irod a szoveget folyamatosan felajanlhatna a kovetkezo szot/szavakat (kb mint a google search). es ehhez meg csak nem is kene oriasi model, a kicsik ugyan nem annyira pontosak, de ha az esetek 90%-ban jot ajanl mar az is nagy segitseg lehet...

​Kíváncsian olvastam a tapasztalataidat az LLM-tanítással kapcsolatban, és köszönöm ezt a visszajelzést is! Örülök, hogy a Hunspell segíteni tudott valamit!

Egyetértek, hogy az LLM offline méretkorlátja és az online használatból eredő biztonsági kérdések korlátozzák az LLM-ek jelenlegi felhasználását a LibreOffice-ban (bár az online DeepL fordítót már be lehet kapcsolni a Writerben). Valószínű, hogy a közeljövőben inkább egy LLM segít majd a helyesírási szótár bővítésében, javításában, mintsem fordítva.

A mostani kiadásban van azért már egy kis előremutató automatizálás: a magyar Wikipédia szövegtartalma (egy 4,6 GB-os szövegfájl) feldolgozásra került a következő PageRank-szerű egysorossal:

cat wikipedia.xml | grep -Eo '[[][[](\w|-|[.])*[]][]]' | tr -d '][' | sort | uniq -c | sort -rsn | hunspell -l

Az eredmény a Wikipédia címszavak gyakorisági listája a rájuk való Wikipédia hivatkozások alapján. Így kiderült, hogy érdemes az anime (855 hivatkozás), klád (403 hivatkozás), Triceratops (122 hivatkozás), Higgs (85 hivatkozás) szavak mellett a földimalacot (35 hivatkozás) is felvenni a szótárba. A terv, hogy választható szaknyelvi modulok készülnek a Writerhez, ahol 5-10-20 ezer szaknyelvi szót lehet igény szerint bekapcsolni, amíg ezt nem teszi meg automatikusan a program. Az első kísérleti modul már el is készült, Petőfi összes költeményeinek szókincsével (az eredeti versek, nem amelyeket a ChatGPT írt Petőfi stílusában :). Mindössze 5 ezer szó, amelyet nem ismert fel a magyar szótár, pl.:

aafődön
abbul
Ábelszivek
abeundi
Ábrándaimnak
ábrándim
Absurdum
acélánál
acélgyürű
ácsorga
ád
ada
adá
adál

(Az „aafődön” elütésnek tűnt, de nem, csak a tájnyelvi kiejtést tükröző költői írásmód. Úgyhogy az említett földimalacot már is utolértük: az afrikaansból jött angol aadvarkhoz hasonlóan a magyar nyelvben is van egy tuti szótárkezdő szavunk, az aafőd. :)

A Wikipédia fenti feldolgozásáról, illetve az egyéb friss LibreOffice fejlesztésekről itt található némi plusz információ: MoreFunLibreOffice_Fosdem2023_12.pdf

hat ne is mondd, a regies irasmodok, meg tajnyelvi stb formakkal nekem is meggyult a bajom, pl. a regi konyvek tele vannak ilyesmivel... az AI meg nem tart ott hogy ezeket felfogja, es idoben/terben el tudja helyezni, neki ugyanolyan input szoveg mint a tobbi es csak osszezavarja :)

Szerkesztve: 2023. 05. 23., k – 10:25

A szókincs bővítésében és javításában szeretném megköszönni a segítséget a közreműködőknek, többek között Tuna Andrásnak, Pénzes Dávidnak és Úr Balázsnak!

Jaj, multkor mar neztem hogy kene egy hunspell 1.7.3 (vagy akarmi is lesz a kovetkezo release) hogy legyen Hunspell_add_with_flags.

Amugy errol a szoparellenorzorol van barmi leiras? Leszedtem gitbol a legujabb magyar szotarat, command liine hunspell-bol mukodni latszik hogy "hot" invalid, "hot dog" meg igen, de hogy nez ez ki a c api szinten? Mert nekem "hot dog", "hot_dog", "hot-dog"-ra mind azt mondja a Hunspell_spell hogy invalid.

I hate myself, because I'm not open-source.

Igen, tényleg csak a dán dog miatt került be a szótárba a dog, úgyhogy érdemes lehet csak szókapcsolattal elfogadni: bodeaux-i dog, dán dog és német dog (és akkor a „dolgodat” elütése, a „dogodat” felismerésre kerülne).

A jelenlegi forrásból előállított állományok innen is letölthetők:

wget https://cgit.freedesktop.org/libreoffice/dictionaries/plain/hu_HU/hu_HU…

wget https://cgit.freedesktop.org/libreoffice/dictionaries/plain/hu_HU/hu_HU…

De készül egy tar.gz kiadás is ezekkel az állományokkal a héten. Jelzem, ha elérhető.

Arra gyanakszom, hogy a C API használatakor rossz szótár kerül betöltésre, mert szóközzel mennie kellene, sőt, a régebbi Hunspell-lel is (mivel már ott is lehetett szópárokat megadni a dic fájlban a javaslatok pontosítására). A szópárellenőrzésnél a fejlesztés az volt, hogy a LibreOffice Writer ICU-n alapuló szövegtördelése nem szavanként, hanem szópárokként is átadja ellenőrzésre hibás szó esetén a Hunspellnek a bekezdés szavait: https://bugs.documentfoundation.org/show_bug.cgi?id=154499.

A folt a leírással: https://git.libreoffice.org/core/+/5619fc438273cd15e78539e78b8af751bca24b1a%5E%21

A Hunspell karaktergrafikus alkalmazásban (pl. hunspell fájl.txt, sőt, hunspell fájl.odt) a szópárellenőrzés nincsen még támogatva, csak parancssorban, de ott is elég fapados módon: a frekvencialisták szűrésére való -1 kapcsolóval lehet a szóközt is megadni:

echo -e 'hot\t\ndog\t\nhot dog\t' | hunspell -1
Hunspell 1.7.2 - Magyar 1.8
& hot 2 3: hót, hőt

*

*

A fenti példában a bemenet 3 soros: a hot, dog és hot dog szavakat, illetve szópárt tartalmazza tabulátorral zárva. A -1 kapcsolónak megfelelően a tabulátorok előtti rész, így a „hot dog” is egy szóként kerül átadásra a spell() (Hunspell_spell) függvénynek. A kimenetben az látszik, hogy az új szótárral a hot már hibás, a dog és a hot dog viszont helyes (csillaggal jelölve). Régi szótárral a hot dog még hibás:

hot dog 2 7: hót dog, hőt dog

Régebbi Hunspell-lel, de új szótárral pedig látható a sok kevésbé jó javaslat is, de a hot dog ugyanúgy jó:

Hunspell 1.7.0 - Magyar 1.8
& hot 14 3: hót, hőt, hit, hoz, holt, hont, hat, hol, hát, hon, hét, bot, hűt, h-t

*

*

Egyébként a szópárellenőrzés annyiban nem újdonság a LibreOffice-ban, hogy a Lightproof mondatellenőrzővel van lehetőség a bekezdések teljes szövegének ellenőrzésére, de ezt csak pár nyelv használja (bár a magyar éppen igen, és jelzi is pár több szóból álló idegen kifejezésnél a hibát, pl. ha az „et” önmagában fordul elő). A szópárellenőrzéssel minden Hunspell szótárat egyszerűen bővíteni lehet anélkül, hogy idegen és egyéb frázisok szavanként legyenek felvéve a szótárba, amelytől a legtöbb szótárfejlesztő joggal ódzkodott. (Pl. a LibreOffice en_US szótárából ezért hiányoznak az angol szövegekben gyakran előforduló latin eredetű kifejezések, kivéve az „etc.” („stb.”) rövidítést. A standard /usr/share/dict/words angol szólista az etc-t sem tartalmazza, pedig az „etc/” a Unix/Linux központi könyvtárának neve is egyben – mondjuk a passwd-ből, és a többi fura rendszerhívásnévből kitűnik, hogy nemcsak a Multics, hanem az angol helyesírás is optimalizálva lett a Unixon. Bár mikor megkérdezték Ken Thompsont, hogy min változtatna a Unixon, ha újratervezhetné az alapoktól, azt mondta, hogy a „creat” rendszerhívást e-vel írná: "I'd spell creat with an e.")

Köszönöm a visszajelzést!

Valami tenyleg a szotarral nem oke, de nalam mar a hunspell cli se jo akkor. A fenti peldad nalam igy nez most ki:

$ echo -e 'hot\t\ndog\t\nhot dog\t' | hunspell -1 -d ./hu_HU_u8_gen_alias
Hunspell 1.7.2 - Magyar 1.8
& hot 14 3: hót, hőt, hit, hoz, holt, hont, hat, hol, hát, hon, hét, bot, hűt, h-t

*

& hot dog 2 7: hót dog, hőt dog

Megprobaltam most letolteni a leforditott szotarakat a libreoffice repobol, de ezzel is ugyan az az eredmeny. Vagy fel kene ezt tenni valami system path-ba? Nem akartam felulirni a disztro csomagjat.

EDIT: ami kicsit gyanus, hogy a forrasban meg ott van a hot_dog (szotar/idegen/ragozatlan.2 meg szotar/idegen/fonev.1), a leforditott dic fajlokban mar sehol. Vagy ez nem gond?

I hate myself, because I'm not open-source.

A letöltött szótárral biztos, hogy nem megy? A fordítás sajnos lehet hibás több okból is, de alap Ubuntu 22.0-vel fordítottam. A kiadásba bekerül még Lendvai Attila következő foltja, amely javít pár potenciális fordítási hibát (explicit bash használata, párhuzamos make futtatás tiltása): https://github.com/laszlonemeth/magyarispell/pull/59

Kitoroltem kozbe mindent (beleertve a gentoo myspell-hu csomagjat) es ujrakezdtem 0-rol az egeszet. Lehet hogy csak beneztem az elobb valamit, mert a letoltott szotar most mar elfogadja a "hot dog"-ot, bar a hot-ra meg mindig rossz javaslatokat ad:

$ echo -e 'hot\t\ndog\t\nhot dog\t' | hunspell -1 -d ./hu_HU
Hunspell 1.7.2 - Magyar 1.8
& hot 14 3: hót, hőt, hit, hoz, holt, hont, hat, hol, hát, hon, hét, bot, hűt, h-t

*

*

Ha en probalom leforditani ugy tovabbra is rossz (az altalad linkelt PR-al egyutt is). Ir ki mondjuk gyanus dolgokat forditas kozben, vannak karakterkodolasi hibak, lehet amiatt tunik el valahol? https://gist.github.com/DirtYiCE/7009bf27e1c96f9e20f4aa50d57a2922

I hate myself, because I'm not open-source.

Nem, probalkoztam mar LC_ALL=hu_HU.UTF-8-al, most kiprobaltam a LANG=hu_HU.UTF-8-at is meg melleveve, nem segitett.

Amugy nemi debuggolas utan, az egyik sor pl amin elszall a recode az ez:

Brooklyn[ph:brúklin,hy:Brook-l·yn]

Ott van egy U+00B7 MIDDLE DOT benne ami nincs ISO-8859-2-ben.

I hate myself, because I'm not open-source.

Én jellemzően angol szövegeket írok. Gyakori, hogy először LO-ban kezdem, aztán ha meg kéne osztani, akkor feldobom OneDrivera és webes Wordben folytatom. Az LO helyesírás ellenőrzője nem sok hibát szokott fogni, inkább csak zavar, mert mindenfélét aláhuzigál, pl. tegnap talán a WebSockets-et kellett a szótárhoz hozzáadnom. Viszont amint Wordben nézem, ömlenek a jogos nyelvhelyességi észrevételek. Vagy csak simán a sok változtatás miatt értelmetlen mondatok keletkeztek, vagy "in such case" -> "in such a case" és hasonló hibákat fog. Szóval a Word nagyságrendileg lépi le a LO-t tapasztalataim szerint.

A brit angol szótár több naprakész szót tartalmaz, mint az amerikai, esetleg azt is érdemes kipróbálni.

Ha lesz magyar szakmai szókincsmodul a Wikipédia címszavak alapján, akkor angol is. (Emlékeztem egy angol kiegészítő szótárra, de most nem találtam, csak egy bölcsészek számára készített tudományos szótárat: https://github.com/emareg/acamedic).

Angol nyelvtani ellenőrzéshez jó lehet még a LanguageTool LibreOffice kiegészítő:

https://languagetool.org/insights/post/product-libreoffice/

de akár a GMail is, amely képes kiszűrni a hasonló angol nyelvhelyességi hibákat (de a magyar nyelv esetében bosszantóan sok helyes szót húz alá pirossal még).

Régebben az 1.6.1 verziót használtam macOS-en helyesírás ellenőrzésre sokáig, viszont elég sok alap magyar szó hiányzott belőle sajnos így elég körülményes volt a használata. Akkor döglött projektnek látszott, mert éveken keresztül nem volt belőle új verzió, pedig hát jó lett volna.

Most már a macOS-ben van elég jó helyesírás ellenőrző szótár, amiből csak néha 1-2 szó hiányzik (nem tudom mennyi részt vettek át a hunspellből), így sajnos már nem használom közvetlenül.

A macOS pár éve még biztosan a Hunspell 1.2.8-at tartalmazta beépítetten:

https://opensource.apple.com/source/hunspell/hunspell-11/

Elképzelhető, hogy ez, illetve a Hunspell 1.6.1 sem működött mindenben együtt az újabb magyar szótárakkal.

Hogy mit használ most a macOS, kíváncsi lennék rá, de nem lepődnék meg, ha még mindig ott lenne a Hunspell is, biztos, ami biztos.

A legújabb hunspell szóállományokat honnan lehet letölteni?
Ha van saját korpuszom (soronként egy szóval), azt hogyan tudom a szóállomány részévé tenni?

10-féle lény van:
-- aki ismeri a bináris számrendszert,
-- és amelyik nem.

> A legújabb hunspell szóállományokat honnan lehet letölteni?

A LibreOffice dictionaries moduljából: https://hup.hu/comment/2922384#comment-2922384

> Ha van saját korpuszom (soronként egy szóval), azt hogyan tudom a szóállomány részévé tenni?

Saját korpusz hozzáadása a parancssorban a -p kapcsolóval lehetséges:

hunspell -p saját_szavak

A LibreOffice-ban pedig (magyar nyelvű) saját szótár létrehozásával, majd az így létrejött szöveges állomány kibővítésével, a három kötőjelet tartalmazó sor után, pl.

OOoUserDict1
lang: hu-HU
type: positive
---
abajgat
satöbbi

De hasznos lehetőség még parancssorban, hogy több szótár is megadható, pl.

hunspell -d hu_HU,en_US,de_DE

így a szöveg szavait a magyar, angol, illetve a német szótárban is keresi a program. (Ha egyikben sem találja, javaslatot az alapján tesz, hogy az előzőleg elfogadott szót melyik szótárban találta meg, így annyira nem keveri a nyelveket, csak lehetővé teszi a többnyelvű szövegek gyors ellenőrzését.)