使用斯坦福NLP进行单词标记化

时间:2015-08-28 10:47:18

标签: java nlp stanford-nlp

我正在使用Stanford-NLP Java库。我发现它在处理句子的词干化,词形还原和标记化为单词时最准确。

我的要求也是对单词进行标记化,例如“leatherjacket”可以正确解释并吐出“皮夹克”。在这个级别,我不处理拼写纠正,但如果可能,请告诉我。

2 个答案:

答案 0 :(得分:1)

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

  

在词法分析中,标记化是打破流的过程   文本分为单词,短语,符号或其他有意义的元素   叫做代币。

PTBTokenizer(CoreNLP主要令牌化器)在上粗略地分词,而不是实际的词。因此,以下句子将产生6个令牌。

  

我有一件非常酷的皮夹克

     

['我','有'' a','真的','很酷',& #39; leatherjacket']

了解标记化并不安静,您可以推荐解决方案作为标记化过程的前提。 Peter Norvig在谷歌与臭名昭着的Artifical Intelligence: A Modern approach共同讨论了他的玩具(概率/判别)算法,该算法达到了80% - 90%的准确率。 implementation he published is in Python,但已被移植到其他语言,可能适合您的需要。 Rael GC在42行中实现了Java解决方案,在his website上令人印象深刻。

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

答案 1 :(得分:0)

我不确定我们现在有什么可以做的。但我个人之前已就此问题进行过研究,将这样的组件添加到Stanford CoreNLP可能会很有趣。

我的简单方法基本上是:

  1. 构建一个合理频繁的词典(来自维基百科?)(你想要“皮革”和“夹克”在词典中,但不是“皮革夹克”)

  2. 对于给定的单词,生成分割候选者,每个单词的大小最小(你想将“leatherjacket”分成“皮革”和“夹克”,你不想将“非政治”分成“一个”和“政治”)

  3. 计算你的粉碎单词和二元宝石的比例

    (出现“皮革”“夹克”)/(出现“皮革夹克”)

    如果此比率超过某个阈值,请将“leatherjacket”替换为“leather”“jacket”

  4. 我生成了一长串粉碎的示例,并根据我的训练数据调整了我的阈值。