Мой pos_tag проходит через каждую букву, мне нужно применить его ко всему слову - PullRequest
1 голос
/ 10 апреля 2019

Я работаю над созданием шаблона Python для любого входного текста, который будет создавать XML-записи каждого слова и к какому POS (часть речи) относится.

Я использую pos_tag из nltk, но когда я беру слово и пытаюсь пометить его, оно помечает каждую букву вместо всего слова.

for word in textList:
    if word in typeList:
        tokenRest += 1
    else:

        wordXML = '<word number="' + str(corpusList) + '">'
        wordformXML = "<wordform>" + word + "</wordform>"
        posTag = "<POS>" + str(pos_tag(word)) + "</POS>"
        fullWordXML = wordXML + "\r\n" + wordformXML + "\r\n" + posTag + "\r\n"
        resultList.append(fullWordXML)
        typeList.append(word)
        corpusList += 1


print (resultList)

В posTag = "<POS>" + str(pos_tag(word)) + "</POS>" Я ожидаю, что pos_tag со словом в нем выведет словарь со словом и его POS-тегом. Я получаю словарь с каждой буквой слова с POS-тегом для каждой буквы. Как это:

Словоформа "кажущийся" выведена как <POS>[(\'s\', \'NN\'), (\'e\', \'NN\'), (\'e\', \'IN\'), (\'m\', \'NN\'), (\'i\', \'NN\'), (\'n\', \'VBP\'), (\'g\', \'NN\')]</POS>, которая должна вывести вот так:

<POS>[(\'seeming\', \'NN\')]<POS>

Есть ли способ убедиться, что pos_tag работает для всего слова, или я должен использовать что-то еще?

PS: я работаю над извлечением только тега в виде строки из словаря, поэтому готовый код не будет выглядеть так. В настоящее время мне просто нужна помощь по этому вопросу.

1 Ответ

1 голос
/ 11 апреля 2019

nltk.tag.pos_tag ожидает список токенов.Если вы предоставляете его со строкой, он использует его в качестве списка, и интерпретирует каждый символ как маркер, и пытается назначить POS каждому.С переменной «word» вы могли бы вместо этого использовать pos_tag([word]) для работы с одним словом.

См. Документацию NLTK по pos_tag для получения дополнительной информации.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...