我需要一种算法来确定一个句子,段落或文章的语气是否为负面或正面......或者更好,如何消极或积极.
例如:
Jason是我见过的最糟糕的SO用户(-10)
Jason是SO用户(0)
Jason是我见过的最好的SO用户(+10)
杰森是最好的吮吸SO(-10)
虽然,在SO,Jason是糟糕的做坏事(+10)
不容易,对吧?:)
我不希望有人向我解释这个算法,但我认为在学术界的某个地方已经有很多类似的东西了.如果你能指点我一些文章或研究,我会喜欢它.
谢谢.
cnu*_*cnu 34
在我的公司,我们有一个产品,它做到这一点,也表现良好.我完成了大部分工作.我可以简单介绍一下:
你需要将段落分成句子,然后将每个句子分成较小的子句 - 基于逗号,连字符,半冒号,冒号,'和','或'等分割.每个子句将表现出完全独立的情感在某些情况下.
有些句子即使是分裂的,也必须连在一起.
例如:该产品令人惊叹,非常棒,非常棒.
我们已经制定了一套关于句子类型的全面规则,这些规则需要拆分,而不应该是(基于单词的POS标签)
在第一级,你可以使用一袋单词的方法,意思是 - 有一个正面和负面的单词/短语列表,并检查每个子句.在这样做的同时,还要看"否","否"等否定词会改变句子的极性.
即便如此,如果你找不到情绪,你也可以选择朴素的贝叶斯方法.这种方法不是很准确(约60%).但是如果你只将这个应用于不能通过第一套规则的句子 - 你可以轻松达到80-85%的准确率.
重要的部分是积极/消极的单词列表以及你分裂的方式.如果你愿意,你可以通过实现HMM(隐马尔可夫模型)或CRF(条件随机场)来达到更高的水平.但我不是NLP的专业人士,其他人可能会填补你这一部分.
对于好奇的人,我们实现了所有这些是使用NLTK和Reverend Bayes模块的python.
很简单,处理大多数句子.但是,在尝试从Web标记内容时,您可能会遇到问题.大多数人不会在网上写出正确的句子.处理讽刺也很难.