Почему Python NLTK неправильно помечает на испанском языке? - PullRequest
0 голосов
/ 22 октября 2018

У меня есть следующий код:

import nltk

sent='El gato está bajo la mesa de cristal.'
nltk.pos_tag(word_tokenize(sent), lang='spa')

Но вывод совсем не точен:

[('El', 'NNP'),
 ('gato', 'NN'),
 ('está', 'NN'),
 ('bajo', 'NN'),
 ('la', 'FW'),
 ('mesa', 'FW'),
 ('de', 'FW'),
 ('cristal', 'NN'),
 ('.', '.')]

Например, es следует классифицировать как глагол.

Если я попробую то же самое, используя английскую фразу:

import nltk

sent='The cat is under the cristal table.'
nltk.pos_tag(word_tokenize(sent), lang='spa')

Все работает нормально:

[('The', 'DT'),
 ('cat', 'NN'),
 ('is', 'VBZ'),
 ('under', 'IN'),
 ('the', 'DT'),
 ('cristal', 'NN'),
 ('table', 'NN'),
 ('.', '.')]

Обратите внимание, что я загрузил все ресурсы nltk.Не могли бы вы сказать мне, что мне здесь не хватает, так что тегирование слов не работает на испанском языке?

1 Ответ

0 голосов
/ 22 октября 2018

Я нашел следующее решение

from nltk.tag import StanfordPOSTagger
jar = 'D:/Downloads/stanford-postagger-full-2018-10-16/stanford-postagger-3.9.2.jar'
model = 'D:/Downloads/stanford-postagger-full-2018-10-16/models/spanish.tagger'

import os
java_path = "C:/Program Files/Java/jre1.8.0_191/bin/java.exe"
os.environ['JAVAHOME'] = java_path

pos_tagger = StanfordPOSTagger(model, jar, encoding='utf8' )
pos_tagger.tag('El gato está bajo la mesa de cristal'.split())

Результат:

[('El', 'da0000'),
 ('gato', 'nc0s000'),
 ('está', 'vmip000'),
 ('bajo', 'sp000'),
 ('la', 'da0000'),
 ('mesa', 'nc0s000'),
 ('de', 'sp000'),
 ('cristal', 'nc0s000')]
...