Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/321.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 使用Stanford NLP的单词标记化_Java_Nlp_Stanford Nlp - Fatal编程技术网

Java 使用Stanford NLP的单词标记化

Java 使用Stanford NLP的单词标记化,java,nlp,stanford-nlp,Java,Nlp,Stanford Nlp,我正在使用斯坦福NLP Java库。我发现它在处理词干、引理化和将句子标记成单词时最准确 我的要求是把单词标记化,比如“leatherjacket”可以正确地解释为“leatherjacket”。在这一级别,我不处理拼写更正问题,但请告诉我这是否可行。这是一个复杂的问题,因为您假设您是在单词上标记,而不是在标记/原始语言单位上标记。Wikipedia将标记化描述为: 在词法分析中,标记化是打断流的过程 将文本分解为单词、短语、符号或其他有意义的元素 称为代币 PTBTokenizer(CoreN

我正在使用斯坦福NLP Java库。我发现它在处理词干、引理化和将句子标记成单词时最准确


我的要求是把单词标记化,比如“leatherjacket”可以正确地解释为“leatherjacket”。在这一级别,我不处理拼写更正问题,但请告诉我这是否可行。

这是一个复杂的问题,因为您假设您是在单词上标记,而不是在标记/原始语言单位上标记。Wikipedia将标记化描述为:

在词法分析中,标记化是打断流的过程 将文本分解为单词、短语、符号或其他有意义的元素 称为代币

PTBTokenizer(CoreNLPs主标记器)大致拆分单词,而不是实际单词。因此,下面的句子将产生6个标记

我有一件很酷的皮夹克

['I'、'have'、'a'、'really'、'cool'、'leatherjack']

理解到标记化并不能像您所想的那样安静地工作,我可以推荐一个解决方案作为您的标记化过程的先驱。在谷歌,这部臭名昭著的作品的合著者讨论了他的玩具(概率/辨别)算法,该算法达到了80%-90%的准确率。但已移植到其他语言,可能适合您的需要。RaelGC用Java实现了一个42行的解决方案,这在很多方面都令人印象深刻


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

我不确定我们现在有什么可以做到这一点的。但我个人以前也曾处理过这个问题,将这样一个组件添加到StanfordCorenlp中可能会很有趣

我的简单方法基本上是:

  • 构建一个合理频繁的单词词典(来自维基百科?)(你希望“leather”和“jacket”在词典中,而不是“leatherjacket”)

  • 对于给定的单词,生成拆分候选词,每个单词的最小大小(您希望将“leatherjacket”拆分为“leather”和“jacket”,但不希望将“非政治”拆分为“a”和“political”)

  • 计算你的单词和二字格的比率

    (皮夹克的出现)/(皮夹克的出现)

    如果此比率超过某个阈值,则将“皮夹克”替换为“皮夹克”

  • 我生成了一长串拼凑在一起的示例,并根据训练数据调整了阈值


  • 谢谢你的建议!目前我正在使用PTBTokenizer,正如您所提到的。你分享的链接很值得一读。我正在尝试进一步挖掘关于编写我自己的分词器或单词标记器和拼写更正器的信息。谢谢您的回复。我试图找到一种算法,它以最小的复杂性为我提供所需的功能,并了解遗留动态规划(O(n^2))。我想试一试。再次感谢你提到这个把戏。