Tudtok ajánlani sztemmelő algoritmusokat magyar nyelvhez?
Olvasd el a cikket, le van írva az összes kapcsolódó algoritmus.
Én azt ajánlom hogy töltsd le a Hunspell könyvtárat vagy amelyik éppen aktuális és azt használd.
Esetleg tudnál útbaigazítást adni a hunspellel kapcsolatosan?
Felinstalláltam, beraktam a projektembe, letöltöttem egy szótárat hozzá, azonban csakis azokat a szavakat ismeri ami a szótárban fellelhető.
Pl. "kutya" szó rendben van, a "kutyák" szavat már nem találja.
Egy példaprogi jól jönne.
Mégis milyen programozási nyelvben? Hunspell repojában van egy halom C++ példa a hunspell/src/tools/ mappában illetve dokumentáció a függvényekhez, ha más nyelvben kell segítség akkor a wrapper projektének oldalán keresgélj.
Programozás nélkül is megy:
$ echo kutyák | hunspell -d hu_HU
Hunspell 1.3.3 - Magyar 1.6
+ kutya
$ echo kutyákat | hunspell -d hu_HU -m
kutyákat st:kutya po:noun ts:NOM is:PLUR is:ACC
Biztos hogy jó szótárt telepítettél amúgy?
Pl. ez biztosan működik: [link]
Igen, többek között az általad megadott linkről is letöltöttem a szótárat (hu_HU.aff/dic).
Érdekes módon ha a .aff fájl értelmetlen karaktereket tartalmaz (lásd a képet). Ez normális? Nálad is így jelenik meg? Lehetséges, hogy a windowsban a karakterkódolást kell megváltoztatni? Gondolom ezt mivel az angol verzió működik probléma nélkül...és nem jelennek meg kriksz-krakszok a .aff fájlban.
Amúgy c++-ban dolgozok. A következő példakód nem működik. Az analyze fgv. a result-ba mindig nullát tesz ha a szó nem jelenik meg a .dic fájlban:
char ** result;
char** result2;
int n1 = analyze(&result, "words");
int n2 = stem(&result2, result, n1);
De próbáltam simán a stem függvényt is használni analyze nélkül de ugyancsak nem működött.
Pontosabban a kódom:
Hunspell *spellObj = (Hunspell *)hunspell_initialize("hu_HU.aff", "hu_HU.dic");
char **result;
char **result2;
int n1 = spellObj->analyze(&result, "kutyat");
int n2 = spellObj->stem(&result2, result, n1);
Igen, az affix fájlnak úgy kell kinéznie, ha érdekel hogy miért, elolvasod dokumentációt és a makealiast.
A kódodban "kutyat" szó van ami nyilván 0-val tér vissza mert olyan szó nem létezik. A "kutyát" szóra gondoltál. Az affix fájlban egyébként UTF-8 kódolás van megadva úgyhogy azzal dolgozz.
Jah...a kutyát szó sem megy.
A programozás nélküli példát csak simán beírtad a konzolba? Nálam hibát ír ki.
'$' is not recognized as an internal or external command,
operable program or batch file.
A Hunspell-t 1.4-től átdolgozták, stringek és vektorok használatosak már. Ha nem működik, akkor a karakterkódolásoddal van a baj, konvertáld át már írtam. Arra is van példa, ugyan ott a repo-ban.
A parancssoros példát pedig inkább hagyd ha nem tudod használni.
Annyit még tudok neked segíteni hogy írtam egy példakódot 1.3-ra ami nekem működik, a karakterkódolást kihagytam mert mert UTF8-ként mentve működik:
#include <iostream>
#include <hunspell/hunspell.hxx>
using namespace std;
int main()
{
Hunspell* pMS = new Hunspell("/usr/share/myspell/hu_HU.aff", "/usr/share/myspell/hu_HU.dic");
char **result;
size_t n = pMS->stem(&result, "kutyát");
for (size_t i = 0; i < n; ++i)
cout << result[i] << endl;
if (n == 0)
cout << "Nincs találat!" << endl;
return 0;
}
A program kimenete: kutya
Még egy memória-felszabadítás lemaradt a végéről:
pMS->free_list(&result, n);
Kapcsolódó kérdések:
Minden jog fenntartva © 2024, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!