我下载了维基百科文章标题文件,其中包含每篇维基百科文章的名称。我需要搜索可能匹配的所有文章标题。例如,我可能有“曲棍球”这个词,但我想要的维基百科的曲棍球文章是“Ice_hockey”。它也应该是一个不区分大小写的搜索。
我正在使用Python,有没有一种比逐行搜索更有效的方法?我会在理想情况下每分钟执行500次或1000次此搜索。如果逐行是我唯一的选择,我可以做一些优化吗?
我认为文件中有几百万行。
有什么想法吗?
感谢。
答案 0 :(得分:3)
如果你有一个固定的数据集和变量查询,那么通常的技术是将数据集重新组织成可以更容易搜索的内容。在抽象层面,您可以将每个文章标题分解为单独的小写单词,并将它们中的每一个添加到Python字典数据结构中。然后,每当您收到查询时,将查询字转换为小写字母并在字典中查找。如果每个词典条目值都是标题列表,那么您可以轻松找到与给定查询词匹配的所有标题。
这适用于直截了当的单词,但您必须考虑是否要对类似单词进行匹配,例如在查询为“冒烟”时查找“吸烟”。
答案 1 :(得分:3)
如果你想匹配单个单词,格雷格的答案是好的。如果你想在子串上匹配,你需要一些更复杂的东西,比如后缀树(http://en.wikipedia.org/wiki/Suffix_tree)。构造完成后,后缀树可以有效地回答任意子串的查询,因此在您的示例中,当有人搜索“hock”时,它可以匹配“Ice_Hockey”。
答案 2 :(得分:1)
我建议您将数据放入sqlite数据库,并使用SQL“like”运算符进行搜索。