【问题标题】:Counter in python not showing all wordspython中的计数器不显示所有单词
【发布时间】:2015-11-16 22:49:26
【问题描述】:

A 有一个 csv 文件,我希望该文件中包含的 all 单词的字数以单独的 CSV 格式显示,其中包含 word, count 列。

所以我写的python脚本如下:

#!/usr/bin/python
from collections import Counter
import pandas

wordslist = []
f = open('Sample.csv')
for word in f.read().split():
    wordslist.append(word)

Freq = Counter(wordslist)

A = Freq.items()

# for item in Freq.items(): 
#   print(item)

# print len(Freq)

pd = pandas.DataFrame(A)
pd.to_csv("WordCounter.csv", header=False, encoding='utf-8')

csv中的单词数为6672,我查到如下:

cat Sample.csv | wc -w

但是,我假设脚本的输出 csv 中的行数也应该等于 6672(即我的输入文件 Sample.csv 中的总单词数),因为每个单词及其计数都存储在一个输出文件的行。

但是,它似乎比 6672 低 1036:

cat WordCounter.csv | wc -l

我错过了什么?

【问题讨论】:

  • 只是为了确定一下,您可以使用默认文本编辑器来获取字数吗?
  • wc 认为a a a 是三个词。
  • @Arengorn 我不这么认为。我想要每个单词的计数。简而言之,对所有单词的频率分析是我想要的。默认文本编辑器的字数不会提供此类统计信息。
  • 要验证您的单词表,请查看sum(Freq.values())。这是它找到的单词总数。
  • @PeterDeGlopper:错字修复,以防有人遇到 TypeError 并感到困惑:sum(Freq.values())

标签: python csv pandas counter


【解决方案1】:

每个 UNIQUE 单词在输出文件的一行中存储一次。您的文件中没有 6672 个唯一词。如果有输出文件将是:

word0 | 1
word1 | 1
word2 | 1

其实是这样的:

word0 | 10
word1 | 5
word2 | 2

您可能还应该去除标点符号等以获得您真正想要的东西,否则会发生这种情况:

word0  | 4
word0, | 2
word0. | 3

编辑:您还可以稍微简化代码:

替换

wordslist = []
f = open('Sample.csv')
for word in f.read().split():
    wordslist.append(word)

与:

with open('Sample.csv') as f:
    wordslist = f.read().split()

【讨论】:

  • 是的,我从 cmets 到我的问题都理解了。但是我如何验证输入文件中的所有单词都已在输出文件中考虑。还有如何去掉标点符号?
  • 是的,当你们发表评论时,我正在输入我的答案:) 我很确定有 NLP 库具有此功能。如果你想自己做,你可以遍历文件,忽略任何字符c,即c not in string.letters and c not in string.whitespace
  • 我看到有人推荐nltk.org/index.html,如果你不想自己解决棘手的标记化问题。
  • @AskeDoerge PeterDeGlopper 非常感谢,
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-10-18
  • 2022-07-30
  • 1970-01-01
  • 2013-08-17
  • 1970-01-01
相关资源
最近更新 更多