abc = nltk.pos_tag(info)
print(s for s in abc if s[1] != 'ADV')
返回:生成器对象pos。当地人取代。 genexpr>在0x000000000E000D00>
如果使用[]圆形打印,我会收到“语法无效”
答案 0 :(得分:1)
我猜你只是试图获得不是“副词”的词性输出?
使用括号会导致打印函数传递generator comprehension。如果您只想一次输出(列表推导中的生成器),请尝试这样的事情:
print([s for s in abc if s[1] != 'ADV'])
注意:您也可以在不使用print()的情况下实现相同的输出。
另外,fyi:Last I checked“ADV”与pos标签不对应。如果你想消除副词,那么我认为正确的pos标签副词类型是“RB”,“RBR”和“RBS”。
根据Alexis的回复更新了答案。他是对的,解释并不完整。从评论中汲取他的反馈意见:
有生成器,还有列表推导。 print(s代表s ...)通过打印发电机;带方括号的版本使用 列表理解中的生成器,以制作列表。
(还请upvote alexis的评论)
答案 1 :(得分:0)
对于形容词,试试这个:
abc = nltk.pos_tag(info)
print [s for s in abc if s[1] != 'JJ']
答案 2 :(得分:-1)
来自https://github.com/nltk/nltk/issues/1783#issuecomment-317174189
{0}功能在OntoNotes 5的华尔街日报部分的第00-18节进行了培训。
来自http://www.nltk.org/api/nltk.tag.html#module-nltk.tag
它使用Penn TreeBank标记集https://www.ling.upenn.edu/courses/Fall_2003/ling001/penn_treebank_pos.html
要捕获所有副词,请检查pos_tag()
标记。
使用列表理解,检查代码的前2个字符并检查RB*
,例如
RB
要捕捉形容词,请检查>>> from nltk import pos_tag, word_tokenize
>>> sent = "I am running quickly"
>>> [word for word, pos in pos_tag(word_tokenize(sent)) if pos.startswith('RB')]
['quickly']
标签:
JJ*
如果您只使用>>> sent = "I am running quickly"
>>> sent = "The big red cat is redder than apple"
>>> [word for word, pos in pos_tag(word_tokenize(sent)) if pos.startswith('JJ')]
['big', 'red', 'redder']
检查JJ
(即JJ*
),那么您将错过比较和最高级的形容词:
.startswith('JJ')
要删除,只需使用>>> sent = "The big red cat is redder than apple, it's the best in the world"
>>> [word for word, pos in pos_tag(word_tokenize(sent)) if pos.startswith('JJ')]
['big', 'red', 'redder', 'best']
>>> [word for word, pos in pos_tag(word_tokenize(sent)) if pos == 'JJ' ]
['big', 'red']
:
not