【问题标题】:Find out negative adverbs using NLTK使用 NLTK 找出否定副词
【发布时间】:2016-10-25 20:06:30
【问题描述】:

由于形容词和动词能够使用否定前缀来传达消极情绪,我需要从我拥有的数百万个句子中找出这样的短语。例如“我不擅长这个”。是一个否定句,即使“好”是一个肯定词。

我正在使用 nltk 标记所有句子。但是我怎样才能过滤掉否定前缀呢?大多数否定前缀,如 no,not 都被标记为副词“RB”。这是否意味着我可以使用所有标记的副词作为否定前缀?而且我拥有的数据非常庞大,这让我很难想出一个否定前缀列表。

【问题讨论】:

  • 您需要阅读该主题,这里无法完整回答。您需要进行否定检测,然后进行否定 scope 检测,然后您可能还需要查看 itensifiers……这是一个完整的研究领域,而不仅仅是一个小技术问题。跨度>
  • 我的错,但我确实有一种算法可以找出否定短语,但是有没有办法只使用任何可用的工具来标记否定前缀?我的主要研究主题是别的东西,所以我不想再花时间收集数据了
  • @ntstha “负面短语”(如:负面情绪)与否定成分不同。但可以肯定的是,你可以做一些糟糕的近似,问题是你愿意接受的启发式有多糟糕。
  • 你在一个编程网站。开放式 NLP 算法是一个太宽泛的话题。如果你已经有一个算法,你到底需要什么帮助?缩小您的问题范围,也许有人可以提供帮助。 (你说的“否定前缀”到底是什么意思?“not”不是前缀)。

标签: python nltk sentiment-analysis


【解决方案1】:

NLTK 有一个用于sentiwordnet 的 API,但这可能对您的任务没有帮助。 Sentiwordnet 带有它的扭结。例如

>>> from nltk.corpus import sentiwordnet as swn
# Kind of useful.
>>> swn.senti_synsets('happy', 'a')
[SentiSynset('happy.a.01'), SentiSynset('felicitous.s.02'), SentiSynset('glad.s.02'), SentiSynset('happy.s.04')]
>>> swn.senti_synsets('happy', 'a')[0].synset.definition()
u'enjoying or showing or marked by joy or pleasure'
>>> swn.senti_synsets('happy', 'a')[0].pos_score()
0.875
>>> swn.senti_synsets('happy', 'a')[0].neg_score()
0.0
>>> swn.senti_synsets('happy', 'a')[0].obj_score()
0.125

# Not very useful...
>>> swn.senti_synsets('slow', 'a')
>>> swn.senti_synsets('slow', 'a')[0].synset.definition()
u'not moving quickly; taking a comparatively long time'
>>> swn.senti_synsets('slow', 'a')[0].pos_score()
0.0
>>> swn.senti_synsets('slow', 'a')[0].neg_score()
0.0
>>> swn.senti_synsets('slow', 'a')[0].obj_score()
1.0

NLTK 中还有VADER algorithm http://www.nltk.org/howto/sentiment.html

>>> import nltk
>>> nltk.download('vader_lexicon')
>>> from nltk.sentiment.vader import SentimentIntensityAnalyzer
>>> sid = SentimentIntensityAnalyzer()
>>> sid.polarity_scores('happy')
{'neg': 0.0, 'neu': 0.0, 'pos': 1.0, 'compound': 0.5719}
>>> sid.polarity_scores('sad')
{'neg': 1.0, 'neu': 0.0, 'pos': 0.0, 'compound': -0.4767}
>>> sid.polarity_scores('sad man')
{'neg': 0.756, 'neu': 0.244, 'pos': 0.0, 'compound': -0.4767}
>>> sid.polarity_scores('not so happy')
{'neg': 0.616, 'neu': 0.384, 'pos': 0.0, 'compound': -0.4964}

【讨论】:

    猜你喜欢
    • 2015-05-19
    • 1970-01-01
    • 1970-01-01
    • 2013-07-14
    • 1970-01-01
    • 2023-03-11
    • 1970-01-01
    • 2013-06-19
    • 2021-07-22
    相关资源
    最近更新 更多