-
Notifications
You must be signed in to change notification settings - Fork 4
Stemmer
Lara also comes with a few stemming algorithms for removing common morphological and inflexional endings from words in Hungarian. Its main use is as part of a term normalization process that is usually done when setting up Information Retrieval systems without relying on dictionaries. The functions work by taking vowel harmonies into account, which could hint whether an ending is an affix or just a part of the actual word and should not be removed.
It's called tippmix because its results are slightly better than random guessing. You can call the stemmer.tippmix(text) function the following way:
from lara import stemmer
text = '''A szövegbányászat a strukturálatlan vagy kis mértékben strukturált szöveges állományokból történő ismeret kinyerésének tudománya; olyan különböző dokumentumforrásokból származó szöveges ismeretek és információk gépi intelligenciával történő kigyűjtése és reprezentációja, amely a feldolgozás előtt rejtve és feltáratlanul maradt az elemző előtt. '''
print(stemmer.tippmix(text))
>>> ['a', 'szövegbányász', 'a', 'strukturál', 'vagy', 'kis', 'mér', 'strukturál', 'szöveg', 'állományok', 'törte', 'ismer', 'kinyerése', 'tudomány', 'oly', 'különböz', 'dokumentumforrások', 'származ', 'szöveg', 'ismere', 'és', 'információ', 'gép', 'intelligencia', 'törte', 'kigyűjtés', 'és', 'reprezentáció', 'amely', 'a', 'fel', 'dolgoz', 'elő', 'rej', 'és', 'fel', 'tár', 'mar', 'az', 'elemz', 'elő']
Note that number of returned stems might be larger than the actual number of words in the text, as the stemmer also separates certain adverb particles.
The just_asking stemmer can be used to find the stemmed forms of words (mostly nouns) in interrogative sentences, so you can use them for search queries (preferably after removing stopwords and question words). You can call stemmer.just_asking(text) function the following way:
from lara import stemmer
print(stemmer.just_asking('Mikor írták az Egri Csillagokat?'))
print(stemmer.just_asking('Milyen hangot adnak ki a kutyák?'))
>>> ['mikor', 'írt', 'az', 'egri', 'csillag']
>>> ['milyen', 'hang', 'ad', 'ki', 'a', 'kuty']
Even though it is listed here, the inverse function's purpose is to assign common affixes to nouns, in accordance with their vowel harmony. This way it is possible to properly use certain keywords in sentences instead of just listing them:
from lara import stemmer
fruit = 'meggy'
print(stemmer.inverse(fruit,'s'),'pitét kérek')
print(stemmer.inverse(fruit,'val'),'kérem a pitét')
print(stemmer.inverse(stemmer.inverse(fruit,'s'),'val'),'vagyok elégedett')
>>> meggyes pitét kérek
>>> meggyel kérem a pitét
>>> meggyessel vagyok elégedett
Note that the value 'val' would still generate the affix 'gyel' instead of 'gyal'. The function accepts the same affixes for different vowel harmonies and translate them accordingly. Here is the list of accepted affixes:
Affix | Result |
---|---|
i |
fürdői, meggyi, békai, leányi, tavi, pontyi, töki, szobori, házi |
k |
fürdők, meggyek, békák, leányok, tavak, pontyok, tökök, szobrok, házak |
s |
fürdős, meggyes, békás, leányos, tavas, pontyos, tökös, szobros, házas |
t |
fürdőt, meggyet, békát, leányot, tavat, pontyot, tököt, szobrot, házat |
ba, be |
fürdőbe, meggybe, békába, tóba, pontyba, tökbe, szoborba, házba |
on, en, ön |
fürdőn, meggyen, békán, leányon, tavon, pontyon, tökön, szoboron, házon (also: Pécsett) |
ra, re |
fürdőre, meggyre, békára, leányra, tóra, pontyra, tökre, szoborra, házra |
ban, ben |
fürdőben, meggyben, békában, tóban, pontyban, tökben, szoborban, házban |
ból, ből |
fürdőből, meggyből, békából, leányból, tóból, pontyból, tökből, szoborból, házból |
nak, nek |
fürdőnek, meggynek, békának, leánynak, tónak, pontynak, töknek, szobornak, háznak |
ról, ről |
fürdőről, meggyről, békáról, leányról, tóról, pontyról, tökről, szoborról, házról |
tól, től |
fürdőtől, meggytől, békától, leánytól, tótól, pontytól, töktől, szobortól, háztól |
val, vel |
fürdővel, meggyel, békával, leánnyal, tóval, ponttyal, tökkel, szoborral, házzal |