首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Python情感分析(在比较单词时,不计算文本中重复的单词)

Python情感分析(在比较单词时,不计算文本中重复的单词)
EN

Stack Overflow用户
提问于 2014-09-28 14:08:45
回答 3查看 1.6K关注 0票数 2

我有这样的代码,它应该把一个积极的词集和一个主题文本进行比较。一直做得很好,直到我发现重复的文本没有被考虑在内。

文本:这是一部非常好的电影,太好了

肯定列表:好,好,等等。

在以下实现中,脚本只计算一次“很好”:

代码语言:javascript
复制
 readFile = open('test.txt','r').read()
    readFileList = readFile.split('\n')

    counter = 0


    for eachNeg in negWords:
            if eachNeg in readFile:
                    counter -= 1
                    print eachNeg
    print counter


    for eachPos in posWords:
            if eachPos in readFile:
                    counter +=1
                    print eachPos
    print counter
EN

回答 3

Stack Overflow用户

发布于 2014-09-28 14:18:46

密码就像你描述的那样。如果单词在文本中,请告诉python将1添加到计数器中,如:

代码语言:javascript
复制
a in [aaaabbbbccc] 
>> True

您需要另一个for循环来计数每个单词:

代码语言:javascript
复制
for eachPos in posWords:
    for word in readFile:
        if eachPos == word:
            counter +=1
            print eachPos
print counter

Iam不能100%确定您是否可以在readFile上迭代,但是iam正向,您可以,或者至少可以找到一种方法,使它成为一个列表,正如Bartlomiej提到的使用readfile.split()。这是一种非常天真的做法。

我认为还有另外一个问题,你先数单词,然后看看它们是否在你的列表中。对于这个收集和反击,这对于你的项目来说是惊人的!

https://stackoverflow.com/a/5829377/3863636

票数 1
EN

Stack Overflow用户

发布于 2014-10-08 10:28:49

您可以通过嵌套的for loop来实现这一点,但是这并不是一个简单问题的很好的解决方案:

代码语言:javascript
复制
for posWord in posWords:
    for test in readFile:
        if i == test:
            counter +=1
            print i
print(counter)

这并不是一种分析情绪的有效方法,相反,你只是在检查文本中是否存在一个没有上下文的肯定词,而这并不能告诉你多少。您处理此任务的方式忽略了日常语言中常见的语义,如双否定句、回文等等。而且,看起来你并不是在过滤文本中的停止词或词干词。见词干算法

情绪分析应该是统计的产物。基于结构化的方法往往不像语义实现那样有用--然而,这是值得争论的(可能)。在此基础上,提出了一种基于监督学习的[binary or multiclass]文本分类方法,将文本分为正类或负类。一种典型的情感分析方法是实现朴素贝叶斯框架,尽管已经提出了更有效、更强大的方法(支持向量机、隐马尔可夫模型等)。见显著资源2。

最后说明

虽然我并不真正从事情感分析,除非我试图让我的生活变得更简单,或者赞美我已经在做的事情,但我还是研究了自然语言处理中的几个主题。我坚信,学术领域已经远远超过了商业领域的努力,事实上,公司正在产生的一些结果/结论/价格是歇斯底里的--我还没有看到一个像样的实施。如果您想了解更多关于这个领域的知识,我建议您阅读在IEEE & ACM上发表的学术期刊。

显著资源:

  1. Python 自然语言工具包
  2. 基于Python & NLTK的Twitter情感分析
  3. 情感分析与意见挖掘
票数 1
EN

Stack Overflow用户

发布于 2014-09-28 14:18:03

您正在检查posWordsnegWords中的一个单词是否包含在整个文件中。这就是为什么你每一个不同的单词只得到一个。

您要做的是循环遍历文件中的所有单词,看看它们是否包含在好/坏列表中。

要从文件中获取单词列表,可以使用没有任何参数的split()

所以对于负面的词,它看起来是这样的:

代码语言:javascript
复制
readFile = open('test.txt','r').read()
readFileList = readFile.split()

counter = 0


for word in readFileList:
        if word in negWords:
                counter -= 1
                print word
print counter
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26085711

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档