【问题标题】:Proper word splitting for words with apostrophes in SolrSolr中带有撇号的单词的正确分词
【发布时间】:2014-07-07 20:46:03
【问题描述】:

我正在尝试配置 Lucene / Solr 以正确索引来自新闻文章的单词。正如目前 Solr 3.4 WordDelimitedFilterFactory 索引的“开箱即用”一样: 她是 成为

但她会像“她会”一样变成她、我、她和贝壳。我绝对不希望它与“shell”匹配。这不是本意。

目前我的文本通过 WhitespaceTokenizerFactory,然后是 StopFilterFactory,然后 WodDelimiterFilterFactory 设置为: generateWordParts="1" generateNumberParts="1" 连环词=“1” catenateNumbers="1" catenateAll="0" splitOnCaseChange="0" splitOnNumerics="0" 保留原始=“1” types="specialtypes.txt"

我试着说撇号被认为是 specialtypes.txt 中的一个字母字符,方法是: ' => ALPHA
但后来她变成了一个词,小马和公司也是如此,这不是我想要的。

有什么想法吗?

【问题讨论】:

  • 您对这种情况有何期待:Scarlett O'Hara?
  • 我希望虫子变成虫子,阿诺德变成阿诺德(英语所有格),但我希望她变成她而不是壳
  • 对不起@notdang 我看错了。我希望 Scarlet O'Hara 成为完美世界中的 Ohara

标签: solr lucene


【解决方案1】:

添加

solr.ApostropheFilterFactory

根据文档:

去掉撇号后的所有字符(包括撇号) 本身)。

例如:“Türkiye'de”、“2003'te” ==> “Türkiye”、“2003”。

【讨论】:

  • 这对我想要的东西不起作用,因为我不希望她变成她,我希望它在这种情况下保持原样。但我希望 Bug 成为 Bug,保留 WhitespaceTokenizerFactory 中 Lucene 的英语所有格过滤器的工作原理
  • 似乎 solr.ApostropheFilterFactory 直到 4.8 才引入
【解决方案2】:

尝试使用 protected="protwords.txt" 作为 solr.WordDelimiterFilterFactory 过滤器设置的一部分:https://wiki.apache.org/solr/AnalyzersTokenizersTokenFilters#solr.WordDelimiterFilterFactory

您可以添加可能会导致撇号出现问题的单词(例如 she'll、he'll、we'll、we're)。这将在没有任何进一步标记或过滤的情况下对它们进行索引,同时继续将撇号上的单词分解为所有格和其他用途。

【讨论】:

  • 这成功了!起初我很困惑,因为我在 solr.KeywordMarkerFilterFactory 中有 protected="protwords.txt" 但这没有帮助。它需要在 solr.WordDelimiterFilterFactory 部分中专门调用。
猜你喜欢
  • 2023-04-01
  • 2023-03-26
  • 1970-01-01
  • 1970-01-01
  • 2013-10-20
  • 2012-03-06
  • 1970-01-01
  • 1970-01-01
  • 2010-11-14
相关资源
最近更新 更多