我想用TRIE构建一个简单的搜索器(http://en.wikipedia.org/wiki/Trie
但我的trie遇到了一个逻辑运算符(和或不)的问题。
有没有办法在Trie中添加一个运算符?
我想在下面搜索一些案例:
用三句话输入数据:

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.

以及两种构建trie的方法:
a.根据查询生成trie,并在其上读取输入数据搜索。
根据每个句子的输入数据构建trie。在trie上搜索每个查询词。
谢谢您。

最佳答案

您需要一个数据结构来将关键字与句子集相关联这可以是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之前,我将尝试使用您可用的标准数据结构。)

关于algorithm - 使用逻辑运算符进行TRIE搜索,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/25482685/

10-12 16:15