Text
sosem éltem közegben

Írtam egy programot, ami ékezetesít.

Általam szeretve tisztelt szerzők (pl. pblue respect) tucatjai írnak úgy magyar szöveget, hogy nem használnak ékezeteket, és amikor lenyúlom ezeket a mondatokat, amikor felírom őket, elnaplózom, kisajátítom stb., el kell végeznem az ékezetesítés fárasztó rítusát.

A program szétszedi a szöveget szavakra, lepucolja őket, aztán végigmegy minden szó minden betűjén, és legyártja az összes lehetséges változatot az adott szóból, ami az ékezettelen magánhangzók ékezetesre cserélésével (vagy pucéron hagyásával) elképzelhető; majd egy szótárban ellenőrzi, hogy az ezek közül a kombinációk közül melyik értelmes, és a találatot visszaírja a szövegbe.

A szótár nagy, 1,5 millió szó van benne, pár éve a Nyelvtudományi Intézettől kaptam, azóta is hálával gondolok rájuk. Toldalékokkal-igekötővel-összetételekben-mindennel együtt vannak benne a szavak (morfémák). (Szónak nevezem a két szóelválasztó karakter között levő állatot, az elválasztók lehetnek a szóköz, valamint ",.?!([ stb. karakterek.) A hossz szerinti gyakoriság hisztogrammja úgy néz ki, hogy 8 és 14 betűs szavakból 100ezer darab felett van a szótárban, és a leggyakoribbak a 11 betűs szavak: 200015 darab van belőlük egészen pontosan. Na, ebben a halmazban kellene keresni. Brute force a pc-nek - és hát nincs annyi gépidő, kedves barátaim.

A rekurzív táblakezelésnél is meggyűlt a bajom a rekordmutatóval, de ezt megoldottam.

Optimalizáltam úgy, hogy csak a keresőfréz hosszúságával egyenlő hosszúságú szavak közt keressen, ez elég jó lett, sokat gyorsított rajta, de így is nagyon lassú. Egy 200 karakteres, átlagos mondaton 2-3 perc alatt ér végig.

Tipp?
Jobb szótár kellene, ami kisebb, de csak a gyakoribb szavakat tartalmazza?
Hogyan működnek a helyesírás-ellenőrzők? Erről tud valaki? Ott kb. ugyanezt a problémát kell megoldani.

Az információ a kódolásban van, írjatok ékezeteket, pls.

***

update másnap: Séta közben szerintem meg is találtam a megoldást. Tehát a keresőfrézek kombinációi a magánhangzók cserélgetéséből adódnak, a mássalhangzók viszont változatlanok. Le kell indexelni a szótárat a mássalhangzókra, olyan csonkított szavakra, amikből kihagyom a magánhangzókat. Ez majdnem minden szóhoz egyedi indexet fog rendelni, jeee.

A szavak msslhngz-gerincére történő indexelés fényesen bevált. Fényesen. Mint a villám :)

≈ accentuater