227 lines
1.9 KiB
Python
227 lines
1.9 KiB
Python
"""Hungarian search language: includes the JS Hungarian stemmer."""
|
|
|
|
from __future__ import annotations
|
|
|
|
from typing import TYPE_CHECKING, Dict
|
|
|
|
import snowballstemmer
|
|
|
|
from sphinx.search import SearchLanguage, parse_stop_word
|
|
|
|
hungarian_stopwords = parse_stop_word('''
|
|
| source: http://snowball.tartarus.org/algorithms/hungarian/stop.txt
|
|
| prepared by Anna Tordai
|
|
a
|
|
ahogy
|
|
ahol
|
|
aki
|
|
akik
|
|
akkor
|
|
alatt
|
|
által
|
|
általában
|
|
amely
|
|
amelyek
|
|
amelyekben
|
|
amelyeket
|
|
amelyet
|
|
amelynek
|
|
ami
|
|
amit
|
|
amolyan
|
|
amíg
|
|
amikor
|
|
át
|
|
abban
|
|
ahhoz
|
|
annak
|
|
arra
|
|
arról
|
|
az
|
|
azok
|
|
azon
|
|
azt
|
|
azzal
|
|
azért
|
|
aztán
|
|
azután
|
|
azonban
|
|
bár
|
|
be
|
|
belül
|
|
benne
|
|
cikk
|
|
cikkek
|
|
cikkeket
|
|
csak
|
|
de
|
|
e
|
|
eddig
|
|
egész
|
|
egy
|
|
egyes
|
|
egyetlen
|
|
egyéb
|
|
egyik
|
|
egyre
|
|
ekkor
|
|
el
|
|
elég
|
|
ellen
|
|
elő
|
|
először
|
|
előtt
|
|
első
|
|
én
|
|
éppen
|
|
ebben
|
|
ehhez
|
|
emilyen
|
|
ennek
|
|
erre
|
|
ez
|
|
ezt
|
|
ezek
|
|
ezen
|
|
ezzel
|
|
ezért
|
|
és
|
|
fel
|
|
felé
|
|
hanem
|
|
hiszen
|
|
hogy
|
|
hogyan
|
|
igen
|
|
így
|
|
illetve
|
|
ill.
|
|
ill
|
|
ilyen
|
|
ilyenkor
|
|
ison
|
|
ismét
|
|
itt
|
|
jó
|
|
jól
|
|
jobban
|
|
kell
|
|
kellett
|
|
keresztül
|
|
keressünk
|
|
ki
|
|
kívül
|
|
között
|
|
közül
|
|
legalább
|
|
lehet
|
|
lehetett
|
|
legyen
|
|
lenne
|
|
lenni
|
|
lesz
|
|
lett
|
|
maga
|
|
magát
|
|
majd
|
|
majd
|
|
már
|
|
más
|
|
másik
|
|
meg
|
|
még
|
|
mellett
|
|
mert
|
|
mely
|
|
melyek
|
|
mi
|
|
mit
|
|
míg
|
|
miért
|
|
milyen
|
|
mikor
|
|
minden
|
|
mindent
|
|
mindenki
|
|
mindig
|
|
mint
|
|
mintha
|
|
mivel
|
|
most
|
|
nagy
|
|
nagyobb
|
|
nagyon
|
|
ne
|
|
néha
|
|
nekem
|
|
neki
|
|
nem
|
|
néhány
|
|
nélkül
|
|
nincs
|
|
olyan
|
|
ott
|
|
össze
|
|
ő
|
|
ők
|
|
őket
|
|
pedig
|
|
persze
|
|
rá
|
|
s
|
|
saját
|
|
sem
|
|
semmi
|
|
sok
|
|
sokat
|
|
sokkal
|
|
számára
|
|
szemben
|
|
szerint
|
|
szinte
|
|
talán
|
|
tehát
|
|
teljes
|
|
tovább
|
|
továbbá
|
|
több
|
|
úgy
|
|
ugyanis
|
|
új
|
|
újabb
|
|
újra
|
|
után
|
|
utána
|
|
utolsó
|
|
vagy
|
|
vagyis
|
|
valaki
|
|
valami
|
|
valamint
|
|
való
|
|
vagyok
|
|
van
|
|
vannak
|
|
volt
|
|
voltam
|
|
voltak
|
|
voltunk
|
|
vissza
|
|
vele
|
|
viszont
|
|
volna
|
|
''')
|
|
|
|
|
|
class SearchHungarian(SearchLanguage):
|
|
lang = 'hu'
|
|
language_name = 'Hungarian'
|
|
js_stemmer_rawcode = 'hungarian-stemmer.js'
|
|
stopwords = hungarian_stopwords
|
|
|
|
def init(self, options: dict) -> None:
|
|
self.stemmer = snowballstemmer.stemmer('hungarian')
|
|
|
|
def stem(self, word: str) -> str:
|
|
return self.stemmer.stemWord(word.lower())
|