我的pos_tag遍历每个字母,我需要它才能应用于整个单词

时间:2019-04-10 18:11:28

标签: python xml nltk

我正在为将创建的任何输入文本创建python模板  每个单词的XML条目及其所属的POS(词性)。

我正在使用nltk中的pos_tag,但是当我拿到单词并尝试对其进行标记时,它将标记每个字母而不是整个单词。

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 个答案:

答案 0 :(得分:1)

nltk.tag.pos_tag需要令牌列表。如果为它提供一个字符串,它将使用该字符串作为列表,并将每个字符解释为一个令牌,并尝试为每个POS分配一个POS。使用变量“ word”,您可以改为pos_tag([word])来对单个单词进行操作。

有关更多信息,请参见NLTK documentation on pos_tag