现有的C++自然语言处理API是什么?

16

是否存在现成的C++ NLP API?我找到的最接近的是CLucene,这是Lucene的一个移植版本。但是,它似乎有点过时,文档也远远不完整。

理想情况下,这些API将允许进行标记化、词干提取和词性标注。


可能是c/c++ NLP库的重复问题。 - alvas
1
@alvas 这个问题已经四年了,而且也没有一个足够的答案,因为它聚焦在词性标注器上。 - merours
我认为OP指的是PoS词性。 - winux
6个回答

11

Freeling是用C++编写的,虽然大多数人只使用它们的二进制文件来运行工具:http://devel.cpl.upc.edu/freeling/downloads?order=time&desc=1

尝试使用DyNet等工具,它是一个通用的神经网络框架,但大部分过程都集中在NLP领域,因为维护者是NLP社区的创作者。

或者尝试Marian-NMT,它专门设计用于序列到序列模型机器翻译,但许多NLP任务也可以结构化为序列到序列任务。


已过时

也许你可以尝试Ellogon http://www.ellogon.org/,他们支持GUI并且也有用于NLP的C/C++ API。


两个都看起来很有趣,我会仔细看看。 - merours
两者似乎都是已经停止维护的项目。Ellogon肯定是。 - Lothar

6

如果您取消对C++的限制,您将获得完美的NLTK(使用Python编写)。

剩下的工作就是在Python和C++之间进行接口交互。


1
我们知道 NLTK,但是使用 Cython/C/C++ 移植会显著增加对大规模真实数据的处理时间。 - alvas
2
NLTK是一个玩具和教育系统(它的设计就是如此),而不是实际解决方案。 - Lothar

3
也许你可以使用Weka-C ++。它是非常流行的Weka机器学习和数据挖掘库(包括NLP),从Java移植到C ++。
Weka支持标记化词干提取, 你可能需要训练一个用于PoS标记的分类器。
我只使用过Java版本的Weka,所以对这个版本不能提供更多细节。

2
虽然Weka本身很不错,但是Weka C++似乎是一个已经停滞的项目(最后一次提交是在2007年)。 - merours

3

Apache Lucy可以帮助你解决部分问题。它正在积极开发中。


1
这是一个不错的开始,但由于它是一个搜索引擎,有很多我不需要的功能。此外,自然语言处理能力有些有限。不过我会继续观察它。 - merours

1
这个项目提供免费(即使是商业用途)的最先进的信息提取工具。当前版本包括用于执行命名实体提取和二元关系检测的工具,以及用于训练自定义提取器和关系检测器的工具。
MITIE建立在高性能机器学习库dlib之上,利用了多种最先进的技术,包括使用分布式词嵌入和结构支持向量机[3]。 MITIE提供了几个预训练模型,为英语和西班牙语提供不同程度的支持,使用各种语言资源进行培训(例如CoNLL 2003、ACE、Wikipedia、Freebase和Gigaword)。核心MITIE软件是用C++编写的,但是对于其他几种软件语言,包括Python、R、Java、C和MATLAB的绑定,可以让用户快速将MITIE集成到自己的应用程序中。

https://github.com/mit-nlp/MITIE


1

在CMU,André Martins开发了TurboParser,同时还有一个Python包装器。此外,还有一个在线演示


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接