Python系技术生态中有很多的NLP资源,该如何选择呢?本文将介绍用于分析文本的最佳Python库以及如何使用它们。
![75b4bd2c673ca68e7482e31efd8aeb1f.png](https://i-blog.csdnimg.cn/blog_migrate/265fd4c0df26d308d3ba40976938f38a.jpeg)
0.导引
自然语言处理,或简称为NLP,最好描述为“用于处理语音和文本的人工智能”。语音命令、语音和文本翻译、情感分析、文本总结以及许多其他语言应用和分析、自然语言处理等背后的魔力,已经通过深度学习得到了显著改善。
Python语言为包括NLP在内的各种机器学习提供了一个方便的前端。事实上,在Python生态系统中,正是由于NLP丰富的资源而带来了一个尴尬的选择。在本文中,我们将探讨python可用的每个NLP库——它们的用例场景、它们的优点、它们的缺点以及它们的普遍流行程度,为大数据工程师、程序员和产品研发相关人员提供相关对比参考。
请注意,这些库中的某些库提供了其他库公开的相同功能的高级版本,从而使该功能更容易使用,但却牺牲了某些精度或性能。您需要选择一个既适合您的专业水平又适合项目性质的库。
另外,国内的一些大厂比如阿里、百度、讯飞等都有不错的自然语言处理产品,并提供API服务,有兴趣的可以理解一下。下面开始8大库的概略简介。
1.CoreNLP
CoreNLP库是斯坦福大学的一个产品,它被构建为可用于生产级的自然语言处理解决方案,能够大规模地提供NLP预测和分析。CoreNLP是用Java编写的,但是有多种Python包和api可供使用,包括一个名为StanfordNLP的原生Python NLP库。
CoreNLP包括广泛的语言工具——语法标记、命名实体识别、解析、情感分析等等。它被设计为与人类语言无关的,目前除了英语之外还支持阿拉伯语、汉语、法语、德语和西班牙语(第三方还提供俄语、瑞典语和丹麦语支持)。CoreNLP还包括一个web API服务器,这是一种不需要太多额外工作就可以提供预测的方便方法。
用CoreNLP的Python包装器最容易开始的地方是StanfordNLP,它是由Stanford NLP组创建的参考实现。除了有良好的文档记录,StanfordNLP还定期进行维护,而CoreNLP的许多其他Python库已经有一段时间没有更新了。
CoreNLP还支持使用NLTK,这是下面讨论的一个主要的Python NLP库。从3.2.3版本开始,NLTK在其解析器中包含了CoreNLP的接口。一定要确保使用正确的API。
CoreNLP的明显缺点是,您需要对Java有一定的了解才能启动和运行它,但是仔细阅读文档就可以做到这一点。另一个障碍可能是CoreNLP的许可证问题。整个工具包都是在GPLv3下许可的,这意味着您分发给其他人的任何用于专有软件的使用都需要商业许可。
2.Gensim
Gensim只做了两件事,但做得非常好。它的重点是统计语义——分析文档的结构,然后根据相似度对其他文档进行评分。
Gensim可以通过将文档流化到它的分析引擎并对它们进行增量的无监督学习来处理非常大的文本。它可以创建多种类型的模型,每种模型适合于不同的场景:Word2Vec、Doc2Vec、FastText和Latent Dirichlet Allocation。
Gensim的详细文档包含教程和操作指南,它们解释了关键概念并通过实际示例加以说明。通用方法也可以在Gensim GitHub库中找到。
3.NLTK
自然语言工具包(Natural Language Toolkit,简称NLTK)是Python自然语言处理库中最著名和最强大的库之一。许多语料库(数据集)和训练过的模型可以开箱即用地使用NLTK,因此您可以马上开始试验NLTK。
正如文档所述,NLTK提供了处理文本的各种工具:“分类、标记、词干、标记、解析和语义推理。它还可以与一些第三方工具一起工作,以增强其功能。
请记住,NLTK是由学术研究受众创建的,并且是为学术研究受众服务的。它不是为生产环境中的NLP模型设计的。文档也有些稀疏;甚至连“如何做”都很简单。此外,没有64位二进制;您需要安装Python的32位版本才能使用它。最后,NLTK也不是最快的库,但是可以通过并行处理来加速。
如果您决定利用NLTK中的内容,那么可以从TextBlob开始(下面将讨论)。
4.Pattern
如果你所需要做的只是抓取一个流行的网站,然后分析你所发现的内容,找到模式。这个自然语言处理库比这里介绍的其他库要小得多,但这也意味着它专注于很好地完成一项常见的工作。
Pattern附带了内置插件,用于抓取大量流行的web服务和资源(谷歌、Wikipedia、Twitter、Facebook、通用RSS等),所有这些都可以作为Python模块使用(例如,from pattern.web import Twitter)。你不需要重新发明轮子从这些网站获取数据,因为它们都有各自的怪癖。然后可以对数据执行各种常见的NLP操作,比如情绪分析。
Pattern公开了一些较低级的功能,允许您直接使用NLP函数、n-gram搜索、向量和图。它还有一个内置的帮助库,用于处理公共数据库(MySQL、SQLite和将来的MongoDB),使使用以前的会话存储的或从第三方获得的表格数据变得容易。
5.Polyglot
顾名思义,Polyglot支持同时处理多种语言的自然语言处理应用程序。
Polyglot中的NLP特性与其他NLP库中的特性相呼应:记号化、命名实体识别、词性标记、情绪分析、单词嵌入等。对于这些操作中的每一个,Polyglot都提供了使用所需语言的模型。
注意,不同的特性对Polyglot语言的支持有很大的不同。例如,分词系统支持近200种语言(主要是因为它使用Unicode文本分割算法),情绪分析支持136种语言,但词性标记只支持16种。
6.PyNLPI
PyNLPI(发音为“pineapple”)只有一些基本的自然语言处理函数,但是它有一些真正有用的NLP数据格式的数据转换和数据处理特性。
PyNLPI中的大多数NLP函数用于基本任务,如标记化或n-gram提取,以及一些在NLP中有用的统计函数,如字符串之间的Levenshtein距离或马尔科夫链。为了方便起见,这些函数是用纯Python实现的,因此它们不太可能具有生产级的性能。
但PyNLPI因其处理NLP领域中涌现的一些更奇特的数据类型和格式而大出风头。PyNLPI可以读取和处理GIZA、Moses++、SoNaR、Taggerdata和TiMBL数据格式,并将整个模块用于处理FoLiA, FoLiA是用于注释语言资源的XML文档格式,如corpora(用于翻译或其他分析的文本体)。
在处理这些数据类型时,您可能希望使用PyNLPI。
7.SpaCy
SpaCy利用Python提供便利,Cython提供速度,被称为“工业级自然语言处理”。它的发明者声称,它在速度、模型大小和准确性方面都优于NLTK、CoreNLP和其他竞争对手。SpaCy的主要缺点是它相对较新,所以它只涵盖英语和其他一些语言(主要是欧洲语言)。另外,在撰写本文时,SpaCy已经发布了2.2版本。
SpaCy包含了在这些竞争框架中发现的几乎所有特性:语音标记、依赖解析、命名实体识别、分词、句子分割、基于规则的匹配操作、单词向量等等。SpaCy还包括对GPU操作的优化——加速计算和在GPU上存储数据以避免复制。
Spacy的文档非常出色。安装向导为Windows、Linux和macOS以及不同的Python环境(pip、conda等)生成命令行安装操作。语言模型作为Python包安装,因此它们可以作为应用程序依赖项列表的一部分进行跟踪。
8.TextBlob
TextBlob是Pattern和NLTK库的友好前端,将这两个库包装在高级的、易于使用的接口中。使用TextBlob,您可以花费更少的时间来处理复杂的Pattern和NLTK,而可以花更多的时间来获得结果。
TextBlob通过利用原生Python对象和语法简化了这种方式。快速入门示例展示了如何简单地将要处理的文本作为字符串处理,以及常见的NLP方法(如词性标记)可以作为这些字符串对象的方法。
TextBlob的另一个优点是,当您变得更加能力自信时,可以“深入进去”更改其功能。许多默认组件,如情绪分析系统或记号赋予器,可以根据需要更换。您还可以创建组合组件(这个情感分析器、那个分类器等等)的高级对象,并以最小的努力重用它们。这样,就可以用TextBlob快速地创建原型,然后再对其进行优化。
9.0小结
本文主要概略的介绍了Python中8个主要的自然语言处理库,有需要的或想从事相关领域研究的人员可以大体做一了解,以便更好的进行参照选择。
你有何好的推荐或思考,分享出来吧。记得顺手点赞、转发和关注@牛旦IT课堂啊,谢谢啦。^_^