Kezdőoldal » Számítástechnika » Programozás » Tudtok ajánlani sztemmelő...

Tudtok ajánlani sztemmelő algoritmusokat magyar nyelvhez?

Figyelt kérdés
2016. máj. 4. 19:57
1 2
 1/12 anonim ***** válasza:
10 percembe telt kideríteni, mégis mi a lópikula akar a "sztemmelés" lenni (lévén kb senki nem használja ezt a kifejezést). A válaszom pedig: Kétlem, hogy lenne. A szótövek meghatározása nem egy kimondottan determinisztikus folyamat, a magyar nyelvnél meg pláne nem. Ezt legfeljebb intenzív szótárazással lehet megvalósítani, amit algoritmusnak nem csúfolnék.
2016. máj. 4. 21:02
Hasznos számodra ez a válasz?
 2/12 anonim ***** válasza:

[link]


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.

2016. máj. 4. 21:54
Hasznos számodra ez a válasz?
 3/12 A kérdező kommentje:

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.

2016. máj. 4. 22:45
 4/12 anonim ***** válasza:

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]

2016. máj. 4. 23:34
Hasznos számodra ez a válasz?
 5/12 A kérdező kommentje:

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.

[link]


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.

2016. máj. 6. 17:00
 6/12 A kérdező kommentje:

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);

2016. máj. 6. 17:12
 7/12 anonim ***** válasza:

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.

2016. máj. 7. 12:16
Hasznos számodra ez a válasz?
 8/12 A kérdező kommentje:

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.

2016. máj. 7. 12:43
 9/12 anonim ***** válasza:

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

2016. máj. 7. 15:38
Hasznos számodra ez a válasz?
 10/12 anonim ***** válasza:

Még egy memória-felszabadítás lemaradt a végéről:

pMS->free_list(&result, n);

2016. máj. 7. 15:53
Hasznos számodra ez a válasz?
1 2

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

A weboldalon megjelenő anyagok nem minősülnek szerkesztői tartalomnak, előzetes ellenőrzésen nem esnek át, az üzemeltető véleményét nem tükrözik.
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!