我有一个单词组合列表,例如“棕狐”和一堆要检查的句子。 我只想查找列表中元素在句子中出现的次数。
我有一个可行的解决方案,但我想使其更快。所以我只想发表意见或采取其他替代方式。
什么都不区分大小写。
当关键字列表很少时,我拥有的解决方案效果很好。 如果我的关键字列表有80个元素,而句子只有两个或三个单词怎么办?会很慢。有什么方法可以改善解决方案吗?
harry_line = "The Dark Lord Voldemort is
shooting another shooter who claimed to be Dark Lord."
keywords = ['Dark Lord', 'shooter', 'plan', 'poncho', 'brown fox', 'ugly cake piece']
print(sum(harry_line.count(phrase) for phrase in keywords))
在上面的示例中,“黑魔王”发生了两次,而射击游戏发生了一次,因此输出为3,这是正确的。
答案 0 :(得分:4)
由于the OP would like a real answer是一种简单的可能性列表,应按顺序尝试:
multiprocessing
模块来并行化Aho-Corasick扫描。答案 1 :(得分:0)
如果您正在寻找速度,则可以尝试对单词进行计数,然后对列表/元组中的单词求和。
search_words = ['enter', 'your', 'search']
sentence = "enter your sentence here"
counts = dict()
for word in sentence.split():
if word in counts.keys():
counts[word] += 1
else:
counts[word] = 1
total=0
for word in search_words:
if word in counts.keys():
total += counts[word]
print(total)
此方法将仅是O(n),或者可能是O(n×log(n)),而不是您的漂亮的单衬线所做的O(n ^ 2)。它利用dict
类型的近恒定查找时间。