python - 查找词频 - 无需计数器

标签 python python-3.3

我是通过 http://GrokLearning.com 学习 Python 3.3 的初学者

我的目标是编写一个 Word Counter 程序,从用户那里读取多行纯文本,然后打印出用户输入的每个不同的单词,并计算该单词出现的次数。所有输入都将仅为小写单词 - 没有标点符号或数字。输出列表将按字母顺序排列。

该计划不接受任何带有计数器或收藏的提交。当我使用 Counter 提交在 Stack Exchange 上找到的解决方案时,编辑器只是假装 Counter 代码不存在。

这是我目前所拥有的:

all = []
count = {}
line = input("Enter line: ")
while line:
    word = line.split()
    line = input("Enter line: ")
    for w in word:
        count[w] = word.count(w)
for word in sorted(count):
    print(word, count[word])

我的代码的问题:如果一个词在多行中重复出现,代码将只计算该词出现的最后一行的出现次数(而不是总出现次数)。

> this is another test test
> test test test test test
> test test test
> 
another 1
is 1
test 3
this 1

我知道我没有使用我的列表“全部”。我曾尝试 all.append(word) 列出用户输入的所有单词,但我的代码计数为 0(可能是因为最后一行需要为空才能结束 while 循环?)

作为引用,我已经浏览了所有免费模块,但没有浏览任何付费模块。见谅:本人知识有限,请简单说明一下。

最佳答案

问题出在这里:

for w in word:
    count[w] = word.count(w)

在您的代码中,您不会添加到您的计数中。相反,您每次遇到单词时都重置计数。例如,如果 count['this'] 之前是 1,下次遇到它时,您会再次将计数设置为 1,而不是将其加 1。

第二个问题是表达式 word.count(w)。它是一个单词在一行中出现多少次的计数,同时,循环遍历每个单词。这意味着如果您正确更新(而不是重置)您的计数,您将计数过多。

例如,如果该行有三个'test',那么您将更新计数 3 x 3 = 9。

要解决这个问题,您需要解决两种情况:

  • 如果一个单词已经在计数中(即您以前见过该单词),则将计数增加 1
  • 如果这个词不在计数中,这是你第一次看到它,将计数设置为1

这里有一个建议:

for w in word:
    if w in count:
        count[w] += 1
    else:
        count[w] = 1

关于python - 查找词频 - 无需计数器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23895028/

相关文章:

java - 在Python中使用类对象作为其他类函数的参数

Python - 将整数列表拆分为正数和负数

python - 在 MoviePy 中混合音频文件

python - 在 Python 中使用的高级邮件

python - 将括号放入字符串python

python - 为什么字典排序是不确定的?

python - 动态导入的模块认为它没有类

python - 全局变量 x 未定义

python - PySide (1.1.2)、cx_freeze、WinXP、Python 3.3 : ImportError: DLL load failed

python - 如何在 python/numpy 中自动化 BLAS 的环境变量相关基准测试?