【问题标题】:Counting occurences of words that appear in a list using Python使用 Python 计算出现在列表中的单词的出现次数
【发布时间】:2015-04-23 08:25:38
【问题描述】:

我已使用 xlrd 将 excel 工作表值附加到列表中。我将列表称为 a_master。我有一个文本文件,其中包含我想计算出现在此列表中的单词的出现次数(我称此文件字典和他们的每行 1 个单词)。代码如下:

with open("dictionary.txt","r") as f:
for line in f:
    print "Count " + line + str((a_master).count(line)) 

但由于某种原因,对于文本文件中存在的每个计数单词,计数返回为零。如果我自己写出其中一个单词的计数:

 print str((a_master).count("server"))

它计算出现次数没问题。我也尝试过

print line

为了查看它是否正确地看到了dictionary.txt 文件中的单词并且是正确的。

【问题讨论】:

标签: python


【解决方案1】:

从文件中读取的行被换行符终止。最后也可能有空白。最好在查找之前去掉所有空格

with open("dictionary.txt","r") as f:
    for line in f:
        print "Count " + line + str((a_master).count(line.strip())) 

注意理想情况下,搜索列表是线性的,在大多数情况下可能不是最佳的。我认为collections.Counter 适合您描述的情况。

将您的列表重新解释为字典,其中键是项目,值是通过 collections.Counter 传递的事件,如下所示

a_master = collections.Counter(a_master)

你可以重写你的代码

from itertools import imap
with open("dictionary.txt","r") as f:
    for line in imap(str.strip, f):
        print "Count {} {}".format(line, a_master[line])

【讨论】:

  • @Danny:如果这回答了你的问题,请考虑接受它。
  • 其实还有一个问题。为了计算列表中单词的出现次数,我拆分了列表中的每个单词。但是,如果我想计算“软件定义网络”的出现次数怎么办。我该怎么做呢?我是否需要重写该句子在 dictionary.txt 文件中的显示方式?我的 txt 文件混合了单个单词和句子。
  • @Danny:您的第二个问题太复杂,无法在评论框中回答。我建议您发布一个新问题,有人可能想回答它。在这里简单介绍一下,搜索 trie 和前缀树。这可能是您问题的解决方案。
【解决方案2】:

使用collections.Counter():

import re
import collections
words = re.findall(r'\w+', open('dictionary.txt').read().lower())
collections.Counter(words)

为什么顺便把这个问题标记为 xlrd?

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-08-04
    • 1970-01-01
    • 2021-02-05
    • 2013-12-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多