我应该使用哪种数据结构来计算单词及其出现的文档?

时间:2017-02-25 22:56:11

标签: python-3.x data-structures counter

我浏览一份文件清单,计算每个单词全局出现的次数,并存储在哪些文件中。因此,我需要一个或多或少是dict的数据结构,其中键是单词,值是计数和文档ID列表。

基本上就是这样,我想? :

{
'word1': [num1, [id1, id2, id3]],
'word2': [num2, [id2, id4, id5]],
'word3': [num3, [id1, id4, id6, id]]
}

有这样的事吗?

我需要的是:

  • 如果我推送的单词已经存在,则必须创建新行
  • num字段必须易于递增,
  • 使用新文档id
  • 轻松更新的id列表

我应该使用dict吗?或者是其他东西 ?我可以看到每个单词的list['word', num, [id1, id2, id3]]如何处理,但我觉得代码对于那些容易的东西来说会非常复杂,所以我想知道是否还有其他的数据结构我不知道哪个更适合我使用?

2 个答案:

答案 0 :(得分:1)

from collection import defaultdict
import re

s = "the task is to find the frequency of words in multiple docs"
ids = { 'the': [1,2,4], 'frequency' : [2,3] , 'of' : [1,2,3,4,5], 'words': [8] }
d = defaultdict(int)

#build the histogram of words: 
for w in re.findall('\w+',s):
   d[w] += 1

#new dictionary of frequency and ids:
new_ids = defaultdict(list)

for k in d:
    new_ids[k].append(d[k])
for k in ids:
    new_ids[k].append(ids[k])

输出:

>>>new_ids
defaultdict(list,
            {'docs': [1],
             'find': [1],
             'frequency': [1, [2, 3]],
             'in': [1],
             'is': [1],
             'multiple': [1],
             'of': [1, [1, 2, 3, 4, 5]],
             'task': [1],
             'the': [2, [1, 2, 4]],
             'to': [1],
             'words': [1, [8]]})

换句话说,一种方法是组合默认词典以利用其功能轻松创建计数并将值附加到列表中。

答案 1 :(得分:0)

我建议使用Chaining概念进行哈希处理。 请仔细阅读文件here 最坏情况的复杂性是O(n)。