1、要预处理xml文件,解决docs,url,content标签问题。主要代码是deal_label.py 存入数据文件夹是sougou_label_after

SogouCS.reduced:存放原始的txt;
sougou_label_after:解决docs,url,content标签问题
import os
# 预处理xml文件,解决docs,url,content标签问题
def file_fill(file_dir,half_dir):
# 查看half_dir文件夹下的文件夹和文件目录
for root, dirs,files in os.walk(file_dir):
# 判断是否存在half_dir,如果没有则创建
if not os.path.exists(half_dir):
os.makedirs(half_dir)
for f in files:
tmp_dir = half_dir+'\\'+f
text_init_dir = file_dir+'\\'+f
# 遍历文件夹下的每一篇xml文件
with open(text_init_dir, 'r', encoding='gb18030') as source_file:
start,end = '<docs>\n', '</docs>'
line_content = source_file.readlines()
# 在目标文件夹中创建新文件保存预处理后的文件
with open(tmp_dir, 'w+', encoding='utf-8') as handle_file:
# 添加'<docs>'头标签
handle_file.write(start)
for line in line_content:
# 处理url中的‘&’符号
text = line.replace('&', '&amp;')
# 添加'</docs>'头标签
handle_file.write(text)
handle_file.write(end)
if __name__ == '__main__':
file_dir = r'E:\sssss\SogouCS.reduced' #原始文件夹
half_dir = r'E:\sssss\sougou_label_after' # 修改格式和符号生成的文件夹 无需自己手动建文件夹
file_fill(file_dir, half_dir) #将选好的文件进行加上<docs>和</docs>,并修改&这个符号

2、部分样本函数获取,同时随机取去训练数据和测试数据。主要代码是data_train_test.py 存入数据文件夹分别为train_choice , test_choice

import os, random

# 部分样本获取函数
def choice_files(half_dir,choice_dir_train,choice_dir_test,n,m):
if not os.path.exists(choice_dir_train):
os.makedirs(choice_dir_train)
if not os.path.exists(choice_dir_test):
os.makedirs(choice_dir_test) for _,_,files in os.walk(half_dir):
file_list_train = random.sample(files, n) #训练数据去随机的n个文件
for file_choice in file_list_train:
files.remove(file_choice)
file_list_test = random.sample(files, m) #测试数据取随机的m个文件
for file in file_list_train:
with open(half_dir+'\\'+file, 'r', encoding='utf-8') as f1_train:
doc_train = f1_train.read()
path = choice_dir_train+'\\'+file
with open(path, 'w+', encoding='utf-8') as f2_train:
f2_train.write(doc_train)
for file in file_list_test:
with open(half_dir+'\\'+file, 'r', encoding='utf-8')as f1_test:
doc_test = f1_test.read()
path = choice_dir_test +'\\'+file
with open(path, 'w+', encoding='utf-8') as f2_test:
f2_test.write(doc_test)
# print(file_list_train)
# print(file_list_test)
return file_list_train, file_list_test if __name__ == '__main__':
# 随机抽取10个文件进行深加工
half_dir = r'E:\sssss\sougou_label_after'
choice_dir_train = r'E:\sssss\train_choice'
choice_dir_test = r'E:\sssss\test_choice'
file_list_train, file_list_test = choice_files(half_dir, choice_dir_train, choice_dir_test, 10, 5)

3、提取文档文本内容,并且根据url将文本分好类.主要代码是data_content.py 存入数据文件夹是data

import os
from xml.dom import minidom
from urllib.parse import urlparse # 检查url对应的文章是否在分类字典中
def check_class(url_lb,labels):
if url_lb in labels:
return True
return False def file_read(half_dir, labels, path):
for _, _, files in os.walk(half_dir):
for f in files:
filename = half_dir + '\\' + f
doc = minidom.parse(filename) #加载读取xml文件
root = doc.documentElement #获取xml节点属性值
claimtext = root.getElementsByTagName('content') #获取xml节点对象集合
claimurl = root.getElementsByTagName('url')
for ind in range(len(claimurl)):
if claimtext[ind].firstChild == None:
continue
url = urlparse(claimurl[ind].firstChild.data)
url_lb = url.hostname.strip().split('.')[0]
# 建立url和类别的映射字典
if check_class(url_lb, labels):
if not os.path.exists(path):
os.makedirs(path)
if not os.path.exists(path + './' + labels[url_lb]):
os.makedirs(path + './' + labels[url_lb])
file_name = path + './' + labels[url_lb] + './' + "{}.txt".format(labels[url_lb])
with open(file_name, "a+", encoding='utf-8') as file_in:
file_in.write(claimtext[ind].firstChild.data + '\n') if __name__ == '__main__':
labels = {'auto': '汽车', 'it': '互联网', 'health': '健康',
'sports': '体育','travel': '旅游', 'learning': '教育', 'career': '职业',
'cul': '文化','mil': '军事', 'house': '房产', 'yule': '娱乐',
'women': '女人','media': '媒体', '2008': '奥运',
'business': '商业'
}
half_dir = r'E:\sssss\train_choice'
path = r'E:\sssss\data\data_train' # 新创建的文件夹,主要是放分好类的文件
file_read(half_dir, labels, path) # 将选好的文件进行纯文本提取和分类存储 half_dir = r'E:\sssss\test_choice'
path = r'E:\sssss\data\data_test' #新创建的文件夹,主要是放分好类的文件
file_read(half_dir, labels, path) # 将选好的文件进行纯文本提取和分类存储

解析搜狗实验室精简版数据:1、批量将.txt编码格式转化为utf8 2、解析提取数据的更多相关文章

  1. MSSQL数据的批量插入

    一.概述: 对于数据的批量插入操作似乎成了某些大数据量操作的必用手段,MSSQL也提供了一些数据批量插入的操作方法,先将这些方法汇总,以便于下次用到使用.面对数据的批量插入操作,我们也应该考虑一个问题 ...

  2. Python_实现json数据的jsonPath(精简版)定位及增删改操作

    基于python实现json数据的jsonPath(精简版)定位及增删改操作   by:授客 QQ:1033553122 实践环境 win7 64 Python 3.4.0 代码 #-*- encod ...

  3. SX_WIN10X64LTSB2016_EN_LITE英文精简版

    SX_WIN10X64LTSB2016_EN_LITE英文精简版该版本为英文版!该版本为英文版!该版本为英文版!因为论坛巴基斯坦的maanu兄弟PM我,所以抽空做了一个.介绍沿用原来的,中文用谷歌翻译 ...

  4. WIN10X64_LTSB2016极限精简版by双心

    WIN10X64LTSB2016极限精简版by双心http://www.cnblogs.com/liuzhaoyzz/p/9162113.html 一.前言:关于极限精简版的说明 本系统为极限精简版, ...

  5. WIN10X64LTSC2019中度精简版by双心

    WIN10X64LTSC2019中度精简版by双心https://www.cnblogs.com/liuzhaoyzz/p/11295032.html 一.前言:关于LTSC中度精简版的说明 一个MM ...

  6. Linux上oracle精简版客户端快速部署

    RHEL6 + Oracle 11g客户端快速部署 需求:只是用到客户端的sqlplus, sqlldr功能. 方案:用精简版实现客户端的快速部署 1.上传oracle精简版客户端到服务器/tmp目录 ...

  7. HBase 高性能获取数据(多线程批量式解决办法) + MySQL和HBase性能测试比较

    摘要:   在前篇博客里已经讲述了通过一个自定义 HBase Filter来获取数据的办法,在末尾指出此办法的性能是不能满足应用要求的,很显然对于如此成熟的HBase来说,高性能获取数据应该不是问题. ...

  8. 小韦XPSP3 V10.0_Ghost精简版

    小韦XPSP3 V10.0_Ghost精简版 该版本基于小韦XPSP3 V10.0,用EasySysprep_4.1进行重新封装,最大程度保持原版极度精简的理念.C盘为NTFS格式,安装后C盘只占用2 ...

  9. stl总结精简版

    STL 精简版 vetor #include<vector> #include<cstdio> #include<algorithm> #include<io ...

随机推荐

  1. java单链表反转(花了半个多小时的作品)

    欢迎光临............... 首先我们要搞清楚链表是啥玩意儿?先看看定义: 讲链表之前我们先说说Java内存的分配情况:我们new对象的时候,会在java堆中为对象分配内存,当我们调用方法的 ...

  2. Hash算法的讲解

    散列表,又叫哈希表,它是基于快速存取的角度设计的,也是一种典型的“空间换时间”的做法.顾名思义,该数据结构可以理解为一个线性表,但是其中的元素不是紧密排列的,而是可能存在空隙. 散列表(Hash ta ...

  3. 【管理篇】用户故事STORY

    项目管理中,常常听说story,用户故事 “一开始就做对系统”纯属神话,反之,我们应该去实现今天的用户故事,然后重构,明天再拓展系统.实现新的用户故事.这就是迭代和增量敏捷的精粹所在.

  4. jdbc.properties+web.xml

    1. jdbc.properties #\u8FDE\u63A5\u8BBE\u7F6E[左边是properties被IDE编码后的结果] jdbc.driverClassName=com.mysql ...

  5. reference to 'map' is ambiguous|

    reference to 'map' is ambiguous| c++编译出现此错误    表明定义的变量名字map和库函数map冲突而产生歧义

  6. c#清空文本文件

    FileStream fs = new FileStream(@"C:\log.txt", FileMode.Truncate, FileAccess.ReadWrite); fs ...

  7. day26:静态方法,类方法和反射

    1,包内部不要去尝试应用使用相对导入,一定不会成功的,他不支持这个机制,包内导入时一定要用绝对导入 2,复习接口类,抽象类,Python中没有接口类,有抽象类,抽象类是通过abc模块中的metacla ...

  8. mysql数据库的查询,添加,删除,还原,备份

    18章数据mariadb数据库 1.setup 配置网卡centos6.52.nmtui 网卡图形配置界面3.yum install mariadb mariadb-server4.systemctl ...

  9. 洛谷P4051 字符加密 [JSOI2007] SA

    正解:SA 解题报告: 传送门! 和工艺那题有点儿像鸭,,,反正肯定就都想到倍长然后SA拍个序嘛先 然后就做完了,,,我发现SA的题刷起来特别susi,,,基本上紫题级别的都just一个模板就欧克了最 ...

  10. JavaScript实现预览本地上传图片

    <html> <head> <title> www.jb51.net图片上传预览 </title> <script> function Pr ...