假设我有一个句子:I am a boy
。我想找出句子中每个词的词性。这是我的代码:
import nltk
sentence = 'I am a good boy'
for word in sentence:
print(word)
print(nltk.pos_tag(word))
但这会产生以下输出:
^{pr2}$所以,我试着这样做:
sentence = 'I am a good boy'
for word in sentence.split(' '):
print(word)
print(nltk.pos_tag(word))
这将产生以下输出:
I
[('I', 'PRP')]
am
[('a', 'DT'), ('m', 'NN')]
a
[('a', 'DT')]
good
[('g', 'NN'), ('o', 'MD'), ('o', 'VB'), ('d', 'NN')]
boy
[('b', 'NN'), ('o', 'NN'), ('y', 'NN')]
为什么它要为每个字母而不是每个单词查找词性词组?我该怎么解决这个问题?在
nltk.pos_tag
作为参数处理一个列表或类似于列表的东西,并标记其中的每个元素。所以在第二个例子中,它将每个字符串(即每个单词)拆分成字母,就像在第一个示例中将句子拆分成字母一样。当你把从分句中得到的所有列表都输入进来时,它就起作用了:Per documentation,通常传入NLTK的标记化返回的内容(这是单词/标记的列表)。在
在这两种情况下,拆分数据的方式不同。但是pos_标记需要一个iterable作为输入。
在第一个例子中,您是将一个句子逐字拆分。
对于ex
然后你要求pos_tagger找出每个字母的词性。在
^{pr2}$显然,每次将字母作为pos_tag()的输入时,这里都会得到每个字母的词性标记。在
在你的第二个例子中,你用单词来分割句子。 例如:
现在要注意的一点是,每个单词都是iterableam'是iterable,我们可以通过'am'进行搜索,得到'a'和'm'。 所以很明显pos_tagger给出了单词中字母的结果。
如何克服这个问题:
pos_tag()需要一个iterable作为参数(list、tuple等)。我建议您将tokenizer()与NLTK一起使用,而不是手动按空格分割句子。 所以你的代码应该是这样的:
输出
相关问题 更多 >
编程相关推荐