自然语言处理(NLP),为所有聊天机器人,语音助理,预测文本以及其他渗透到我们生活中的语音/文本应用提供支持的技术,在过去几年中已经有了长足的发展。本文为大家推荐一些开源NLP工具,帮助大家规划基于语音或文本的应用程序。
一、Python工具
1. 自然语言工具包(NLTK)
自然语言工具包(NLTK)是最全功能的工具。它几乎实现了你需要的任何NLP组件,如分类,标记化,解析和语义推理。并且每种方法通常都有多个实现,因此你可以选择想要使用的确切算法或方法。它还支持多种语言。但是它以字符串的形式表示所有数据,这对于简单的架构很好,但是很难使用某些高级功能。与其他工具相比,它的发展点慢。总的来说,这是一个很好的工具包,适用于需要特定算法组合的实验,探索和应用程序。
2. SpaCy
SpaCy是NLTK的主要竞争对手。在大多数情况下它速度更快,但每个NLP组件只有一个实现。此外,它将所有内容表示为对象而不是字符串,这简化了构建应用程序的界面。这也有助于它与许多其他框架和数据科学工具集成,因此你可以在更好地理解文本数据后执行更多操作。但是,SpaCy不支持与NLTK一样多的语言。它确实有一个简单的界面,一组简化的选择和优秀的文档,以及语言处理和分析的各种组件的多个神经模型。总的来说,对于需要在生产中具有高性能并且不需要特定算法的新应用程序来说,这是一个很好的工具。
3. TextBlob
TextBlob是NLTK的扩展。可以通过TextBlob以简化方式访问许多NLTK函数,TextBlob还包含Pattern库中的功能。如果你刚刚开始,这可能是学习时使用的好工具,它可以在生产中用于不需要过度执行的应用程序。总的来说,TextBlob在所有地方都使用,非常适合小型项目。
4. Textacy
Textacy也是一个很棒的工具。它使用SpaCy作为其核心NLP功能,但它处理了处理前后的大量工作。如果你打算使用SpaCy,也可以使用Textacy,这样就可以轻松地引入许多类型的数据,而无需编写额外的帮助代码。
5. PyTorch-NLP
PyTorch-NLP已经推出了一段时间了,但它已经有了一个庞大的社区。它是快速原型制作的***工具。它也经常通过***的研究进行更新,***公司和研究人员已经发布了许多其他工具来进行各种惊人的处理,例如图像变换。总体而言,PyTorch针对的是研究人员,但它也可以用于原型和初始生产工作负载,并提供***进的算法。在它之上创建的库也可能值得研究。
二、Node工具
6. Retext
Retext是unified collective的一部分。Unified是一个允许多个工具和插件有效集成和协同工作的界面。Retext是统一工具使用的三种语法之一;其他是Markmark的Remark和HTML的Rehype。Retext没有公开它的许多底层技术,而是使用插件来实现你可能用NLP瞄准的结果。这很容易做一些事情,比如检查拼写,修复排版,检测情绪,或确保简单的插件可以读取文本。总的来说,如果你只需要完成某些工作而无需了解底层流程中的所有内容,那么这是一个出色的工具和社区。
7. Compromise
Compromise肯定不是最复杂的工具。如果你正在寻找***进的算法或最完整的系统,这可能不适合你。但是,如果想要一个具有广泛功能并且可以在客户端运行的高性能工具,那么你应该看看Compromise。
8. Natural
Natural包含你在一般NLP库中可能期望的大多数功能。它主要侧重于英语,但其他一些语言已经提供,社区对其他贡献持开放态度。它支持标记化,词干化,分类,语音,术语频率——逆文档频率,WordNet,字符串相似性和一些变形。它可能与NLTK***可比性,因为它试图将所有内容都包含在一个包中,但它更易于使用,并且不一定集中在研究上。总的来说,这是一个非常完整的库,但它仍处于积极开发阶段,可能需要额外的底层实现知识才能完全有效。
9. Nlp.js
Nlp.js建立在其他几个NLP库之上,包括Franc和Brain.js。它为NLP的许多组件提供了一个很好的界面,如分类,情感分析,词干,命名实体识别和自然语言生成。它还支持多种语言,如果你计划使用非英语以外的其他语言,这将非常有用。总的来说,这是一个很棒的通用工具,它简化了与其他几个工具的接口。在你需要更强大或更灵活的功能之前,这可能会在你的应用程序中长期使用。
三、Java工具
10. OpenNLP
OpenNLP由Apache Foundation托管,因此很容易将其集成到其他Apache项目中,如Apache Flink,Apache NiFi和Apache Spark。它是一个通用的NLP工具,涵盖了NLP的所有常见处理组件,可以从命令行或应用程序中用作库。它还广泛支持多种语言。总体而言,OpenNLP是一个功能强大的工具,具有许多功能,并且如果你使用Java,则可以为生产工作负载做好准备。
11. StanfordNLP
Stanford CoreNLP是一组工具,提供统计NLP,深度学习NLP和基于规则的NLP功能。已经创建了许多其他编程语言绑定,因此可以在Java之外使用此工具。它是一个由精英研究机构创建的非常强大的工具,但它可能不是生产工作负载的***选择。此工具具有双重许可,具有商业用途的特殊许可。总的来说,这是一个很好的研究和实验工具,但它可能会在生产系统中产生额外的成本。
12. CogCompNLP
由伊利诺伊大学开发的CogCompNLP也有一个具有类似功能的Python库。它可以用于本地或远程系统上的文本处理,这可以消除本地设备的巨大负担。它提供处理功能,例如标记化,词性标记,分块,命名实体标记,词形还原,依赖和选区分析以及语义角色标记。总的来说,这是一个很好的研究工具,它有很多你可以探索的组件。我不确定它对于生产工作负载是否很好,但如果你打算使用Java,那么值得尝试。