使用逻辑运算符搜索TRIE

时间:2014-08-25 09:21:47

标签: algorithm search full-text-search trie

我想使用TRIE(http://en.wikipedia.org/wiki/Trie)构建一个简单的搜索器 但我遇到了逻辑运算符(AND,OR,NOT)问题。 有没有办法向Trie添加运算符?

我想搜索下面的一些案例:

用3个句子输入数据:

1. Tom is husband of Marry.
2. Tom is a teacher.
3. Tom is old friend of Marry.

查询如下:

(Tom AND Marry NOT friend). 
=> result is 1st sentence.

建立特里的两种方式:

一个。从Query构建trie并读取输入数据。

湾使用每个句子从输入数据构建trie。在trie上搜索查询的每个单词。

谢谢。

1 个答案:

答案 0 :(得分:2)

您需要一个数据结构来将关键字与句子集相关联。这可能是一个hashmap或trie。在您的示例中:

Tom => [1, 2, 3]
Mary => [1, 3]
husband => [1]
teacher => [2]
friend => [3]

此数据结构不包含逻辑运算符。您可以单独应用它们,例如:

"Tom" => lookup("Tom")
"Tom AND Mary" => intersection(lookup("Tom"), lookup("Mary"))
"Tom OR Mary" => union(lookup("Tom"), lookup("Mary"))
"Tom NOT Mary" => difference(lookup("Tom"), lookup("Mary"))

在此伪代码中,只有lookup对trie或您用于存储单词的任何数据结构进行操作。其他功能对集合进行操作,即存储项目的值。

您的设计需要回答两个问题:如何将单词与句子集相关联?我如何表示句子集?特里只是第一个问题的答案。

当然,还有如何解析查询以获得所需逻辑功能的问题。 (你还没有指定一种语言,但在实现trie之前,我尝试使用你可以使用的标准数据结构。)