0

我有一个给定行的单词及其频率的输入,但是,我想要单词频率的总数。我知道有很多解决方案可以从整个文件中计算词频,但是我的输入在每一行周围都有括号,在每个单词周围都有括号。我无法提取单词并计数,因为每行的单词数量不同。任何帮助将不胜感激!

样本输入:

     [('Company', 1)]
     [('Tax', 1), ('Service', 1)]
     [('"Birchwood', 1), ('LLC"', 1), ('Enterprise,', 1)]
     [("Wendy's", 1), ('Salon', 1)]

我一直在尝试的代码:

from collections import defaultdict
def wordCountTotals (fh):
    d = defaultdict(int)
    for line in fh:
        word, count = line.split()
        d[word] += count
        return d[word], count

我也尝试过使用:

re.search("\((\w+)\, [0-9]+)", s)

但仍然没有结果

因为有括号和圆括号,所以这段代码不起作用——解包的值太多。如果有人可以提供帮助,我将不胜感激!

4

1 回答 1

1

您的输入由与 Python 中的语法完全相同的元组列表组成,我们可以ast.literal_eval利用这一事实。

>>> import ast
>>> ast.literal_eval("     [('Company', 1)]".strip())
[('Company', 1)]

所以,大致如下:

d = defaultdict(0)
for line in fh:
    val = ast.literal_eval(line.strip())
    for s, c in val:
        d[s] += c
return d

就足够了。我没有尝试过,可能需要一些修复。

于 2013-11-04T19:04:27.410 回答