我是Python新手试图理解here给出计算文档中唯一单词的问题的答案。答案是:
print len(set(w.lower() for w in open('filename.dat').read().split()))
将整个文件读入内存,使用将其拆分为单词 空格,将每个单词转换为小写,创建一个(唯一的)集合 从小写单词,计算它们并打印输出
要尝试理解,我正在尝试逐步在Python中实现它。我可以使用open和read导入文本块,使用split将其分成单个单词,并使用lower将它们全部小写。我还可以在列表中创建一组唯一的单词。但是,我无法弄清楚如何做最后一部分 - 计算唯一单词的数量。
我认为我可以通过迭代一组唯一单词中的项目并将它们计算在原始小写列表中来完成,但我发现set结构不可索引。
所以我想我正在尝试用自然语言做的事情,对于集合中的所有项目,告诉我它们在小写列表中出现了多少次。但我无法弄清楚如何做到这一点,我怀疑对Python的一些潜在误解阻碍了我。
伙计们感谢您的答案。我刚刚意识到我没有正确解释自己 - 我不仅要找到唯一单词的总数(我理解的是集合的长度),还要找到每个单词的使用次数,例如: '''被使用了14次,'和'被使用了9次,'它'被使用了20次,依此类推。为混乱道歉。
答案 0 :(得分:13)
我相信在这种情况下你需要Counter:
from collections import Counter
print Counter(yourtext.split())
答案 1 :(得分: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)
如果您想避开if子句,可以查看collections.defaultdict。
答案 2 :(得分:4)
根据定义,set包含唯一元素(在您的情况下,您无法在此处找到相同的'下方字符串'两次)。所以,你要做的只是获取集合中元素的数量=集合的长度= len(set(...))
答案 3 :(得分:1)
您的问题已包含答案。如果s
是文档中唯一字词的集合,则len(s)
会提供集合中元素的数量,即文档中唯一字词的数量。
答案 4 :(得分:1)
您可以使用计数器
from collections import Counter
c = Counter(['mama','papa','mama'])
c的结果将是
Counter({'mama': 2, 'papa': 1})
答案 5 :(得分:0)
我会说该代码计算不同字的数量,而不是唯一字的数量,这是仅出现一次的字数。
这计算每个单词出现的次数:
from collections import defaultdict
word_counts = defaultdict(int)
for w in open('filename.dat').read().split():
word_counts[w.lower()] += 1
for w, c in word_counts.iteritems():
print w, "occurs", word_counts[w], "times"
答案 6 :(得分:0)
最简单的方法:
len(set(open(file_path).read().lower().split()))