打印带有删除形容词的pos标签(NLTK)

时间:2018-02-19 18:20:05

标签: python nltk pos-tagger

abc = nltk.pos_tag(info)
      print(s for s in abc if s[1] != 'ADV')

返回:生成器对象pos。当地人取代。 genexpr>在0x000000000E000D00>

如果使用[]圆形打印,我会收到“语法无效”

3 个答案:

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