中文预处理流程(以搜狐语料全网新闻数据为例)

本文介绍了一个新闻数据集的预处理过程,包括识别编码问题、提取URL和内容、分类信息、去除特殊字符、全角半角转换、保留汉字、大写转小写、分词、停用词过滤、向量化操作。通过这些步骤,可以有效地清洗和标准化文本数据。

数据集

使用了搜狗实验室公开语料集-全网新闻数据(SogouCA),完整语料包含来自若干新闻站点2012年6月—7月期间国内,国际,体育,社会,娱乐等18个频道的新闻数据,提供URL和正文信息。
其格式为:

<doc>
<url>页面URL</url>
<docno>页面ID</docno>
<contenttitle>页面标题</contenttitle>
<content>页面内容</content>
</doc>

注意:content字段去除了HTML标签,保存的是新闻正文文本。

本文使用了其迷你版(样例数据, 101KB),下载地址

读取数据

编码错误

此数据集直接使用GBK编码读取会报错,原因是编码错误。

f = open('news_tensite_xml.smarty.dat','r',encoding='gbk')
try:
    f.readline()
except Exception as e:
    print(e)
f.close()
'gbk' codec can't decode byte 0xfd in position 440: illegal multibyte sequence

检测编码类型

因此需要对文件的编码进行分析,使用的工具是chardet库的detect函数。

f = open('news_tensite_xml.smarty.dat','rb')
import chardet
st = f.read()
print(chardet.detect(st))
f.close()
{'encoding': 'GB2312', 'confidence': 0.99, 'language': 'Chinese'}

检测结果显示编码有百分之99是GB2312。

读取数据

使用GB2312编码依然会报编码错误,因此在读取过程中可以将其中的错误忽略,也就是设置参数errors='ignore'

f = open('news_tensite_xml.smarty.dat', 'r', encoding='gb2312', errors='ignore')
st = f.read()
f.close()
st[:150]

经过手工尝试发现使用编码GB18030可以正确的解码整个文件。

f = open('news_tensite_xml.smarty.dat', 'r', encoding='gb18030 ')
st = f.read()
f.close()
st[:150]

提取url和content

import re
from collections import Counter
# 定义正则表达式
url_pattern = re.compile(r'<url>(.*?)</url>', re.S)
content_pattern = re.compile(r'<content>(.*?)</content>', re.S)

# 正则匹配出url和content
urls = url_pattern.findall(st)
contents = content_pattern.findall(st)

提取类别

使用正则表达式

可以使用正则表达式,提取url中文本的网址所在栏目信息,作为信息的分类。

classes = []
patternClass = re.compile(r'http://(.*?).com', re.S)
for i in range(urls.__len__()):
    classes.append(patternClass.findall(urls[i])[0])
Counter(classes)
Counter({'news.sohu': 16,
         'biz.cn.yahoo': 61,
         'club.news.sohu': 2,
         'news.cn.yahoo': 121})

这种提取方式需要url中网站的栏目信息按照固定规则编写,url不规范会导致提取结果不可用或者提取信息混乱,而且,不同网站的url需要选用不同的正则表达式提取。

Counter(classes)
Counter({'搜狐新闻': 16, '财经': 52, '雅虎新闻': 130, '搜狐社区': 2})

预定义类别字典

预定义分类及其包含的类别信息。

categories={
   
   '搜狐新闻':['http://news.sohu.com'],
            '财经':['http://biz.cn.yahoo.com/ypen'],
            '雅虎新闻':['http://biz.cn.yahoo.com/newspic','http://news.cn.yahoo.com/'],
            '搜狐社区':['http://club.news.sohu.com'],
            '社会':['http://news.cn.yahoo.com/newspic/society/']
            }
classes = []
class_dict = {
   
   }
for i,url in enumerate(urls):
    flag = False
    label = None
    for k, v in categories.items():
        for url_list in v:
            if url_list in url:
                flag = True
                label = k
#                 print(k)
                break
        if flag:
            break
    classes.append(label)
Counter(classes)
Counter({'搜狐新闻': 16, '财经': 52, '雅虎新闻': 130, '搜狐社区': 2})

这样允许用户可以灵活的定义类别,精确性也有一定的保证。

筛选长度大于l的数据

n=50
class_l=[]
contents_l=[]
for c,t in zip(classes,contents):
    if len(t)>n:
        class_l.append(c)
        contents_l.append(t)

去除指定无用的符号

首先查看下去除前,列表中的第二个文本:

contents_l[2]
'临沂(山东),2012年6月4日\u3000夫妻“麦客”忙麦收\u30006月4日,在山东省临沂市郯城县郯城街道米顶村麦田间,范加江驾驶收割机在收获小麦。\u3000三夏时节,山东小麦主产区处处可见“麦客”驾驶联合收割机在麦田中来回穿梭。生活在郯城县郯城街道东风村的范加江、赵琴兰夫妇就是众多“麦客”中的一对。小两口于2011年投资11万多元购买了一台大型小麦联合收割机,成为村里第一对夫妻“麦客”。麦收时节,天一刚亮,夫妻俩就开始为农户收割小麦,中午在田间地头凑合填饱肚子,晚上有时要干到十一、二点。夫妻俩各自分工,丈夫收割,妻子负责量地、看路、买油、替农户装粮袋等。忙的时候,一天能收割60多亩,一个麦季下来能挣2万多元。\u3000在郯城县,有200多对夫妻“麦客”驾驶联合收割机忙碌在田间地头。他们辛勤忙碌在麦收一线,为小麦及时归仓挥洒着辛勤的汗水,同时通过劳动也为自己带来了稳定的收入。\u3000新华社发(张春雷\u3000摄)'

使用replace

如果只移除一个字符可以使用replace。

# 去掉文本中的\u3000
def process(our_data):
    m1 = map(lambda s: s.replace
内容概要:本文系统梳理了多个科研领域的前沿研究与技术实现,重点涵盖FDTD方法中的完美匹配层(PML)研究,以及Matlab/Simulink在电磁、电力、控制、通信、信号处理、图像处理、路径规划、能源系统优化等领域的仿真与算法实现。文中列举了大量基于Matlab和Python的科研案例,如风电功率预测、负荷预测、无人机三维路径规划、电池系统故障诊断、雷达模拟、通信编码、微电网优化调度等,并强调结合智能优化算法(如粒子群、遗传算法、深度学习等)提升系统性能。同时,提供了丰富的代码资源与仿真模型,涵盖永磁同步电机控制、逆变器设计、多智能体任务分配、虚拟电厂调度等复杂系统,助力科研人员快速开展复现实验与创新研究。; 适合人群:具备一定编程基础,熟悉Matlab/Python工具,从事电气工程、自动化、通信、人工智能、新能源、控制科学等相关领域研究的研发人员及研究生。; 使用场景及目标:① 学习并实现FDTD仿真中的PML边界条件以有效抑制数值反射;② 掌握Matlab/Simulink在多物理场建模、控制系统设计与优化算法中的综合应用;③ 借助提供的代码资源完成科研复现、课程设计、竞赛项目或工程原型开发; 阅读建议:此资源以科研实战为导向,不仅提供理论方法,更强调代码实现与仿真验证。建议读者结合自身研究方向,按目录顺序查阅相关模块,下载配套代码进行调试与二次开发,以达到学以致用、融会贯通的目的。
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值