【发布时间】:2014-05-12 05:38:30
【问题描述】:
假设我有这样的字典:
docDict = {"alpha": ["a", "b", "c", "a", "b"], "bravo": ["b", "c", "d", "c", "d"]}
而我想做的就是计算“文档频率”:假设每个字典项都是一个文档,并且我有一个特定的单词,那么有多少文档包含该单词?
我看到很多帖子告诉我如何计算频率,但是如果"a" 在文档"alpha" 中出现两次,我只需要计数为1。所以"a" 的“频率”应该是1,"c" 应该是 2。
我知道我可以迭代整个文档字典,并在文档中查找单词时添加计数器。或者我可以先让每个文档中的单词唯一,然后将所有文档合并起来统计单词。
但我认为有更好的方法,更有效的方法。有什么想法吗?
顺便说一句,有什么办法可以保持字典的结构吗?在这个例子中,我想得到{"alpha": {'c': 2, 'b': 2, 'a': 1}, "bravo": {'c': 2, 'b': 2, 'd': 1}的结果
更新
如果这里我只有一个列表(类似[["a", "b", "c", "a", "b"], ["b", "c", "d", "c", "d"]]),我如何获得类似[[1, 2, 2, 0], [0, 2, 2, 1]] 的结果列表。
我不知道。重点是扩展每个列表并确保术语的顺序。想法?
【问题讨论】:
-
我不明白你的目标。您想计算一个字符/单词在文档中出现的次数吗?但你不想实际算吗?为什么
"a"的计数为1而"c"的计数为2?这对我来说没有意义。 -
@Cyber 我想计算有多少文档包含该词。在我的例子中,只有
"alpha"包含"a",所以它应该是1(尽管在"alpha"中有两次),而"c"在"alpha"和"bravo"中都有,所以它是2(虽然有总共 3 个"c"s)。
标签: python dictionary counter frequency tf-idf