【发布时间】:2016-11-27 01:48:35
【问题描述】:
我正在查找在一篇文章中找到了多少次所有字词袋中的字词。我对每个词的频率不感兴趣,而是对所有这些词在文章中出现的总次数感兴趣。当我从互联网上检索它们时,我必须分析数百篇文章。我的算法需要很长时间,因为每篇文章大约 800 字。
这是我所做的(其中 amount 是在一篇文章中找到单词的次数,article 包含构成文章内容的所有单词的字符串,我使用 NLTK 进行标记。)
bag_of_words = tokenize(bag_of_words)
tokenized_article = tokenize(article)
occurrences = [word for word in tokenized_article
if word in bag_of_words]
amount = len(occurrences)
tokenized_article 的样子:
[u'sarajevo', u'bosnia', u'herzegovi', u'war', ...]
bag_of_words也是如此。
我想知道是否有任何更有效/更快的方法来使用 NLTK 或 lambda 函数,例如。
【问题讨论】:
-
我不确定 NTLK 在这里如何为您提供帮助——您正在比较字符串,仅此而已。现在,有一些方法可以更有效地解决这个问题:将
bag_of_words设置为set,因为它具有恒定时间的成员资格检查(而不是列表大小的线性时间)。现在,您可以在 O(N) 的任何集合中计算 N 个单词的出现次数,这是您无法击败的(据我所知)。