【问题标题】:Python Sentiment Analysis (When comparing words, the repeated word in the text is not counted)Python情感分析(比较单词时,文本中重复的单词不计入)
【发布时间】:2014-09-28 14:08:45
【问题描述】:

我有这段代码,它应该将积极的语料库与主题文本进行比较。在我发现重复的文本没有被考虑之前,它做得很好。

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

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

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

 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

【问题讨论】:

    标签: python python-2.7 nlp sentiment-analysis


    【解决方案1】:

    本准则完全按照您的描述进行。如果单词在文本中,您告诉 python 将 1 添加到计数器:

    a in [aaaabbbbccc] 
    >> True
    

    你需要另一个 for 循环来计算每个单词:

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

    我不是 100% 确定你是否可以迭代 readFile 但我是肯定的,你可以或至少可以找到一种方法将其列入列表 As Bartlomiej Lewandow 提到使用 readfile.split()。这是一种非常天真的方式。

    我认为还有另一种方法,您首先计算单词,然后查看它们是否在您的列表中。看看 Collections and Counter 这对你的项目来说太棒了!

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

    【讨论】:

      【解决方案2】:

      您可以使用嵌套的for loop 来实现这一点,但这并不是解决简单问题的好方法:

      for posWord in posWords:
          for test in readFile:
              if i == test:
                  counter +=1
                  print i
      print(counter)
      

      这不是分析情绪的有效方法,而您只是检查文本中是否存在 no-context 肯定词,这并不能告诉您太多信息。您处理此任务的方式忽略了常见的语义,这些语义进入了日常语言,例如双重否定、回文等。此外,您似乎没有从文本或词干中过滤掉停用词。见Stemming Algorithms

      情绪分析应该是统计的产物。基于结构化的方法往往不如语义实现有用 - 然而,这有待辩论(可能)。此外,[binary or multiclass] 的监督学习方法将文本分类为预定义的类别,例如正面或负面。情感分析的典型方法是实现朴素贝叶斯框架,尽管已经提出了更有效/强大的方法(SVM、隐马尔可夫模型等)。请参阅重要资源 2。

      最后说明

      虽然除非我想让我的生活更轻松或赞美我已经在做的事情,否则我不会真正使用情感分析,但我确实研究了自然语言处理中的几个主题。我坚信学术领域已经远远超过了商业领域的努力,事实上,公司产生的一些结果/结论/价格是歇斯底里的——我仍然会遇到一个体面的实施。如果您想了解更多关于该领域的信息,我建议您阅读发表在IEEEACM 的学术期刊。

      重要资源:

      1. Python NLTK - Natural Language Tool Kit
      2. Twitter Sentiment Analysis using Python & NLTK
      3. Sentiment Analysis & Opinion Mining

      【讨论】:

        【解决方案3】:

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

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

        要从文件中获取单词列表,您可以使用split(),不带任何参数。

        所以对于否定词,它看起来像这样:

        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
        

        【讨论】:

        • 投反对票的人可以建议更正我的答案吗?
        猜你喜欢
        • 1970-01-01
        • 2018-12-01
        • 2012-01-06
        • 1970-01-01
        • 2019-11-07
        • 2013-12-09
        • 2021-08-26
        • 2014-01-06
        • 1970-01-01
        相关资源
        最近更新 更多