0

我正在编写一个脚本,首先从大量文件中提取 50 个最常用的单词。然后继续查找在每个文件中可以找到这 50 个单词的出现次数。这有效,但是如果找到该单词,它只会给出一个数字。如果找不到单词,我希望它给出 0。我到目前为止的代码如下:

for text in posts:
   c=counter()
   c.update(word for word in wordpunct_tokenize(text3) if word in top)
   rel_freq2= c.values()
   print rel_freq2

在这段代码中,top 是一个如下所示的列表:

[',', '.', 'i', '?', 'the', 'to', 'and', 'it', 'of', 'that', 'a', 'in', 'he', 'you', "'", 's', 'is', '...', '(', 'my', 't', 'be', 'for', 'what', 'with', 'so', 'now', 'have', 'm', 'we', 'this', '!', 'get', 'all', 'if', 'was', 'but', 'me', 'not', '"', 'about', 'on', 'they', '-', 'why', 'love', 'one', 'going', 'iraq', 'can']

脚本的结果是这样的:

[11, 1, 11, 15, 8, 11, 6, 3, 11, 4, 10, 11, 10, 4, 21, 38, 19, 1, 8, 1, 56, 5, 5, 7, 

13, 3, 4, 2, 4, 4, 1, 20, 4, 5, 9, 19, 9, 38, 10, 8, 12, 23, 8]
[5, 2, 2, 7, 2, 3, 1, 2, 3, 2, 11, 1, 7, 19, 4, 1, 1, 1, 2, 2, 2, 2, 1, 1, 1, 9, 2, 1, 4, 5, 7, 16, 2, 2, 3, 4]
[19, 4, 6, 12, 5, 8, 1, 4, 13, 3, 1, 4, 3, 6, 4, 3, 25, 8, 24, 3, 7, 2, 7, 6, 10, 12, 1, 3, 2, 6, 7, 1, 8, 1, 1, 2, 23, 6, 2, 1, 1, 2, 13, 3]
[6, 1, 4, 2, 3, 1, 5, 5, 1, 1, 5, 6, 6, 2, 2, 1, 3, 1, 1, 1, 1, 2, 4, 7, 1, 1, 9, 2]

注意这里没有 0。每个列表需要 50 个项目,0 或更高。

我将如何解决这个问题?

4

2 回答 2

1

如果您想获取某个单词列表中所有 50 个单词的值,即使是那些从未出现过的单词:

rel_freq2 = [c.get(word, 0) for word in top]

这也有一个优点,它按您的单词列表的顺序出现,而不是像c.values().

get方法允许您为不可用的键提供默认值。如果您的counter类与标准相似collections.Counter,则已经有一个默认值0,因此您不需要它,而可以只做c[word].

于 2013-05-09T18:32:35.583 回答
0

如果 Python 2.7 是一个选项,请改用标准库中的 Counter

 from collections import Counter
 posts = ['the', 'to', 'xyz', 'abc']
 top = [',', '.', 'i', '?', 'the', 'to', 'and', 'it', 'of', 'that', 'a', 'in', 'he', 'you', "'", 's', 'is', '...', '(', 'my', 't', 'be', 'for', 'what', 'with', 'so', 'now', 'have', 'm', 'we', 'this', '!', 'get', 'all', 'if', 'was', 'but', 'me', 'not', '"', 'about', 'on', 'they', '-', 'why', 'love', 'one', 'going', 'iraq', 'can']
 c = Counter(posts)
 for x in top:
   print x, c[x]
于 2013-05-09T18:35:58.487 回答