【发布时间】:2015-05-28 00:56:27
【问题描述】:
给定 1,000 个单词的文本,对照 10,000 个单词的字典检查的有效方法是什么?我想计算非唯一匹配的数量。
一个想法是将字典存储为哈希。但随后我必须根据哈希检查每个单词,这将是 1,000 次操作。这似乎效率不高。
另一个想法是 Postgres 文本搜索。但是是否可以在一个查询中执行此检查?
另一个想法是将单词存储在 Memcache 或 Redis 数据库中,但这需要 1,000 次查询并且非常慢。
那么,有没有更有效的解决方案?
在 Ruby 中工作。
编辑:为 a 添加基准:
Cary 关于dict_set 更快的断言是正确的:
aw.length
=> 250
dw.length
=> 1233
dict_set.length
=> 1223
t = Time.now; 1000.times{ aw & dw }; Time.now - t
=> 0.682465
t = Time.now; 1000.times{ aw.count{ |w| dict_set.include? w }}; Time.now - t
=> 0.063375
所以,Set#include? 似乎很有效。
【问题讨论】:
-
您想只执行一次还是针对 1,000 个单词的多个文本(使用同一个词典)执行此操作? “非唯一”匹配是什么意思?
-
1000字集排序了吗?
-
@HenryChinner - 是的,1000字集可以排序。
-
@CarySwoveland - 是的,我想根据同一个词典检查许多 1,000 个单词的文本。通过非唯一,我的意思是假设“真棒”这个词在文本中出现了两次。如果它出现在字典中,则找到的字数将增加 2。
-
如果“awesome”在文本中只出现一次并且在字典中,计数是加0还是加1?