Lucene.Net/SpellChecker - 基于多词/短语的自动建议

时间:2010-06-25 14:52:51

标签: lucene.net

我在我的网站上实施了Lucenet.NET,用它来索引我的产品,这些产品是剧院表演,旅游和伦敦周边的景点。

我想实现“你的意思是?”当用户拼错产品名称时考虑到整个产品标题的功能,而不仅仅是单个单词。例如,

如果用户键入:

Lodnon Eye

我想自动建议:

伦敦 伦敦眼

我认为我必须让分析器将标题索引为好像它们是单个实体,这样SpellChecker可以与短语以及单个单词最接近匹配。

我该怎么做?

3 个答案:

答案 0 :(得分:10)

这里有一个很棒的博客系列:

  1. Lucene.NET
  2. Introduction to Lucene
  3. Indexing basics
  4. Search basics
  5. Did you mean..
  6. Faceted Search
  7. Class Reference
  8. 我还发现了另一个名为SimpleLucene的项目,您可以在需要更新或删除文档时使用它来维护lucene索引。 Read about it here

答案 1 :(得分:7)

我刚刚在lucene.net上实现了一个短语autosuggest系统。

基本上,lucene的java版本在其中一个contrib文件夹中有一个shinglefilter,它将句子分解为所有可能的短语组合。不幸的是lucene.nets contrib过滤器还没有完全存在,所以我们没有一个木瓦过滤器。

但是,只要版本相同,lucene.net就可以读取用java编写的lucene索引。所以我做的是以下内容:

使用spellcheck.IndexDictionary方法在lucene.net中创建了一个法术索引,如jake scotts链接的“你是说”部分所述。请注意,只创建单个单词的拼写索引,而不是短语。

然后我创建了一个java应用程序,它使用木瓦过滤器来创建我正在搜索的文本的短语并将其保存在临时索引中。

然后我在dotnet中编写了另一个方法来打开这个临时索引,并将每个短语作为一行或一个文档添加到我已经包含单个单词的拼写索引中。诀窍是确保你添加的文件与其他拼写文件的形式相同,所以我在lucene.net项目中删除了拼写检查代码中使用的方法并编辑了这些方法。

一旦你完成了,你可以调用spellcheck.suggestsimilar方法并传递一个拼写错误的短语,它会返回一个有效的建议。

答案 2 :(得分:0)

这可能不是最好的解决方案,我肯定会使用太空人建议的答案,但这是另一种可能的解决方案。在每个标题上使用KeywordAnalyzer或KeywordTonenizer,这不会将标题分解为单独的标记,而是将其保留为一个标记。使用SuggestSimilar方法会将整个标题作为建议返回。