317 lines
5.0 KiB
Python
317 lines
5.0 KiB
Python
"""Italian search language: includes the JS Italian stemmer."""
|
|
|
|
from __future__ import annotations
|
|
|
|
from typing import TYPE_CHECKING, Dict
|
|
|
|
import snowballstemmer
|
|
|
|
from sphinx.search import SearchLanguage, parse_stop_word
|
|
|
|
italian_stopwords = parse_stop_word('''
|
|
| source: http://snowball.tartarus.org/algorithms/italian/stop.txt
|
|
ad | a (to) before vowel
|
|
al | a + il
|
|
allo | a + lo
|
|
ai | a + i
|
|
agli | a + gli
|
|
all | a + l'
|
|
agl | a + gl'
|
|
alla | a + la
|
|
alle | a + le
|
|
con | with
|
|
col | con + il
|
|
coi | con + i (forms collo, cogli etc are now very rare)
|
|
da | from
|
|
dal | da + il
|
|
dallo | da + lo
|
|
dai | da + i
|
|
dagli | da + gli
|
|
dall | da + l'
|
|
dagl | da + gll'
|
|
dalla | da + la
|
|
dalle | da + le
|
|
di | of
|
|
del | di + il
|
|
dello | di + lo
|
|
dei | di + i
|
|
degli | di + gli
|
|
dell | di + l'
|
|
degl | di + gl'
|
|
della | di + la
|
|
delle | di + le
|
|
in | in
|
|
nel | in + el
|
|
nello | in + lo
|
|
nei | in + i
|
|
negli | in + gli
|
|
nell | in + l'
|
|
negl | in + gl'
|
|
nella | in + la
|
|
nelle | in + le
|
|
su | on
|
|
sul | su + il
|
|
sullo | su + lo
|
|
sui | su + i
|
|
sugli | su + gli
|
|
sull | su + l'
|
|
sugl | su + gl'
|
|
sulla | su + la
|
|
sulle | su + le
|
|
per | through, by
|
|
tra | among
|
|
contro | against
|
|
io | I
|
|
tu | thou
|
|
lui | he
|
|
lei | she
|
|
noi | we
|
|
voi | you
|
|
loro | they
|
|
mio | my
|
|
mia |
|
|
miei |
|
|
mie |
|
|
tuo |
|
|
tua |
|
|
tuoi | thy
|
|
tue |
|
|
suo |
|
|
sua |
|
|
suoi | his, her
|
|
sue |
|
|
nostro | our
|
|
nostra |
|
|
nostri |
|
|
nostre |
|
|
vostro | your
|
|
vostra |
|
|
vostri |
|
|
vostre |
|
|
mi | me
|
|
ti | thee
|
|
ci | us, there
|
|
vi | you, there
|
|
lo | him, the
|
|
la | her, the
|
|
li | them
|
|
le | them, the
|
|
gli | to him, the
|
|
ne | from there etc
|
|
il | the
|
|
un | a
|
|
uno | a
|
|
una | a
|
|
ma | but
|
|
ed | and
|
|
se | if
|
|
perché | why, because
|
|
anche | also
|
|
come | how
|
|
dov | where (as dov')
|
|
dove | where
|
|
che | who, that
|
|
chi | who
|
|
cui | whom
|
|
non | not
|
|
più | more
|
|
quale | who, that
|
|
quanto | how much
|
|
quanti |
|
|
quanta |
|
|
quante |
|
|
quello | that
|
|
quelli |
|
|
quella |
|
|
quelle |
|
|
questo | this
|
|
questi |
|
|
questa |
|
|
queste |
|
|
si | yes
|
|
tutto | all
|
|
tutti | all
|
|
|
|
| single letter forms:
|
|
|
|
a | at
|
|
c | as c' for ce or ci
|
|
e | and
|
|
i | the
|
|
l | as l'
|
|
o | or
|
|
|
|
| forms of avere, to have (not including the infinitive):
|
|
|
|
ho
|
|
hai
|
|
ha
|
|
abbiamo
|
|
avete
|
|
hanno
|
|
abbia
|
|
abbiate
|
|
abbiano
|
|
avrò
|
|
avrai
|
|
avrà
|
|
avremo
|
|
avrete
|
|
avranno
|
|
avrei
|
|
avresti
|
|
avrebbe
|
|
avremmo
|
|
avreste
|
|
avrebbero
|
|
avevo
|
|
avevi
|
|
aveva
|
|
avevamo
|
|
avevate
|
|
avevano
|
|
ebbi
|
|
avesti
|
|
ebbe
|
|
avemmo
|
|
aveste
|
|
ebbero
|
|
avessi
|
|
avesse
|
|
avessimo
|
|
avessero
|
|
avendo
|
|
avuto
|
|
avuta
|
|
avuti
|
|
avute
|
|
|
|
| forms of essere, to be (not including the infinitive):
|
|
sono
|
|
sei
|
|
è
|
|
siamo
|
|
siete
|
|
sia
|
|
siate
|
|
siano
|
|
sarò
|
|
sarai
|
|
sarà
|
|
saremo
|
|
sarete
|
|
saranno
|
|
sarei
|
|
saresti
|
|
sarebbe
|
|
saremmo
|
|
sareste
|
|
sarebbero
|
|
ero
|
|
eri
|
|
era
|
|
eravamo
|
|
eravate
|
|
erano
|
|
fui
|
|
fosti
|
|
fu
|
|
fummo
|
|
foste
|
|
furono
|
|
fossi
|
|
fosse
|
|
fossimo
|
|
fossero
|
|
essendo
|
|
|
|
| forms of fare, to do (not including the infinitive, fa, fat-):
|
|
faccio
|
|
fai
|
|
facciamo
|
|
fanno
|
|
faccia
|
|
facciate
|
|
facciano
|
|
farò
|
|
farai
|
|
farà
|
|
faremo
|
|
farete
|
|
faranno
|
|
farei
|
|
faresti
|
|
farebbe
|
|
faremmo
|
|
fareste
|
|
farebbero
|
|
facevo
|
|
facevi
|
|
faceva
|
|
facevamo
|
|
facevate
|
|
facevano
|
|
feci
|
|
facesti
|
|
fece
|
|
facemmo
|
|
faceste
|
|
fecero
|
|
facessi
|
|
facesse
|
|
facessimo
|
|
facessero
|
|
facendo
|
|
|
|
| forms of stare, to be (not including the infinitive):
|
|
sto
|
|
stai
|
|
sta
|
|
stiamo
|
|
stanno
|
|
stia
|
|
stiate
|
|
stiano
|
|
starò
|
|
starai
|
|
starà
|
|
staremo
|
|
starete
|
|
staranno
|
|
starei
|
|
staresti
|
|
starebbe
|
|
staremmo
|
|
stareste
|
|
starebbero
|
|
stavo
|
|
stavi
|
|
stava
|
|
stavamo
|
|
stavate
|
|
stavano
|
|
stetti
|
|
stesti
|
|
stette
|
|
stemmo
|
|
steste
|
|
stettero
|
|
stessi
|
|
stesse
|
|
stessimo
|
|
stessero
|
|
''')
|
|
|
|
|
|
class SearchItalian(SearchLanguage):
|
|
lang = 'it'
|
|
language_name = 'Italian'
|
|
js_stemmer_rawcode = 'italian-stemmer.js'
|
|
stopwords = italian_stopwords
|
|
|
|
def init(self, options: dict) -> None:
|
|
self.stemmer = snowballstemmer.stemmer('italian')
|
|
|
|
def stem(self, word: str) -> str:
|
|
return self.stemmer.stemWord(word.lower())
|