【问题标题】:TRIE search with logical operator使用逻辑运算符进行 TRIE 搜索
【发布时间】:2014-10-18 09:55:01
【问题描述】:

我想使用 TRIE (http://en.wikipedia.org/wiki/Trie) 构建一个简单的搜索器 但是我的 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.

还有 2 种构建 trie 的方法:

一个。从 Query 构建 trie 并在其上读取输入数据搜索。

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

谢谢。

【问题讨论】:

  • 可能有一种方法可以做你想做的事,但如果你想在这里得到答案,你必须更准确地描述它。您正在寻找的行为示例怎么样?
  • @MOehm:我更新了更多描述。谢谢。

标签: algorithm search full-text-search trie


【解决方案1】:

您需要一个数据结构来将关键字与句子集相关联。这可能是一个 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 只是第一个问题的答案。

当然,还有一个问题是如何解析查询以获得您需要的逻辑函数。 (您尚未指定语言,但在实现 trie 之前,我会尝试使用您可用的标准数据结构。)

【讨论】:

    猜你喜欢
    • 2015-10-02
    • 2012-01-10
    • 1970-01-01
    • 1970-01-01
    • 2017-02-15
    • 1970-01-01
    • 2015-12-28
    • 2016-10-22
    • 2015-04-09
    相关资源
    最近更新 更多