在iphone应用程序中150k字词典中搜索单词的最佳方式?

时间:2010-07-15 12:53:27

标签: iphone iphone-sdk-3.0 sqlite

我用150k字和定义开发了一个法语简单的词典应用程序。 我正在寻找最佳方法。

首先我使用带有150k字的sqlite bdd。 我使用LIKE命令进行单词搜索,但速度非常慢 例如:SELECT * FROM words WHERE word LIKE'%avoi%'LIMIT 0,50; 搜索包含'avoi'的单词,如'avoir'或'savoir'。 我的表有列索引,但是LIKE没有使用索引,因此它在3GS上非常慢(2-5)。

我使用fts3扩展关闭sqlite后使用MATCH命令 例如:SELECT * FROM words WHERE单词匹配'avoi *'LIMIT 0,50; 在3GS上要好得多(0,1-0,15s),但只搜索以“躲避”字样开头的单词“savoir”不在结果中。 MATCH命令不适用于' avoi '

等语法

您对优化此文本搜索有任何想法吗?

我有一个非常好的iphone应用程序例子:Dixel(Robert Disctionnary)非常快速地进行这种搜索。对方法有什么想法?

感谢您的回答。

1 个答案:

答案 0 :(得分:2)

快速词典使用复杂的数据结构来限制暴力搜索。关于可以快速存储和搜索的单词的数据很多

一个这样的数据结构只是基于它们包含的字母之间关系的单词排序。例如。您有一个表格,列出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`)

一旦你得到匹配的所有单词的表格都有必要的模式,你就可以快速强制它。

字典就像日期和时代一样,它们看起来很简单,因为我们已经习惯了它们,但在幕后使用它们在计算机上工作所需的代码看似复杂。