Привел в порядок и выложил
пакет rupostagger - простую (и не SOTA) реализацию алгоритма для разметки слов тегами. Пакет не делает ничего, кроме разметки, поэтому токенизацию надо делать самостоятельно. Я использую пакет под 2 и 3 веткой питона, под Windows и Linux. Батарейки (обученная русская языковая модель) входят в комплект, ничего самостоятельно обучать не надо. Также используется русская словарная база - отдельный
пакет ruword2tags, и
слогоделитель rusyllabs, они указаны в requirements.txt.
После установки (pip install git+
https://github.com/Koziev/rupostagger) использовать так:
import rupostagger
tagger = RuPosTagger()
tagger.load()
for word, label in tagger.tag(u'кошки спят'.split()):
print(u'{} -> {}'.format(word, label))
Результат работы метода RuPosTagger.tag - список пар (слово, строка_с_тегами):
кошки -> NOUN|Case=Nom|Gender=Fem|Number=Plur
спят -> VERB|Mood=Ind|Number=Plur|Person=3|Tense=Notpast|VerbForm=Fin|Voice=Act
Как видно, теги отделяются символом вертикальной черты. Каждый тег, кроме части речи, состоит из наименования тега и его значения, разделенные знаком =. Я не стал бить строку и выдавать питоновский список тегов, поскольку под капотом теггер получает именно строку, а накладные расходы на манипуляции со списками могут быть и не нужны. Например, если нужно проверить, что слово - существительное, тогда достатночно вызвать startswith('NOUN|'), и так далее.
Набор тегов взят из
Universal Dependencies.