使用Python计算文档中唯一单词的数量

Ste*_*gan 9 python

我是Python新手,试图理解这里给出的计算文档中唯一单词的问题的答案.答案是:

print len(set(w.lower() for w in open('filename.dat').read().split()))
Run Code Online (Sandbox Code Playgroud)

将整个文件读入内存,使用空格将其拆分为单词,将每个单词转换为小写,从小写单词创建(唯一)集合,计算它们并打印输出

为了尝试理解这一点,我试图逐步在Python中实现它.我可以使用open和read导入文本块,使用split将其分成单个单词,并使用lower将它们全部小写.我还可以在列表中创建一组唯一的单词.但是,我无法弄清楚如何做最后一部分 - 计算唯一单词的数量.

我想我可以通过迭代一组独特单词中的项目并在原始小写列表中计算它们来完成,但我发现set结构不可索引.

所以我想我正在尝试用自然语言做一些事情,对于集合中的所有项目,告诉我它们在小写列表中出现了多少次.但我无法弄清楚如何做到这一点,我怀疑对Python的一些潜在误解阻碍了我.

  • 编辑 -

伙计们感谢你的答案.我刚刚意识到我没有正确解释自己 - 我不仅要找到唯一单词的总数(我理解的是集合的长度),还要找到每个单词的使用次数,例如'the'使用了14次,'和'使用了9次,'它'使用了20次,依此类推.为混乱道歉.

Art*_*nka 14

我相信在这种情况下,Counter就是你所需要的:

from collections import Counter

print Counter(yourtext.split())
Run Code Online (Sandbox Code Playgroud)


jam*_*mon 6

你可以计算的项目数在一组,列表或元组都一样用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)
Run Code Online (Sandbox Code Playgroud)

如果要避免使用if子句,可以查看collections.defaultdict.