Skip to content

Stemmer

Nagyfi Richárd edited this page May 10, 2018 · 4 revisions

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.

TippMix stemmer

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.

Just asking

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']

Inverse

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
Clone this wiki locally