【问题标题】:Preserve punctuation characters when using Lucene's StandardTokenizer使用 Lucene 的 StandardTokenizer 时保留标点符号
【发布时间】:2015-02-05 14:08:32
【问题描述】:

我正在考虑利用 Lucene 的 StandardTokenizer 在非 IR 上下文中进行词标记化。

我了解此标记器会删除标点符号。有人知道(或碰巧有经验)将标点符号作为单独的标记输出吗?

当前行为示例:

Welcome, Dr. Chasuble! => Welcome Dr. Chasuble

期望行为示例:

Welcome, Dr. Chasuble! => Welcome , Dr. Chasuble !

【问题讨论】:

  • 您可以使用 Whitespace 分词器,后跟一个模式分词器,它在单词边界上拆分,即正则表达式 \b

标签: java solr lucene nlp tokenize


【解决方案1】:

一般来说,对于 IR 和非 IR 内容的自定义标记化,最好使用 ICU(ICU4J 是 Java 版本)。 这将是一个很好的起点: http://userguide.icu-project.org/boundaryanalysis

棘手的部分是将句号保留为“博士”的一部分。您将不得不使用基于字典的迭代器;或者,可选地,在您的代码中或通过创建自己的迭代器来实现您自己的启发式算法,在 ICU 中可以将其创建为具有许多正则表达式样式定义的文件。

【讨论】:

  • 非常感谢您的指点和建议。我最终利用了 Apache Lucene 的 UAX29URLEmailTokenizer JFlex 语法,正如 this 线程中所建议的那样。
【解决方案2】:

您可以考虑改用 NLP 社区的标记化工具。通常这些问题都得到了很好的处理。

一些现成的工具是 stanford corenlp(它们也有用于标记化的单独组件)。 UIUC 的管道也应该优雅地处理它。 http://cogcomp.cs.illinois.edu/page/software/

【讨论】:

    猜你喜欢
    • 2011-04-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-06-20
    • 1970-01-01
    • 2015-08-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多