Недавно я тренируюсь построить сервис для лемматизации немецких слов.
Я нашел очень хорошую статью здесь
После того, как я проделал все шаги, описанные в статье, мой сервис работает неплохо, но во время тестирования я заметил, что некоторые глаголы не могут быть преобразованы в инфинитивную форму.
Например. кочст -> кочен. Основная причина в том, что мой POS-теггер дает мне ADV для 'kochst', тогда как должен VVFIN или, по крайней мере, V ... поскольку это глагол.
Я также обнаружил, что исходный файл корпуса TIGER не содержит формы kochst, а содержит только kocht.
Я не знаком с форматом conll, но добавил одну дополнительную строку, которая показана ниже
50475_11 kochst kochen _ VVFIN _ number=sg|person=2|tense=pres|mood=ind _ 0 _ -- _ _ _ _
и безуспешно переобучил теггер, см. листинг ниже
>>> import nltk
>>> corp = nltk.corpus.ConllCorpusReader('.', 'tiger_release_aug07.corrected.16012013.conll09',
... ['ignore', 'words', 'ignore', 'ignore', 'pos'],
... encoding='utf-8')
>>>
>>> tagged_sents = corp.tagged_sents()
>>>
>>> from ClassifierBasedGermanTagger.ClassifierBasedGermanTagger import ClassifierBasedGermanTagger
>>> tagger = ClassifierBasedGermanTagger(train=tagged_sents)
>>> tagger.tag(['kochst'])
[('kochst', u'ADV')]
>>>
>>>
>>> tagged_sents[-1]
[(u'kochst', u'VVFIN')]
Так что, возможно, я неправильно добавил запись kochst, или корпус TIGER не завершен (я обнаружил, что многих глаголов в форме от второго лица нет), или я просто чего-то здесь не понимаю, как обучить POS tagger возвращать глагол для спряженные глаголы.
'kochst' просто пример, я думаю, что многие другие глаголы не могут быть распознаны
>>> tagger.tag(['fahre'])
[('fahre', u'XY')]
>>> tagger.tag(['musst'])
[('musst', u'PPER')]