【发布时间】:2014-02-03 07:11:26
【问题描述】:
我有一个单词列表,大约 1000 个左右。我想检查该列表中的任何单词是否出现在输入文本中。如果是这样,我想知道发生了哪些。输入文本是几百个单词,这些是来自网络的文本段落——这意味着其中有很多来自不同的站点。我正在努力为它找到最好的算法。
我可以看到两种明显的方法来做到这一点--
从文本列表中搜索每个单词的蛮力方法。
根据输入文本创建一个单词哈希表,然后从哈希表的列表中搜索每个单词。这很快。
有没有更好的解决方案?
我正在使用 python,但我不确定这是否会改变算法。
作为对上述解决方案 2 的优化,我想将生成的哈希表存储到持久存储 (DB) 中,这样如果单词列表发生更改,我可以重新使用哈希表而无需再次创建它.当然,如果输入文本发生变化,我必须生成哈希表。是否可以将哈希表保存到数据库?有什么建议吗?我目前正在为我的项目使用 MongoDB,我只能在其中存储 json 文档。我是 MongoDB 的新手,刚刚开始使用它,还没有完全了解它的全部潜力。
我搜索了 SO 并看到两个类似问题的问题,其中一个建议使用哈希表,但我想获得任何关于我想到的优化的指针。
这里是之前关于 SO 的问题 -
Is there an efficient algorithm to perform inverted full text search?
Searching a large list of words in another large list
编辑:我刚刚在 SO 上发现了另一个关于相同问题的问题。
Algorithm for multiple word matching in text
我想没有比哈希表更好的解决方案了。但我真的很想对其进行优化,以便对单词列表的更改可以让我对我存储的所有文本快速运行算法。我是否应该更改添加到问题中的标签以包含一些数据库技术?
【问题讨论】:
-
"从输入文本中创建一个单词的哈希表,然后从哈希表的列表中搜索每个单词。这样很快。有没有更好的解决方案?" 这种方法有什么问题?你为什么不满意? (你试过吗?)
-
这是我能想到的最佳解决方案。我只是想看看是否存在更好的解决方案。我已经尝试过了,所以正在考虑我解释的优化,我想添加到它。在深入研究优化之前,我想确保没有其他我不考虑的解决方案。