【问题标题】:Trying to read text file and count words within defined groups尝试读取文本文件并计算定义组中的单词
【发布时间】:2018-02-07 04:31:53
【问题描述】:

我是 Python 新手。我正在尝试创建一个程序来读取文本文件并在该文本中搜索某些分组的单词(我通过从 csv 读取预定义)。例如,如果我想为包含“兴奋”、“快乐”和“乐观”等词的“积极”创建自己的定义,则 csv 将包含这些词。我知道下面的内容很混乱 - 我正在读取的 txt 文件包含我从 csv 读取的三个“正面”测试词出现 7 次,但结果打印为 25。我认为它返回的是字符数,而不是字数.代码:

import csv
import string
import re
from collections import Counter

remove = dict.fromkeys(map(ord, '\n' + string.punctuation))

# Read the .txt file to analyze.
with open("test.txt", "r") as f:
    textanalysis = f.read()
    textresult = textanalysis.lower().translate(remove).split()

# Read the CSV list of terms.
with open("positivetest.csv", "r") as senti_file:
    reader = csv.reader(senti_file)
    positivelist = list(reader)

# Convert term list into flat chain.
from itertools import chain
newposlist = list(chain.from_iterable(positivelist))

# Convert chain list into string.
posstring = ' '.join(str(e) for e in newposlist)
posstring2 = posstring.split(' ')
posstring3 = ', '.join('"{}"'.format(word) for word in posstring2)

# Count number of words as defined in list category
def positive(str):
  counts = dict()

  for word in posstring3:
    if word in counts:
      counts[word] += 1
    else:
      counts[word] = 1

  total = sum (counts.values())
  return total


# Print result; will write to CSV eventually
print ("Positive: ", positive(textresult))

【问题讨论】:

  • 一些示例文本可能会有所帮助...

标签: python csv text sentiment-analysis


【解决方案1】:

我也是一个初学者,但我偶然发现了一个可能会有所帮助的过程。读入文件后,在每个空格、制表符和换行符处拆分文本。在您的情况下,我会将所有单词保持小写并在您的拆分呼叫中包含标点符号。将此保存为数组,然后使用某种循环对其进行解析,以获取每个“肯定”或其他单词的实例数。

看这个,特别是“火车”功能:

https://github.com/G3Kappa/Adjustable-Markov-Chains/blob/master/markovchain.py

还有,这个链接,忽略开头JSON的东西,文章讲的是情感分析:

https://dev.to/rodolfoferro/sentiment-analysis-on-trumpss-tweets-using-python-

此链接同样适用:

http://adilmoujahid.com/posts/2014/07/twitter-analytics/

祝你好运!

【讨论】:

    【解决方案2】:

    我查看了您的代码,并通过了一些我自己的代码作为示例。 根据我认为你可能想要的,我有 2 个想法给你。

    第一个假设:您想要一个基本的情绪计数? 获得'textresult'很棒。然后你对“正面词典”做了同样的事情——我认为这是完美的行动?然后,您将 [positivelist] 转换为本质上是一个大句子。 你不只是: 1.通过[textresult]传递一个'stop_words'列表 2. 合并常用词的两个数据框 [textresult (less stopwords) 和 positivelist] - 如在“内部连接”中 3.然后基本上做你的词频 4. 积分比较容易

    第二个假设:你关注的是“兴奋”、“快乐”和“乐观” 并且您正在尝试将文本主题隔离到这 3 个类别中? 1. 再次停在 [textresult] 2. 下载“nrc”和/或“syuzhet”情感价词典 他们将情感词按 8 个情感组细分 因此,如果您只想要 8 个情绪组中的 3 个(子集) 3. 像你一样处理它以获得[肯定列表] 4. 再次加入

    抱歉,这有点混乱,但如果我与您的想法相近,请告诉我,我们可以联系。 第二个道歉,我也是一个新手python用户,我正在将我在R中使用的东西改编成上面的python(它也不微妙:))

    【讨论】:

    • 谢谢!基本上,我正在尝试创建自己的可自定义情绪类别。所以,我并不真正关心这三个词(兴奋、快乐、乐观)——这些只是构成一个类别的例子。例如,如果我想定义积极的含义,我可能会将这些词和其他词包括在一个列表中以组成一个组。然后我想将文本与该组进行比较,并计算该文本与该组中的任何单词有多少匹配。
    最近更新 更多