NLP——语料库信息提取和处理方法
本文以搜狗新闻语料为例,记录文本语料的收集、读取、处理等一整套的方法,主要是为了排排坑。前言
文本语料的资源在网上有很多,主要的资源在这篇文章中的语料库部分有介绍和连接。
语料的收集处理主要包括以下环节(尽可能详尽):
1)语料下载,在各个资源网站上找到对应分类的语料资源;
2)文件读取:文件的读取最要注意的一点就是编码形式,比如这个例子中搜狗新闻语料的文件的初始编码是中文gb18030(这里有坑,在下文对应章节细讲),对于小文件可以直接用notepad++打开后,进行转码,基本能够将各种编码文件转换成想要的编码形式,如果是超大文件,notepad++就无法打开了,这里我是采用python进行的转码;
3)转码后文件的清洗:从资源网站直接下载的语料资源,里面常常是带有很多无关信息的,比如这次例子中的搜狗新闻资源,其中还有很多的html文件的相关内容,需要对新闻文本内容进行进一步的精准提取,这里采用的是正则化匹配的方法;
一、语料下载
搜狗中文语料库
各模块的文本资源包括精简版和完整版,完整版的文件解压后会达到1G以上,实际中最好先下载精简版进行处理试验,没问题之后再对完整版的资源进行处理。
二、文件读取
notepad++读取转码的方式这里就不赘述了,基本的软件操作方法
1. 文件编码嗅探
在不确定文件的编码方式的时候,可以用以下方法进行文件编码方式的嗅探,python代码如下:
import chardet
with open(r"D:\DATAanalysis\NLP\yuliao\sougou_news_2012\news_sohusite_xml.smarty.dat", 'rb') as file:
print(chardet.detect(file.read()))
利用chardet的detect功能
上述代码返回的结果是:
{
'encoding': 'GB2312', 'confidence': 0.99, 'language': 'Chinese'}
意思是文件的编码方式是“GB2312”,置信度是0.99(并不完全,这就是坑)
可以看出文档中绝大多数的内容都能够按照GB2312的编码方式进行读取,但是对于少部分不匹配的内容,才是问题所在。
如果在open函数中,给erroes参数‘ignore’,则读取的文件就会出现少部分的乱码(根据我的对比观察,乱码主要出现在换行的位置),而不给‘ignore’读取文件就会报错,这个例子中,如果按照GB2312编码读取,就会出现上述问题。
解决方法:经过多轮测试,发现搜狗新闻资源如果用‘gb18030’编码进行读取就能够完全读取,对于中文编码,有GB2312 < GBK < gb18030,问题是编码嗅探给出GB2312的结果也是真坑啊。。。(应该是还不支持识别gb18030编码)