2015-08-28 174 views
1

我正在使用Stanford-NLP Java库。我发现它在处理句子的词干化,词形化和标记化成词时最准确。使用斯坦福大学自然语言处理单词Tokenization

我的要求是标记化词语,比如“皮夹克”可以被正确解释为“皮夹克”。在这个级别上,我没有处理拼写纠正,但请让我知道这是否可能。

回答

1

这是一个复杂的问题,因为你假设你是在词语上标记化,而不是在令牌/原始语言单位上。维基百科描述标记化如:

在词法分析,标记化是打破文本流 成单词,短语,符号,或其他有意义的元件 称为令牌的过程。

的PTBTokenizer(CoreNLPs初级标记生成器)上分割大致,而不是实际的话。因此,下面的句子将产生6个令牌。

我有一个非常酷的leatherjacket

[ '我', '有', 'A', '真', '酷', 'leatherjacket']

应该理解的是符号化如果你不这么认为,我可以推荐一个解决方案作为你的标记化过程的先驱。谷歌联合声名狼借的Artifical Intelligence: A Modern approach讨论了他的玩具(概率/判别)算法,该算法达到了80%至90%的准确度。 implementation he published is in Python,但已被移植到其他可能适合您需要的语言。 Rael GC在42行中实现了Java解决方案,这在his website上非常令人印象深刻。

或者,您可以创建自己的标记器,它更进一步,是某种混合拼写校正器/标记器。然而,这将是荒谬的困难/乏味,并且由于新颖性而值得出版。但简短的回答,这里没有金色的子弹。

+0

感谢您的建议!目前我正在使用PTBTokenizer,它的工作原理与您所提到的一样。您分享的链接很好阅读。我想进一步挖掘一下我自己的单词分词器或单词标记器和拼写纠正器。 – tom

0

我不确定我们现在有什么事情可以做。但是我个人曾经在这个问题上做过工作,将这样一个组件添加到斯坦福CoreNLP可能会很有趣。

我简单的方法基本上是:

  1. 构建的合理频繁的字的字典(维基百科?)(你希望“皮革”和“夹克”在字典中,但不是“皮夹克”)

  2. 对于给定的单词,生成拆分候选,每个单词的最小大小(你想拆分“ leatherjacket”到‘皮’和‘外套’,你不想拆‘非政治化’到‘一’和‘政治’)

  3. 计算你一起捣烂字和比例两字

    (发生“皮革”“夹克”)/(发生“皮夹克”)

    如果这个比例超过某个阈值, “leatherjacket”与“皮革”“外套”的地方

  4. 我生成了一个砸在一起的例子的长长的清单,并根据我的训练数据调整了我的门槛。

+0

感谢您的回复。我试图找到一种算法,以最小的复杂度为我提供所需的功能,并了解了遗留动态编程(O(n^2))。我想给它一个镜头。再次感谢提到的技巧。 – tom