【问题标题】:Lucene.Net/SpellChecker - multi-word/phrase based auto-suggestLucene.Net/SpellChecker - 基于多词/短语的自动建议
【发布时间】:2011-08-13 04:17:14
【问题描述】:

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

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

如果用户输入:

洛农之眼

我想自动建议:

伦敦 伦敦眼

我假设我需要让分析器索引标题,就好像它们是单个实体一样,以便 SpellChecker 可以对短语以及单个单词进行最接近匹配。

我该怎么做?

【问题讨论】:

    标签: lucene.net


    【解决方案1】:

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

    1. Lucene.NET
    2. Introduction to Lucene
    3. Indexing basics
    4. Search basics
    5. Did you mean..
    6. Faceted Search
    7. Class Reference

    我还发现了另一个名为 SimpleLucene 的项目,您可以在需要更新或删除文档时使用它来维护 lucene 索引。 Read about it here

    【讨论】:

      【解决方案2】:

      我最近在 lucene.net 中实现了一个短语自动提示系统。

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

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

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

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

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

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

      【讨论】:

      • 您好,您能否提供一些代码示例,我正在尝试实现相同的目标,但无法按照您的指南进行操作。
      • codingsmith.co.za/lucene-net-phrase-suggestion Naz 只为你。希望有意义
      • 我能够在您的博文之后实现多短语自动建议。看起来最新的 Lucene.net + contrib 包含了 shinglefilter,所以我可以通过扩展 SpellChecker 类在 .NET 中完成这一切。再次感谢您的帮助。
      【解决方案3】:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-01-06
        相关资源
        最近更新 更多