用Python统计文档中独特单词的数量
我是一名刚接触Python的新手,想理解在这里给出的关于如何计算文档中唯一单词的答案。这个答案是:
print len(set(w.lower() for w in open('filename.dat').read().split()))
将整个文件读入内存,使用空格将其分割成单词,把每个单词转换为小写,然后从这些小写单词中创建一个(唯一的)集合,最后计算这些单词的数量并打印输出。
为了理解这个过程,我在尝试一步一步用Python实现。我可以使用open和read导入文本文件,使用split将其分割成单独的单词,并用lower将它们全部转换为小写。我也可以从这个单词列表中创建一个唯一单词的集合。但是,我不知道如何完成最后一步——计算唯一单词的数量。
我以为可以通过遍历唯一单词集合中的每个项目,并在原来的小写列表中计数来完成,但我发现集合是不能用索引访问的。
所以我想我在尝试做的事情就像在自然语言中说的那样:对于集合中的所有项目,告诉我它们在小写列表中出现了多少次。但我就是搞不清楚该怎么做,我怀疑是对Python的一些基本理解有问题,让我卡住了。
- 编辑 -
大家谢谢你们的回答。我刚意识到我没有正确表达自己——我不仅想找到唯一单词的总数(我知道这是集合的长度),还想知道每个单独单词的使用次数,比如'the'出现了14次,'and'出现了9次,'it'出现了20次,等等。抱歉让大家困惑了。
8 个回答
一个集合,根据定义,里面的元素都是独一无二的(在你的例子中,不能出现两个相同的‘小写字符串’)。所以,你需要做的就是计算集合中的元素数量,也就是集合的长度,方法是用len(set(...))
。
你可以用 len(my_set)
或 len(my_list)
来计算一个集合、列表或元组里面有多少个项目,这些方法都是一样的。
补充一下:计算一个词出现的次数是另外一回事。
这里有个明显的方法:
count = {}
for w in open('filename.dat').read().split():
if w in count:
count[w] += 1
else:
count[w] = 1
for word, times in count.items():
print "%s was found %d times" % (word, times)
如果你想避免使用if语句,可以看看 collections.defaultdict。
我觉得在这种情况下,Counter 就是你所需要的全部:
from collections import Counter
print Counter(yourtext.split())