5
4

2 回答 2

5

试试Hai Feng Kao 的字符标记器。它可以搜索前缀、后缀和介于两者之间的任何内容。它也支持中文。我认为您找不到任何其他支持任意子字符串搜索的标记器。

顺便说一句,这是一种无耻的自我推销。

如果要character在 Objective-C 中打开由 tokenizer 编码的数据库,请执行以下操作:

#import <FMDB/FMDatabase.h>
#import "character_tokenizer.h"

FMDatabase* database = [[FMDatabase alloc] initWithPath:@"my_database.db"];
if ([database open]) {
    // add FTS support
    const sqlite3_tokenizer_module *ptr;
    get_character_tokenizer_module(&ptr);
    registerTokenizer(database.sqliteHandle, "character", ptr);
}
于 2013-08-22T19:31:41.293 回答
3

你也可以试试 FMDB 的 FMSimpleTokenizer。FMSimpleTokenizer 使用内置的 CFStringTokenizer 并且根据苹果文档“CFStringTokenizer 允许您以与语言无关的方式将字符串标记为单词、句子或段落。它支持日语和中文等不使用空格分隔单词的语言”

如果您检查 FMSimpleTokenizer 代码,您会发现这是通过调用 CFStringTokenizerAdvanceToNextToken 和 CFStringTokenizerGetCurrentTokenRange 完成的。

一个有趣的“事实”是 CFStringTokenizer 如何标记中文单词,例如“欢迎使用”将被标记为“欢迎”和“使用”,这完全有道理,但是如果你搜索“迎”,你会惊讶地看到根本没有结果!

在这种情况下,您可能需要编写一个分词器,例如 Hai Feng Kao 的 sqlite 分词器。

于 2015-07-14T03:09:35.530 回答