我正在用150k个单词和定义开发一个简单的法语词典应用程序。
我正在寻找做到这一点的最佳方法。
首先,我使用带有150k字的sqlite bdd。
我使用LIKE命令搜索单词,但是速度很慢
例如:SELECT * FROM words where word like'%avoi%'LIMIT 0,50;
用于搜索包含“ avoi”或“ savoir”的“ avoi”的单词。
我的表具有单词列索引,但是LIKE不使用索引,因此在3GS上它非常慢(2-5)。
在我使用fts3扩展关闭sqlite以使用MATCH命令之后
例如:SELECT * FROM单词,其中单词MATCH'avoi *'LIMIT 0,50;
在3GS上好得多(0,1-0,15s),但它仅搜索结果以'savoir'等以'avoi'开头的单词。
MATCH命令不适用于“ avoi”之类的语法
您有什么想法可以优化此文本搜索吗?
我有一个很好的iPhone应用程序示例:Dixel(Robert Disctionnary),使这种搜索非常快。对这个方法有什么想法吗?
感谢您的回答。
最佳答案
快速词典使用复杂的数据结构来限制暴力搜索。关于单词的大量数据可以快速存储和搜索
一种这样的数据结构仅仅是根据单词包含的字母之间的关系对单词进行排序。例如。您有一个表,列出了所有在a
后跟v
的单词。然后是所有带有v
后跟o
的单词的另一个。搜索任意字符串avo
然后将具有顺序AND的表合并在一起就成为问题。所以:
(all words in which `a` is followed by a `v`) AND (all words in which `v` followed by an `o`)
一旦获得所有具有必要模式的匹配单词表,就可以快速对其进行暴力破解。
字典就像日期和时间,它们看起来很简单,因为我们已经习惯了它们,但是在幕后使它们在计算机上工作所需的代码在外观上看似复杂。
关于iphone - 在iPhone应用程序中搜索15万个单词词典中的单词的最佳方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3255658/