以下文章来源于老刘说NLP
正文
当我们进入到一个新的领域,并且希望能够快速地完成图谱的构建,往往需要掌握一些基本的组件,知道有哪些公开的“轮子”可以使用,
而这个轮子,一方面包括已经开放可供使用的工具、平台、软件系统,也包括一些结构化的知识库,了解并熟知已有的资源。
本文分别从文本数据采集工具、文本数据采集工具、文本转换与标准化工具、文本处理分析工具以及文本分析工具等方面进行介绍,可作为入门爱好者的一个索引。
一、文本数据采集工具
数据采集一般包括几个基本流程:先获得目标数据的URL、并向对应的URL提交HTTP请求,解析HTTP响应,存储解析结果。在每个阶段都有成熟的开源工具来支持,例如python自带的urllib组件、Requests组件等,均可以完成向目标URL发起不同种类的HTTP请求。在文本采集模块中,值得一提的包括Selenium、curltrillworks、以及Scrapy。
1)Selenium
有时,在采集网页信息时,常常会出现返回的信息存储在一个js当中,即所需要采集的内容需要使用浏览器进行渲染。Selenium是一个用于测试网站的自动化测试工具,支持各种浏览器包括Chrome、Firefox、Safari等主流界面浏览器,同时也支持phantomJS无界面浏览器。Selenium3.x调用浏览器必须有一个webdriver驱动文件。为此,在这时,则需要借助Selenium或者phantomJS来实施采集。由于频繁的操作界面化浏览器,因此常常会选择phantomJS作为渲染方式。
2)curl.trillworks
通用的爬虫方法往往无法满足当前异构的网页,因此,我们往往会采用具体情况、具体分析的技术路线,例如,curltrillworks是一个常用的采集工具,其能够将某个网页的curl请求转换成可执行的Python爬虫脚本。
3)Scrapy
Scrapy是一套基于基于Twisted的异步处理框架,纯python实现的爬虫框架,用户只需要定制开发几个模块就可以轻松的实现一个爬虫,用来抓取网页内容以及各种数据,非常方便。Scrapy是一个为了爬取网站数据,提取结构性数据而编写的应用框架,可以应用在包括数据挖掘,信息处理或存储历史数据等一系列的程序中。其最初是为了网络抓取所设计的,也可以应用在获取API所返回的数据(例如 Amazon Associates Web Services)或者通用的网络爬虫。
4)Redis
在进行大规模采集时,经常会遇到对网站进行遍历采集的问题,这时候,往往需要在采集的过程中维护一个采集URL池,以避免重复查询以及方便多台机器分布式采集。这时候需要采用Redis数据库与Scrapy进行配合使用。Redis 是完全开源的,遵守 BSD 协议,是一个高性能的 key-value 数据库,Redis性能极高,Redis能读的速度是110000次/s,写的速度是81000次/s。此外,Redis还拥有丰富的数据类型,支持二进制案例的Strings,Lists,Hashes,Sets及Ordered Sets数据类型操作;Redis的所有操作都是原子性的,意思就是要么成功执行要么失败完全不执行。单个操作是原子性的。多个操作也支持事务,即原子性,通过MULTI和EXEC指令包起来。Redis还支持 publish/subscribe,通知,key过期等等特性。
二、文本数据解析工具
网页信息解析,是在进行网页抓取之后,从包含不同标签的网页中提取目标字段和字段的过程,由于提取的信息隐藏在标签当中,因此通常情况下会利用HTML的标签含义例如,文章的标题通常位于title标签下,表格类数据通常位于td标签,段落信息位于p标签下,以及字段排列的规则,例如字段名称与字段值之间常用冒号或者破折号隔开,也就是说,在这个阶段需要手动编写规则实施解析提取。在数据解析阶段,常用的开源工具包括re、BeautifulSoup、LXML是其中的两个常用组件。
1)re正则表达式
正则表达式使用单个字符串来描述、匹配一系列匹配某个句法规则的字符串,是自然语言处理最基础同时也是最重要的处理工具。例如经常会使用:“[1-9]\d{5}(?!\d)”来匹配中国邮政编码, “^\w+([-+.]\w+)@\w+([-.]\w+).\w+([-.]\w+)*