【问题标题】:Java NLP: Extracting Indicies When Tokenizing TextJava NLP:在标记文本时提取索引
【发布时间】:2012-09-06 02:16:48
【问题描述】:

在对文本字符串进行标记时,我需要提取标记词的索引。例如,给定:

"Mary didn't kiss John"

我需要类似的东西:

[(Mary, 0), (did, 5), (n't, 8), (kiss, 12), (John, 17)]

其中 0、5、8、12 和 17 对应于标记开始的索引(在原始字符串中)。我不能只依赖空格,因为有些单词会变成 2 个标记。此外,我不能只在字符串中搜索标记,因为该词可能会出现多次。

一个巨大的障碍是我正在处理“脏”文本。这是语料库中的一个真实示例及其标记化:

字符串:

The child some how builds a boaty  c capable of getting scrtoacross the sea, even after findingovercoming many treachrous rous obsittalcles.

代币:

The, child, some, how, builds, a, boaty, , , c, , capable, of, getting, scrto, , across, the, sea, ,, even, after, finding, , , , , overcoming, many, treachrous, rous, obsittalcles, .

我目前正在使用 OpenNLP 对文本进行标记化,但对使用哪个 API 进行标记化感到矛盾。不过,它确实需要是 Java,所以(不幸的是)Python 的 NLTK 不适用。

任何想法将不胜感激!谢谢!

【问题讨论】:

    标签: java nlp token tokenize information-retrieval


    【解决方案1】:

    您可以使用BreakIterator 执行相同的操作,而无需使用任何外部 API。

    【讨论】:

      【解决方案2】:

      OpenNLP 将使用Tokenizer.tokenizePos(String s) 方法返回偏移量,请参阅OpenNLP API for TokenizerME 作为已实现标记器的示例。返回的每个Span 都包含令牌的开始和结束位置。

      您是否决定使用 UIMA 确实是一个单独的问题,但 OpenNLP 确实为使用 tokenizePos() 的标记器提供了 UIMA 注释器。但是,如果你只是想标记一个字符串,UIMA 绝对是矫枉过正......

      【讨论】:

        【解决方案3】:

        您可以将 OpenNLP Tokenizer 与 UIMA 一起使用。 UIMA 中的令牌注释器将为令牌创建一个类型,其中将包括令牌的开始和结束索引。您还可以将词性标签、词干、引理等功能附加到令牌。 UIMA 有 Java 和 C++ API。

        【讨论】:

          猜你喜欢
          • 2019-12-18
          • 2017-06-21
          • 1970-01-01
          • 2014-08-10
          • 1970-01-01
          • 1970-01-01
          • 2021-12-11
          • 2015-03-20
          • 2012-01-01
          相关资源
          最近更新 更多