搜狗新闻语料库解析

搜集语料,考虑使用搜狗新闻语料库。但其采用了gbk编码,在ubuntu下打开为乱码,需要将编码格式转换为utf。
直接采用shell命令进行转码:

cat news_tensite_xml.dat | iconv -f gbk -t utf-8 -c | grep "<content>" > a.txt

但得到的txt文件中会有些许乱码

想尝试在windows下打开(windows默认gbk编码格式)后转码保存,但文件解压后接近1.5G,记事本、写字板和word等都无法打开。又想直接使用转码工具进行转码,但文件是.dat格式,不能直接转码。

于是,先将.dat格式的文件分割为多个.txt文件,再使用小工具进行批量转码:

 import re def split(): p = re.compile('</doc>',re.S) end = '</doc>' fileContent = open('news_tensite_xml.dat','r').read();  paraList = p.split(fileContent)   fileWriter = open('files/0.txt','a')   for paraIndex in range(len(paraList)):  fileWriter.write(paraList[paraIndex])  if(paraIndex != len(paraList)):  fileWriter.write(end) if((paraIndex+1)%5000==0):  fileWriter.close() fileWriter = open('files/'+str((paraIndex+1)/5000)+'.txt','a');  fileWriter.close()  print('finished') split()

这样files文件夹下就包含了250+个分裂开的txt文件,使用批量转码小工具(网上一搜一大堆)将这些txt文件由gbk转化为utf,就得到了utf编码格式的txt文件,此时在ubuntu下打开这些txt文件,不再是乱码。

最后,需要将txt里面的content即正文部分提取出来,合并为一个txt:

 import os from xml.dom import minidom from urlparse import urlparse import codecs import sys reload(sys) sys.setdefaultencoding("utf-8") def file_fill(file_dir): for root, dirs, files in os.walk(file_dir): for f in files: tmp_dir = 'decodes' + '/' + f  text_init_dir = file_dir + '/' + f   file_source = codecs.open(text_init_dir, 'r') ok_file = codecs.open(tmp_dir, 'w','utf-8') start = '<docs>\n' end = '</docs>' line_content = file_source.readlines() ok_file.write(start) for lines in line_content: text1 = lines.replace('', '') text=text1.replace('&', '&amp;') ok_file.write(text) ok_file.write(end) file_source.close() ok_file.close() def file_read(file_dir): b=codecs.open('final.txt','w','utf-8') for root, dirs, files in os.walk(file_dir): for f in files: doc = minidom.parse(file_dir + "/" + f) root = doc.documentElement claimtext = root.getElementsByTagName("content") for index in range(0, len(claimtext)): if (claimtext[index].firstChild == None): continue b.write((claimtext[index].firstChild.data).encode('utf8')) b.close() if __name__=="__main__": file_fill("files") file_read("decodes")

注:对于文件读写,默认是unicode,所以需要加入

import sys reload(sys) sys.setdefaultencoding("utf-8")

来将编码格式转化为utf-8,否则,file_read时

doc = minidom.parse(file_dir + "/" + f) 

这句会报错

原文链接:https://blog.csdn.net/u010122972/article/details/79543061?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522165277607816782248557448%2522%252C%2522scm%2522%253A%252220140713.130102334.pc%255Fblog.%2522%257D&request_id=165277607816782248557448&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~blog~first_rank_ecpm_v1~times_rank-25-79543061-null-null.nonecase&utm_term=%E6%96%B0%E9%97%BB

© 版权声明
THE END
喜欢就支持一下吧
点赞0 分享
评论 抢沙发
头像
文明发言,共建和谐米科社区
提交
头像

昵称

取消
昵称表情图片