我正在为将创建的任何输入文本创建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:我也在努力仅从字典中将标记作为字符串提取,因此完成的代码将不会像这样。目前,我只需要解决此问题即可。
答案 0 :(得分:1)
nltk.tag.pos_tag
需要令牌列表。如果为它提供一个字符串,它将使用该字符串作为列表,并将每个字符解释为一个令牌,并尝试为每个POS分配一个POS。使用变量“ word”,您可以改为pos_tag([word])
来对单个单词进行操作。
有关更多信息,请参见NLTK documentation on pos_tag。