252 lines
7.7 KiB
Python
252 lines
7.7 KiB
Python
|
"""Russian search language: includes the JS Russian stemmer."""
|
|||
|
|
|||
|
from __future__ import annotations
|
|||
|
|
|||
|
from typing import TYPE_CHECKING, Dict
|
|||
|
|
|||
|
import snowballstemmer
|
|||
|
|
|||
|
from sphinx.search import SearchLanguage, parse_stop_word
|
|||
|
|
|||
|
russian_stopwords = parse_stop_word('''
|
|||
|
| source: http://snowball.tartarus.org/algorithms/russian/stop.txt
|
|||
|
и | and
|
|||
|
в | in/into
|
|||
|
во | alternative form
|
|||
|
не | not
|
|||
|
что | what/that
|
|||
|
он | he
|
|||
|
на | on/onto
|
|||
|
я | i
|
|||
|
с | from
|
|||
|
со | alternative form
|
|||
|
как | how
|
|||
|
а | milder form of `no' (but)
|
|||
|
то | conjunction and form of `that'
|
|||
|
все | all
|
|||
|
она | she
|
|||
|
так | so, thus
|
|||
|
его | him
|
|||
|
но | but
|
|||
|
да | yes/and
|
|||
|
ты | thou
|
|||
|
к | towards, by
|
|||
|
у | around, chez
|
|||
|
же | intensifier particle
|
|||
|
вы | you
|
|||
|
за | beyond, behind
|
|||
|
бы | conditional/subj. particle
|
|||
|
по | up to, along
|
|||
|
только | only
|
|||
|
ее | her
|
|||
|
мне | to me
|
|||
|
было | it was
|
|||
|
вот | here is/are, particle
|
|||
|
от | away from
|
|||
|
меня | me
|
|||
|
еще | still, yet, more
|
|||
|
нет | no, there isnt/arent
|
|||
|
о | about
|
|||
|
из | out of
|
|||
|
ему | to him
|
|||
|
теперь | now
|
|||
|
когда | when
|
|||
|
даже | even
|
|||
|
ну | so, well
|
|||
|
вдруг | suddenly
|
|||
|
ли | interrogative particle
|
|||
|
если | if
|
|||
|
уже | already, but homonym of `narrower'
|
|||
|
или | or
|
|||
|
ни | neither
|
|||
|
быть | to be
|
|||
|
был | he was
|
|||
|
него | prepositional form of его
|
|||
|
до | up to
|
|||
|
вас | you accusative
|
|||
|
нибудь | indef. suffix preceded by hyphen
|
|||
|
опять | again
|
|||
|
уж | already, but homonym of `adder'
|
|||
|
вам | to you
|
|||
|
сказал | he said
|
|||
|
ведь | particle `after all'
|
|||
|
там | there
|
|||
|
потом | then
|
|||
|
себя | oneself
|
|||
|
ничего | nothing
|
|||
|
ей | to her
|
|||
|
может | usually with `быть' as `maybe'
|
|||
|
они | they
|
|||
|
тут | here
|
|||
|
где | where
|
|||
|
есть | there is/are
|
|||
|
надо | got to, must
|
|||
|
ней | prepositional form of ей
|
|||
|
для | for
|
|||
|
мы | we
|
|||
|
тебя | thee
|
|||
|
их | them, their
|
|||
|
чем | than
|
|||
|
была | she was
|
|||
|
сам | self
|
|||
|
чтоб | in order to
|
|||
|
без | without
|
|||
|
будто | as if
|
|||
|
человек | man, person, one
|
|||
|
чего | genitive form of `what'
|
|||
|
раз | once
|
|||
|
тоже | also
|
|||
|
себе | to oneself
|
|||
|
под | beneath
|
|||
|
жизнь | life
|
|||
|
будет | will be
|
|||
|
ж | short form of intensifer particle `же'
|
|||
|
тогда | then
|
|||
|
кто | who
|
|||
|
этот | this
|
|||
|
говорил | was saying
|
|||
|
того | genitive form of `that'
|
|||
|
потому | for that reason
|
|||
|
этого | genitive form of `this'
|
|||
|
какой | which
|
|||
|
совсем | altogether
|
|||
|
ним | prepositional form of `его', `они'
|
|||
|
здесь | here
|
|||
|
этом | prepositional form of `этот'
|
|||
|
один | one
|
|||
|
почти | almost
|
|||
|
мой | my
|
|||
|
тем | instrumental/dative plural of `тот', `то'
|
|||
|
чтобы | full form of `in order that'
|
|||
|
нее | her (acc.)
|
|||
|
кажется | it seems
|
|||
|
сейчас | now
|
|||
|
были | they were
|
|||
|
куда | where to
|
|||
|
зачем | why
|
|||
|
сказать | to say
|
|||
|
всех | all (acc., gen. preposn. plural)
|
|||
|
никогда | never
|
|||
|
сегодня | today
|
|||
|
можно | possible, one can
|
|||
|
при | by
|
|||
|
наконец | finally
|
|||
|
два | two
|
|||
|
об | alternative form of `о', about
|
|||
|
другой | another
|
|||
|
хоть | even
|
|||
|
после | after
|
|||
|
над | above
|
|||
|
больше | more
|
|||
|
тот | that one (masc.)
|
|||
|
через | across, in
|
|||
|
эти | these
|
|||
|
нас | us
|
|||
|
про | about
|
|||
|
всего | in all, only, of all
|
|||
|
них | prepositional form of `они' (they)
|
|||
|
какая | which, feminine
|
|||
|
много | lots
|
|||
|
разве | interrogative particle
|
|||
|
сказала | she said
|
|||
|
три | three
|
|||
|
эту | this, acc. fem. sing.
|
|||
|
моя | my, feminine
|
|||
|
впрочем | moreover, besides
|
|||
|
хорошо | good
|
|||
|
свою | ones own, acc. fem. sing.
|
|||
|
этой | oblique form of `эта', fem. `this'
|
|||
|
перед | in front of
|
|||
|
иногда | sometimes
|
|||
|
лучше | better
|
|||
|
чуть | a little
|
|||
|
том | preposn. form of `that one'
|
|||
|
нельзя | one must not
|
|||
|
такой | such a one
|
|||
|
им | to them
|
|||
|
более | more
|
|||
|
всегда | always
|
|||
|
конечно | of course
|
|||
|
всю | acc. fem. sing of `all'
|
|||
|
между | between
|
|||
|
|
|||
|
|
|||
|
| b: some paradigms
|
|||
|
|
|
|||
|
| personal pronouns
|
|||
|
|
|
|||
|
| я меня мне мной [мною]
|
|||
|
| ты тебя тебе тобой [тобою]
|
|||
|
| он его ему им [него, нему, ним]
|
|||
|
| она ее эи ею [нее, нэи, нею]
|
|||
|
| оно его ему им [него, нему, ним]
|
|||
|
|
|
|||
|
| мы нас нам нами
|
|||
|
| вы вас вам вами
|
|||
|
| они их им ими [них, ним, ними]
|
|||
|
|
|
|||
|
| себя себе собой [собою]
|
|||
|
|
|
|||
|
| demonstrative pronouns: этот (this), тот (that)
|
|||
|
|
|
|||
|
| этот эта это эти
|
|||
|
| этого эты это эти
|
|||
|
| этого этой этого этих
|
|||
|
| этому этой этому этим
|
|||
|
| этим этой этим [этою] этими
|
|||
|
| этом этой этом этих
|
|||
|
|
|
|||
|
| тот та то те
|
|||
|
| того ту то те
|
|||
|
| того той того тех
|
|||
|
| тому той тому тем
|
|||
|
| тем той тем [тою] теми
|
|||
|
| том той том тех
|
|||
|
|
|
|||
|
| determinative pronouns
|
|||
|
|
|
|||
|
| (a) весь (all)
|
|||
|
|
|
|||
|
| весь вся все все
|
|||
|
| всего всю все все
|
|||
|
| всего всей всего всех
|
|||
|
| всему всей всему всем
|
|||
|
| всем всей всем [всею] всеми
|
|||
|
| всем всей всем всех
|
|||
|
|
|
|||
|
| (b) сам (himself etc)
|
|||
|
|
|
|||
|
| сам сама само сами
|
|||
|
| самого саму само самих
|
|||
|
| самого самой самого самих
|
|||
|
| самому самой самому самим
|
|||
|
| самим самой самим [самою] самими
|
|||
|
| самом самой самом самих
|
|||
|
|
|
|||
|
| stems of verbs `to be', `to have', `to do' and modal
|
|||
|
|
|
|||
|
| быть бы буд быв есть суть
|
|||
|
| име
|
|||
|
| дел
|
|||
|
| мог мож мочь
|
|||
|
| уме
|
|||
|
| хоч хот
|
|||
|
| долж
|
|||
|
| можн
|
|||
|
| нужн
|
|||
|
| нельзя
|
|||
|
''')
|
|||
|
|
|||
|
|
|||
|
class SearchRussian(SearchLanguage):
|
|||
|
lang = 'ru'
|
|||
|
language_name = 'Russian'
|
|||
|
js_stemmer_rawcode = 'russian-stemmer.js'
|
|||
|
stopwords = russian_stopwords
|
|||
|
|
|||
|
def init(self, options: dict) -> None:
|
|||
|
self.stemmer = snowballstemmer.stemmer('russian')
|
|||
|
|
|||
|
def stem(self, word: str) -> str:
|
|||
|
return self.stemmer.stemWord(word.lower())
|