我对这两个软件包做了一些比较,不确定应该朝哪个方向发展。我想简要介绍的是:
据我所知,OpenNLP和Stanford CoreNLP公开了非常相似的功能。然而,斯坦福大学的CoreNLP看起来有更多的活动,而OpenNLP在过去六个月里只有几次提交。
根据我所看到的,OpenNLP似乎更容易训练新的模型,仅仅因为这个原因可能更具吸引力。然而,我的问题是,其他人会以什么作为向Java应用程序添加NLP功能的基础?我最担心的是OpenNLP是“刚刚成熟”还是半废弃。
这取决于你的目的和需要,我对这两个方面的了解是OpenNLP
是开源的,CoreNLP
当然不是。
但是如果你看一下准确度水平,斯坦福CoreNLP的检测比OpenNLP的检测更准确。最近,我对词性(POS)
标记和yes进行了比较,这是任何NLP任务中最重要的部分,因此在我的分析中,获胜者是CoreNLP
。
与OpenNLP
相比,CoreNLP
也有更准确的结果。
因此,如果您刚刚开始,您可以稍后使用OpenNLP
,如果需要,您可以迁移到Stanford CoreNLP
。
这里有点晚了,但我最近看OpenNLP只是基于斯坦福是GPL许可的事实——如果这对你的项目没问题,那么斯坦福通常被称为NLP的基准/最先进的。
也就是说,预训练模型的性能将取决于您的目标文本,因为它非常特定于领域。如果您的目标文本与模型训练所针对的数据相似,那么您应该会得到不错的结果,但如果不是,那么您将不得不自己训练模型,这将取决于训练数据。
OpenNlp的一个优点是它的可扩展性很强,编写时便于与其他库一起使用,并且有一个很好的API用于集成——培训非常简单(一旦你有了培训数据)与OpenNlp(我在这里写过它——生成的数据集非常糟糕,我能够得到很好的结果),而且它是非常可配置的——你可以很容易地配置训练周围的所有参数,你可以使用一系列算法(感知器、最大熵,在快照版本中,他们添加了朴素贝叶斯)
如果您发现确实需要自己训练模型,我会考虑试用OpenNlp,看看它的性能如何,只是为了进行比较,就像微调可以得到相当不错的结果一样。
我是CoreNLP的撰稿人,所以这是一个有偏见的答案。但是,在我看来,关于你的三个标准:
>
性别识别。我认为这两个工具在这方面的记录都很糟糕。OpenNLP似乎有一个GenderModel类;CoreNLP有一个性别注释器。
培训API。我怀疑OpenNLP培训API更容易用于非现成的培训。但是,如果你想做的只是,例如,从CoNLL文件中训练模型,那么这两种方法都应该很简单。与我尝试过的其他工具相比,CoreNLP的训练速度往往更快,但我还没有正式对其进行基准测试,所以对此持保留态度。
问题内容: 我正在努力让我了解Stanford CoreNLP API。我希望得到一个简单的句子,使用以下代码将其标记化: 这是从Stanford NLP网站本身上摘下来的,所以我希望它能开箱即用。遗憾的是没有,因为它在以下位置给了我NullPointerException: 问题答案: 您从Stanford NLP网站上获得的代码将对text变量执行所有注释。为了执行特定的注释,您必须相应地更改
我正在注释和分析一系列文本文件。 pipeline.annotate方法每次读取文件时都会变得越来越慢。最终,我得到了一个OutOfMemoryError。 管道初始化一次: 然后,我使用相同的管道实例处理每个文件(如SO和斯坦福大学在其他地方推荐的)。 明确地说,我希望问题出在我的配置上。但是,我确信失速和内存问题发生在pipeline.annotate(file)方法上。 在处理每个文件后,我
我在使用Stanford pipeline(CoreNLP的最后一个版本)解析BNC时遇到了一个问题。 解析器只是停留在这个句子中,它甚至不会抛出错误。句子在web界面中得到正确的解析。 我尝试了标记器的选项,但没有结果。 我添加了我正在使用的命令行:java[...]edu.stanford.nlp.pipeline.stanfordCorenlp-注释器tokenize,ssplit,pos,
我假设我试图将输出转换成的格式是旧版本的CorenLP的默认输出。有什么方法可以得到所需格式的输出吗?
试图运行示例,但我一直无法打开“english-left3words-distsim.tagger”文件可能丢失。文件没有丢失,目录指向模型jar文件的位置,路径:edu\stanford\nlp\模型\pos-tagger\english-left3word在jar文件中是正确的。 我使用3.7.0,安装从nuget在视觉工作室2015. 代码如下: 我确实在Stack上看到了一个类似的问题,他
这是意料之中的行为吗?我在前面运行完整的管道吗?