12 种天然语言处理的开源工具

https://linux.cn/article-11927-1.htmlhtml


让咱们看看能够用在你本身的 NLP 应用中的十几个工具吧。node

在过去的几年里,天然语言处理(NLP)推进了聊天机器人、语音助手、文本预测等这些渗透到咱们的平常生活中的语音或文本应用程技术的发展。目前有着各类各样开源的 NLP 工具,因此我决定调查一下当前开源的 NLP 工具来帮助你制定开发下一个基于语音或文本的应用程序的计划。linux

尽管我并不熟悉全部工具,但我将从我所熟悉的编程语言出发来介绍这些工具(对于我不熟悉的语言,我没法找到大量的工具)。也就是说,出于各类缘由,我排除了三种我熟悉的语言以外的工具。git

R 语言多是没有被包含在内的最重要的语言,由于我发现的大多数库都有一年多没有更新了。这并不必定意味着它们没有获得很好的维护,但我认为它们应该获得更多的更新,以便和同一领域的其余工具竞争。我还选择了最有可能用在生产场景中的语言和工具(而不是在学术界和研究中使用),而我主要是使用 R 做为研究和发现工具。github

我也惊讶地发现 Scala 的不少库都没有更新了。我上次使用 Scala 已通过去了两年了,当时它很是流行。可是大多数库从那个时候就再没有更新过,或者只有少数一些有更新。算法

最后,我排除了 C++。 这主要是由于我上次使用 C++ 编写程序已经有不少年了,而我所工做的组织尚未将 C++ 用于 NLP 或任何数据科学方面的工做。apache

Python 工具

天然语言工具包(NLTK)

毋庸置疑,天然语言工具包(NLTK)是我调研过的全部工具中功能最完善的一个。它几乎实现了天然语言处理中多数功能组件,好比分类、令牌化、词干化、标注、分词和语义推理。每个都有多种不一样的实现方式,因此你能够选择具体的算法和方式。同时,它也支持不一样的语言。然而,它以字符串的形式表示全部的数据,对于一些简单的数据结构来讲可能很方便,可是若是要使用一些高级的功能来讲就可能有点困难。它的使用文档有点复杂,但也有不少其余人编写的使用文档,好比这本很棒的书。和其余的工具比起来,这个工具库的运行速度有点慢。但总的来讲,这个工具包很是不错,能够用于须要具体算法组合的实验、探索和实际应用当中。npm

SpaCy

SpaCy 多是 NLTK 的主要竞争者。在大多数状况下都比 NLTK 的速度更快,可是 SpaCy 的每一个天然语言处理的功能组件只有一个实现。SpaCy 把全部的东西都表示为一个对象而不是字符串,从而简化了应用构建接口。这也方便它与多种框架和数据科学工具的集成,使得你更容易理解你的文本数据。然而,SpaCy 不像 NLTK 那样支持多种语言。它确实接口简单,具备简化的选项集和完备的文档,以及用于语言处理和分析各类组件的多种神经网络模型。总的来讲,对于须要在生产中表现出色且不须要特定算法的新应用程序,这是一个很不错的工具。编程

TextBlob

TextBlob 是 NLTK 的一个扩展库。你能够经过 TextBlob 用一种更简单的方式来使用 NLTK 的功能,TextBlob 也包括了 Pattern 库中的功能。若是你刚刚开始学习,这将会是一个不错的工具,能够用于对性能要求不过高的生产环境的应用。整体来讲,TextBlob 适用于任何场景,可是对小型项目尤佳。小程序

Textacy

这个工具是我用过的名字最好听的。先重读“ex”再带出“cy”,多读“Textacy”几回试试。它不只仅是名字读起来好,同时它自己也是一个很不错的工具。它使用 SpaCy 做为它天然语言处理核心功能,但它在处理过程的先后作了不少工做。若是你想要使用 SpaCy,那么最好使用 Textacy,从而不用去编写额外的附加代码就能够处理不一样种类的数据。

PyTorch-NLP

PyTorch-NLP 才出现短短的一年,但它已经有一个庞大的社区了。它适用于快速原型开发。当出现了最新的研究,或大公司或者研究人员推出了完成新奇的处理任务的其余工具时,好比图像转换,它就会被更新。整体来讲,PyTorch 的目标用户是研究人员,但它也能用于原型开发,或使用最早进算法的初始生产载荷中。基于此基础上的建立的库也是值得研究的。

Node.js 工具

Retext

RetextUnified 集合的一部分。Unified 是一个接口,可以集成不一样的工具和插件以便它们可以高效的工做。Retext 是 Unified 工具中使用的三种语法之一,另外的两个分别是用于 Markdown 的 Remark 和用于 HTML 的 Rehype。这是一个很是有趣的想法,我很高兴看到这个社区的发展。Retext 没有涉及不少的底层技术,更多的是使用插件去完成你在 NLP 任务中想要作的事情。拼写检查、字形修复、情绪检测和加强可读性均可以用简单的插件来完成。整体来讲,若是你不想了解底层处理技术又想完成你的任务的话,这个工具和社区是一个不错的选择。

Compromise

Compromise 显然不是最复杂的工具,若是你正在找拥有最早进的算法和最完备的系统的话,它可能不适合你。然而,若是你想要一个性能好、功能普遍、还能在客户端运行的工具的话,Compromise 值得一试。整体来讲,它的名字(“折中”)是准确的,由于做者更关注更具体功能的小软件包,而在功能性和准确性上有所折中,这些小软件包得益于用户对使用环境的理解。

Natural

Natural 包含了常规天然语言处理库所具备的大多数功能。它主要是处理英文文本,但也包括一些其它语言,它的社区也欢迎支持其它的语言。它可以进行令牌化、词干化、分类、语音处理、词频-逆文档频率计算(TF-IDF)、WordNet、字符类似度计算和一些变换。它和 NLTK 有的一比,由于它想要把全部东西都包含在一个包里头,但它更易于使用,并且不必定专一于研究。总的来讲,这是一个很是完整的库,目前仍在活跃开发中,但可能须要对底层实现有更多的了解才能彻底发挥效力。

Nlp.js

Nlp.js 创建在其余几个 NLP 库之上,包括 Franc 和 Brain.js。它为许多 NLP 组件提供了一个很好的接口,好比分类、情感分析、词干化、命名实体识别和天然语言生成。它也支持一些其它语言,在你处理英语以外的语言时能提供一些帮助。总之,它是一个不错的通用工具,而且提供了调用其余工具的简化接口。在你须要更强大或更灵活的工具以前,这个工具可能会在你的应用程序中用上很长一段时间。

Java 工具

OpenNLP

OpenNLP 是由 Apache 基金会管理的,因此它能够很方便地集成到其余 Apache 项目中,好比 Apache Flink、Apache NiFi 和 Apache Spark。这是一个通用的 NLP 工具,包含了全部 NLP 组件中的通用功能,能够经过命令行或者以包的形式导入到应用中来使用它。它也支持不少种语言。OpenNLP 是一个很高效的工具,包含了不少特性,若是你用 Java 开发生产环境产品的话,它是个很好的选择。

Stanford CoreNLP

Stanford CoreNLP 是一个工具集,提供了统计 NLP、深度学习 NLP 和基于规则的 NLP 功能。这个工具也有许多其余编程语言的版本,因此能够脱离 Java 来使用。它是由高水平的研究机构建立的一个高效的工具,但在生产环境中可能不是最好的。此工具采用双许可证,具备能够用于商业目的的特定许可证。总之,在研究和实验中它是一个很棒的工具,但在生产系统中可能会带来一些额外的成本。比起 Java 版原本说,读者可能对它的 Python 版本更感兴趣。一样,在 Coursera 上最好的机器学习课程之一是斯坦福教授提供的,点此访问其余不错的资源。

CogCompNLP

CogCompNLP 由伊利诺斯大学开发的一个工具,它也有一个类似功能的 Python 版本。它能够用于处理文本,包括本地处理和远程处理,可以极大地缓解你本地设备的压力。它提供了不少处理功能,好比令牌化、词性标注、断句、命名实体标注、词型还原、依存分析和语义角色标注。它是一个很好的研究工具,你能够本身探索它的不一样功能。我不肯定它是否适合生产环境,但若是你使用 Java 的话,它值得一试。


你最喜欢的开源 NLP 工具和库是什么?请在评论区分享文中没有提到的工具。


via: https://opensource.com/article/19/3/natural-language-processing-tools

做者:Dan Barker 选题:lujun9972 译者:zxp 校对:wxy

本文由 LCTT 原创编译,Linux中国 荣誉推出

订阅“Linux 中国”官方小程序来查看

相关文章
相关标签/搜索