用于搜索的同义词数据结构

时间:2016-08-22 17:16:12

标签: java search data-structures lucene synonym

我正在寻找一种保存同义词的数据结构。我想把同义词放在像“北美”,“美国”,“美国”这样的桶中。

搜索内容可以使用“北美”,“美国”,“美国”中的任何一种进行标记。

For example, 
Content_1 is tagged "USA"
Content_2 is tagged "North America"
Content_3 is tagged "United States"

如果用户搜索“USA”,搜索结果应该返回所有三个内容而不仅仅是Content_1。要做到这一点,我必须获得美国的所有同义词,然后进行搜索。

如何在我寻找同义词之一的地方存储同义词并获取所有其他同义词?

执行此操作的一种方法是通过HashMap(如下所示)

USA -> North America,United States
United States -> USA, North America
North America -> USA,United States

这个看起来并不那么好。请建议一个良好的数据结构来存储同义词。

感谢。

2 个答案:

答案 0 :(得分:1)

  

访问权限为O(1)。但构建数据结构看起来像生成   重复的项目。一个更好的数据结构,只有一个条目   存储

您可以使用两种数据结构。一个用于存储它们,另一个用于查找。 一个向量向量,包含单词的所有同义词。以及指向容器的散列图,其中包含O(1)查找的所有同义词。

因此,您可以将同义词存储在这样的数据结构中(字符串列表列表):

{{"USA","North America","United States"},{"Tiny","Small"},{"Great","Good"}}

然后你会有一个 hashmap ,所以如果你搜索" USA"你会得到第一个清单。如果您搜索" Small"你会得到第二个清单。

"USA"->{"USA","North America","United States"}
"Small"->{"Small","Tiny"}

hashmap中的数据只是对您在其他数据结构中保存的同义词列表的引用。

答案 1 :(得分:0)

构建数据类型Synonym,其Set<String>包含一个单词的所有同义词(在您的情况下&#34;北美&#34;,&#34;美国和#34;,&# 34;美国&#34;)。 然后使用Map<String, Synonym>将所有字​​词映射到相应的Synonym