NLP——语料库信息提取和处理方法

本文以搜狗新闻语料为例,记录文本语料的收集、读取、处理等一整套的方法,主要是为了排排坑。

文章目录

  • NLP——语料库信息提取和处理方法
  • 前言
  • 一、语料下载
  • 二、文件读取
    • 1. 文件编码嗅探
    • 2. 文件读取
    • 3. 文件转码
  • 三、文本内容提取

前言

文本语料的资源在网上有很多,主要的资源在这篇文章中的语料库部分有介绍和连接。
语料的收集处理主要包括以下环节(尽可能详尽):
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编码)

2. 文件读取

读取文件采用open函数,最好给出文件文件精确的编码形式,以防止出现乱码。
这里采用‘gb18030’编码进行读取,能够完整的读取文本文件。

with open(r"D:\DATAanalysis\NLP\yuliao\sougou_news_2012\news_sohusite_xml.smarty.dat", encoding='gb18030') as f:data = f.read().encode('gbk', 'ignore').decode('gbk')print(data)

3. 文件转码

with open(r"D:\DATAanalysis\NLP\yuliao\sougou_news_2012\full_souhu_news\news_sohusite_xml.dat", encoding='gb18030') as f:
#上面的地址是需要进行转码的文件地址,这一步是读取文件while True:#read函数中的数值代表的是读取速度,越大处理就越快,但是太大了电脑顶不住res = f.read(102400)if res:open(r"D:\DATAanalysis\NLP\yuliao\sougou_news_2012\full_souhu_news\res", 'a', encoding='utf-8', errors='ignore').write(res)#这个地址是转码后文件的存储地址else:break

三、文本内容提取

文本内容的提取主要就是根据文本内容的情况,指定正则规则,对目标内容就行匹配查找和提取,并导出到新的文件中。
这里搜狗新闻语料在转码后的初始文本内容形式如下:

<doc>
<url>http://gongyi.sohu.com/20120706/n347457739.shtml</url>
<docno>98590b972ad2f0ea-34913306c0bb3300</docno>
<contenttitle>深圳地铁将设立VIP头等车厢 买双倍票可享坐票</contenttitle>
<content>南都讯 记者刘凡 周昌和 任笑一 继推出日票后,深圳今后将设地铁VIP头等车厢,设坐票制。昨日,《南都METRO》创刊仪式暨2012年深港地铁圈高峰论坛上透露,在未来的11号线上将增加特色服务,满足不同消费层次的乘客的不同需求,如特设行李架的车厢和买双倍票可有座位坐的VIP车厢等。论坛上,深圳市政府副秘书长、轨道交通建设办公室主任赵鹏林透露,地铁未来的方向将分等级,满足不同层次的人的需求,提供不同层次的有针对的服务。其中包括一些档次稍微高一些的服务。“我们要让公共交通也能满足档次稍高一些的服务”。比如,尝试有座位的地铁票服务。尤其是一些远道而来的乘客,通过提供坐票服务,让乘坐地铁也能享受到非常舒适的体验。他说,这种坐票的服务有望在地铁3期上实行,将加挂2节车厢以实施花钱可买座位的服务。“我们希望轨道交通和家里开的车一样,分很多种。”赵鹏林说,比如有些地铁是“观光线”,不仅沿途的风光非常好,还能凭一张票无数次上下,如同旅游时提供的“通票服务”。再比如,设立可以放大件行李的车厢,今后通过设专门可放大件行李的座位,避免像现在放行李不太方便的现象。“未来地铁初步不仅在干线上铺设,还会在支线、城际线上去建设。”“觉得如果车费不太贵的话,还是愿意考虑的。”昨日市民黄小姐表示,尤其是从老街到机场这一段,老街站每次上下客都很多人,而如果赶上上下班高峰期,特别拥挤,要一路从老街站站到机场,40、50分钟还是挺吃力的,宁愿多花点钱也能稍微舒适一点。但是白领林先生则表示,自己每天上下班都要坐地铁,出双倍车资买坐票费用有点高。</content>
</doc>

这里主要提取其中的两部分内容:
1)url中网站中所携带的新闻分类信息,如此处就是“gongyi”表示是公益新闻,作为拆分文件的名称,对超大文本文件进行分类拆分处理;
2)content中的文本内容;

import re
#读取文件,解码方式utf-8
init_text = open(r"D:\DATAanalysis\NLP\yuliao\sougou_news_2012\full_souhu_news\res", 'rb').read().decode('utf-8')#正则项匹配方法,re.S表示进行正则化匹配的时候,同时匹配空格、换行等特殊符号
pattern_match = re.compile(r'<url>(.*?)</url>', re.S)
content_match = re.compile(r'<content>(.*?)</content>', re.S)#目标内容提取,利用findall函数
classes = pattern_match.findall(init_text)
contents = content_match.findall(init_text)print("初始文本数:{}".format(len(contents)))#将文本内容总长度小于30的文本删除
#注意这里提取contents的长度信息时,采用的是.__len__()属性,而不是len()函数,且从右往左倒叙进行检查处理
#因为循环需要将长度较小的文本进行剔除,这个过程会改变contents的长度,所以不能简单使用len()函数
for i in range(contents.__len__())[::-1]:if len(contents[i]) < 30:contents.pop(i)classes.pop(i)
print("过滤后文本数:{}".format(len(contents)))#进一步提取url中的新闻类别信息,如http://roll.sohu.com/20120721/n348712775.shtml中的roll
patternClass = re.compile(r'http://(.*?).sohu', re.S)
for i in range(classes.__len__()):classi = patternClass.findall(classes[i])classes[i] = classi[0]#将处理后的文件保存到新的文本文件中
for i in range(classes.__len__()):file_path = "D:/DATAanalysis/NLP/yuliao/sougou_news_2012/news_sohusite_xml.full/" + classes[i] + ".txt"f = open(file_path, 'a+', encoding='utf-8')f.write(contents[i] + '\n')

NLP——语料库信息提取和处理方法相关推荐

  1. NLP词向量和句向量方法总结及实现

    目前各种词向量是很多的,很有必要做一个综合性的总结.在CSDN上一看已经有作者做过这部分的工作了.觉得写的非常棒,于是就转载过来了,原文地址:NLP词向量和句向量方法总结及实现,具体内容如下: 一.W ...

  2. YELP NLP 文本信息提取项目

    @YELP NLP YELP NLP (文本信息提取) 为了做研究,进了Yelp这个大坑.自己选的题,哭着也得搞出来- 感觉边写代码边记录下心得体会.下一步的构想等等有的没的,是个很好的整理思路的过程 ...

  3. NLP中的数据增强方法综述

    论文链接:A Survey of Data Augmentation Approaches for NLP 摘要 由于越来越多的研究在低资源领域.新任务和需要大量训练数据的大规模神经网络中,NLP中的 ...

  4. NLP中的数据增强方法

    目录 1 概述 2. 方法 2.1 随机drop和shuffle 2.2 同义词替换 2.3 回译 2.4 文档裁剪 2.5 生成对抗网络 2.6 预训练的语言模型 1 概述 NLP中的数据是离散的. ...

  5. cips2016+学习笔记︱NLP中的消岐方法总结(词典、有监督、半监督)

    歧义问题方面,笔者一直比较关注利用词向量解决歧义问题: 也许你寄希望于一个词向量能捕获所有的语义信息(例如run即是动车也是名词),但是什么样的词向量都不能很好地进行凸显. 这篇论文有一些利用词向量的 ...

  6. CVPR 2019审稿满分论文:中国博士提出融合CV与NLP的视觉语言导航新方法

    整理 | 刘畅.Jane 责编 | Jane 出品 | AI科技大本营(公众号id:rgznai100) 如何挑战百万年薪的人工智能! https://edu.csdn.net/topic/ai30? ...

  7. NLP语料库构建(corpus)

    1 文本加载 文本处理函数学习: re.sub():正则表达式替换函数,对于输入的一个字符串,利用正则表达式(的强大的字符串处理功能),去实现(相对复杂的)字符串替换处理,然后返回被替换后的字符串,实 ...

  8. 【收集】NLP语料库数据集+持续更新

    来源:大数据文摘 本文共4270字,建议阅读7分钟. 本文为你奉上100多个按字母顺序排列的开源自然语言处理文本数据集列表. 奉上100多个按字母顺序排列的开源自然语言处理文本数据集列表(原始未结构化 ...

  9. NLP中的关系抽取方法归纳

    文章目录 前言 命名实体识别任务 Softmax和CRF 指针网络 span排列 关系分类任务 半监督学习方法 基于远程监督的优化 多示例学习 强化学习 预训练 监督学习方法 联合抽取 共享参数的联合 ...

最新文章

  1. pandas使用pd.concat纵向合并多个dataframe实战:多个dataframe的纵向合并、为纵向合并的多个dataframe设置标识符指定数据来源
  2. java抓取网页标题内容_[Java教程]java 网页页面抓取标题和正文
  3. postgresql批量插入数据脚本_每日踩坑 2020-11-04 PostgreSQL 批量插入数据
  4. jquery遍历多个li_jQuery中10个非常有用的遍历函数
  5. Android源码学习(3) Handler之MessageQueue
  6. mysql逻辑备份之mysqldump
  7. 检查一列数据的重复项 vba_提取重复值,但字典不是重点。
  8. python中loop的用法_python-在Tensorflow中使用tf.while_loop更新变量
  9. 让数据库支持SQL 2005 CLR 的必要条件
  10. Java 继承学习笔记
  11. vue实现多行数据提交_Vue+Mockjs,模拟接口数据,实现前后端独立开发
  12. ie8 js未指明的错误_win7系统IE8,js报错:“属性值中不能使用字符''。”求帮助。...
  13. linux内核中获取虚拟地址api,Linux内核-系统调用
  14. (原)War3 脚本分析4-触发器
  15. 新宝资讯上证涨跌比:1131:649
  16. 2.4gwifi最高下载速度_2.4g网速(2.4gwifi最高下载速度)
  17. windows安全事件查看及安全事件id汇总
  18. 淘宝电商需求文档的书写
  19. 【论文笔记】ParaDetox:Detoxifification with Parallel Data
  20. 海南实现旅游总收入1.06亿元人民币

热门文章

  1. Benefits from music
  2. matlab实现一个简单的细胞自动机小游戏
  3. Java毕业设计-网上书城管理系统
  4. 记一次生产大对象导致的OOM让架构师连夜排查解决
  5. 使用iTOP进行CMDB资产管理
  6. 如何学习一门编程语言
  7. HTML中然后设置前景色,理解CSS前景色和透明度
  8. 问题排查-Flink session窗口最后一个不过期问题
  9. iText实现HTML页面导出PDF
  10. 985本科生歧视北大博导“第一学历”,“无法相信北大会有这么差的师资”