自然语言处理 开源_12种用于自然语言处理的开源工具
自然语言处理 开源
在过去的几年中,自然语言处理(NLP)是为所有渗透到我们生活中的聊天机器人,语音助手,预测文本和其他语音/文本应用程序提供支持的技术。 那里有各种各样的开源NLP工具,因此我决定进行调查,以帮助您计划下一个基于语音或文本的应用程序。
在本次审查中,尽管我并不熟悉所有工具,但我还是专注于使用熟悉的语言的工具。 (无论如何,我找不到大量我不熟悉的语言的工具。)也就是说,出于各种原因,我排除了我所熟悉的三种语言的工具。
我没有包括的最明显的语言可能是R,但是我发现的大多数库都没有超过一年的更新时间。 这并不总是意味着它们维护得不好,但是我认为他们应该更频繁地获取更新,以便与同一领域的其他工具竞争。 我还选择了最可能用于生产场景(而不是学术界和研究)的语言和工具,并且我最常使用R作为研究和发现工具。
我也惊讶地发现Scala库停滞了。 自从我上次使用Scala以来已经过去了两年,那时它非常流行。 从那时起,大多数库都没有更新过,或者只有少数更新。
最后,我排除了C ++。 这主要是因为我上次使用C ++编写已经有很多年了,而我工作的组织还没有将C ++用于NLP或任何数据科学工作。
Python工具
自然语言工具包(NLTK)
很容易争辩说, 自然语言工具包(NLTK)是我调查过的功能最全的工具。 它几乎实现了您需要的NLP的任何组件,例如分类,标记化,词干,加标签,解析和语义推理。 通常,每种实现都有一个以上的实现,因此您可以选择要使用的确切算法或方法。 它还支持多种语言。 但是,它以字符串的形式表示所有数据,这对于简单的结构来说是很好的选择,但很难使用某些高级功能。 文档也很密集,但是有很多,还有一本好书 。 与其他工具相比,该库也有些慢。 总体而言,对于需要特定算法组合的实验,探索和应用程序,这是一个很好的工具包。
空间
SpaCy可能是NLTK的主要竞争对手。 在大多数情况下,它速度更快,但是每个NLP组件只有一个实现。 而且,它将所有内容都表示为对象而不是字符串,从而简化了构建应用程序的界面。 这也有助于它与许多其他框架和数据科学工具集成,因此,一旦对文本数据有了更好的了解,您就可以做更多的事情。 但是,SpaCy不支持NLTK一样多的语言。 它确实具有一个简单的界面,具有简化的选择集和完善的文档,以及用于语言处理和分析的各个组成部分的多个神经模型。 总体而言,对于需要在生产中表现出色且不需要特定算法的新应用程序,这是一个很好的工具。
TextBlob
TextBlob是NLTK的扩展。 您可以通过TextBlob以简化的方式访问NLTK的许多功能,并且TextBlob还包括Pattern库中的功能。 如果您只是刚入门,那么这可能是学习时使用的好工具,并且可以在生产中用于不需要过分性能的应用程序。 总体而言,TextBlob在各处使用,非常适合小型项目。
文字性
该工具可能是我使用过的所有库中最好的名称。 在强调“ ex”并绘制“ cy”的同时,多次说“ Textacy ”。 不仅很棒,而且还是个很棒的工具。 它使用SpaCy来实现其核心NLP功能,但是在处理之前和之后都会处理很多工作。 如果您打算使用SpaCy,则最好使用Textacy,这样您就可以轻松引入许多类型的数据,而不必编写额外的帮助程序代码。
PyTorch-NLP
PyTorch-NLP已经推出了仅一年多了,但它已经赢得了一个巨大的社区。 它是快速制作原型的好工具。 它还经常通过最新研究进行更新,顶级公司和研究人员还发布了许多其他工具来执行各种惊人的处理,例如图像转换。 总体而言,PyTorch面向研究人员,但它也可以用于原型和具有最先进算法的初始生产工作负载。 在其之上创建的库也可能值得研究。
节点工具
改写
Retext是统一的集体的一部分。 统一是一个界面,允许多个工具和插件有效地集成和协同工作。 Retext是统一工具使用的三种语法之一。 其他的是Markdown的Remark和HTML的Rehype。 这是一个非常有趣的主意,我很高兴看到这个社区的发展。 Retext并未公开很多底层技术,而是使用插件来实现NLP可能要达到的结果。 您可以轻松地执行诸如检查拼写,修复字体,检测情绪或使用简单插件确保文本可读性之类的操作。 总体而言,如果您只需要完成某项工作而不必了解基础流程中的所有内容,那么这就是一个出色的工具和社区。
妥协
妥协当然不是最复杂的工具。 如果您正在寻找最先进的算法或最完整的系统,那么这可能不是适合您的工具。 但是,如果您需要性能强大,功能广泛且可以在客户端运行的工具,则应了解一下Compromise。 总的来说,它的名字是准确的,因为创建者通过专注于具有更特定功能的小包装而折衷了功能和准确性,这些小包装得益于用户对使用周围环境的更多了解。
自然
Natural包含您可能在常规NLP库中期望的大多数功能。 它主要侧重于英语,但是已经贡献了其他一些语言,并且该社区欢迎其他贡献。 它支持标记化,词干标注,分类,语音,词频-反向文档频率,WordNet,字符串相似度和一些变形。 它可能与NLTK最具有可比性,因为它试图将所有内容都包含在一个包中,但是它更易于使用,并且不一定专注于研究。 总的来说,这是一个相当完整的库,但是它仍在积极开发中,可能需要有关基础实现的其他知识才能完全有效。
Nlp.js
Nlp.js建立在其他几个NLP库的顶部,包括Franc和Brain.js。 它为NLP的许多组件提供了一个很好的界面,例如分类,情感分析,词干,命名实体识别和自然语言生成。 它还支持多种语言,如果您打算使用英语以外的其他语言,这将很有帮助。 总的来说,这是一个很棒的通用工具,并且简化了与其他几个很棒工具的接口。 在您需要更强大或更灵活的功能之前,这可能会使您在应用程序中花很长时间。
Java工具
OpenNLP
OpenNLP由Apache Foundation托管,因此很容易将其集成到其他Apache项目中,例如Apache Flink,Apache NiFi和Apache Spark。 它是一个通用的NLP工具,涵盖了NLP的所有常见处理组件,可以从命令行或在应用程序中用作库使用。 它还广泛支持多种语言。 总体而言,OpenNLP是一个功能强大的工具,具有许多功能,并且如果您使用Java,则可以应付生产工作负载。
斯坦福大学
Stanford CoreNLP是一组工具,可提供统计NLP,深度学习NLP和基于规则的NLP功能。 已经创建了许多其他编程语言绑定,因此可以在Java之外使用此工具。 它是由精英研究机构创建的非常强大的工具,但对于生产工作负载而言,它可能并不是最好的选择。 该工具是双重许可的,具有用于商业目的的特殊许可。 总体而言,这是用于研究和实验的出色工具,但可能会增加生产系统的成本。 与Java版本相比,Python的实现也可能使许多读者感兴趣。 同样,斯坦福大学教授Coursera教授最好的机器学习课程之一。 连同其他大量资源一起检查一下 。
CogCompNLP
由伊利诺伊大学开发的CogCompNLP也具有具有类似功能的Python库。 它可用于在本地或远程系统上处理文本,这可以减轻本地设备的负担。 它提供了处理功能,例如标记化,词性标记,分块,命名实体标记,词形化,依赖性和选区解析以及语义角色标记。 总体而言,这是一个很好的研究工具,并且您可以探索很多组件。 我不确定它是否适合生产工作负载,但是如果您打算使用Java,则值得尝试。
您最喜欢NLP的开源工具和库是什么? 请分享评论-特别是如果有我未包括在内的评论。
翻译自: https://opensource.com/article/19/3/natural-language-processing-tools
自然语言处理 开源
更多推荐
所有评论(0)