如何使用NLTK pos_tag()提取名词?

我对python很新.我无法弄清楚这个bug.我想用NLTK提取名词.

我写了以下代码

import nltk

sentence = "At eight o'clock on Thursday film morning word line test best beautiful Ram Aaron design"

tokens = nltk.word_tokenize(sentence)

tagged = nltk.pos_tag(tokens)


length = len(tagged) - 1

a = list()

for i in (0,length):
    log = (tagged[i][1][0] == 'N')
    if log == True:
      a.append(tagged[i][0])

当我运行它时,’a’只有一个元素

a
['detail']

我不懂为什么?

当我在没有for循环的情况下执行它时,它正在运行

log = (tagged[i][1][0] == 'N')
    if log == True:
      a.append(tagged[i][0])

通过手动将“i”的值从0更改为“length”,我得到了完美的输出,但是对于for循环,它只返回end元素.有人能告诉我for循环发生了什么问题.

代码后’a’应如下所示

['Thursday', 'film', 'morning', 'word', 'line', 'test', 'Ram' 'Aaron', 'design']

解决方法:

for i in (0,length):

这会迭代两个元素,零和长度.如果要迭代零和长度之间的每个数字,请使用范围.

for i in range(0, length):

更好的是,直接迭代序列的元素而不是其索引更为惯用.这将减少像上面那样的拼写错误的可能性.

for item in tagged:
    if item[1][0] == 'N':
      a.append(item[0])

注重尺寸的用户甚至可能更喜欢单行列表理解:

a = [item[0] for item in tagged if item[1][0] == 'N']

相关文章

python方向·数据分析   ·自然语言处理nlp   案例:中...
原文地址http://blog.sina.com.cn/s/blog_574a437f01019poo....
ptb数据集是语言模型学习中应用最广泛的数据集,常用该数据集...
 Newtonsoft.JsonNewtonsoft.Json是.Net平台操作Json的工具...
NLP(NaturalLanguageProcessing)自然语言处理是人工智能的一...
做一个中文文本分类任务,首先要做的是文本的预处理,对文本...