В последнее время я собираюсь создать сервис для лемматизации немецких слов.
Я нашел очень хорошую статью здесь
После того, как я выполнил все шаги, описанные в статье, мой сервис работает довольно хорошо, но во время тестирования я заметил, что некоторые глаголы не могут быть преобразованы в бесконечную форму.
например. кочст -> кочень.
Основная причина в том, что мой 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-тегер вернуть глагол для спряженных глаголов.
'kochst' просто пример, я думаю, что многие другие глаголы не могут быть распознаны
>>> tagger.tag(['fahre'])
[('fahre', u'XY')]
>>> tagger.tag(['musst'])
[('musst', u'PPER')]