下载的sougou中文语料文件是xml格式的,有1.5G,需要在python下进行正文的提取及中文分词工作。

1. 首先,进行正文的提取,有几个需要注意的细节。

a. 检测文件的中文编码

在python下安装chardet包,使用chardet检查中文格式. 注意读文件时使用的是'rb'.

b. 读取原始数据

在获取了中文编码格式后,使用codecs包,注意参数errors="ignore"的使用,否则会出现以下类似错误:

UnicodeDecodeError: 'gb2312' codec can't decode byte 0xfd in position 440: illegal multibyte sequence

c. 在处理大的文件时,for循环里不要做类似以下的操作,否则速度非常慢。

text_str  = '';

for item in a:

b = item.replace('<content>','');

text_str = text_str + (b.replace('</content>',''));

读大文件,linecache.getlines也可以用于加速文件操作。

d. 在写入文件时,特意增加了'\n',这样方便后续的“按行读文件”操作。

(增加换行符后的文本,在notepad++里的显示如下图,因为有个分行和行号,看起来很方便。)

完整的代码如下:

import chardet
import codecs
import redef detect_file_encoding(file_path):''' 返回文件的编码 '''f = open(file_path, 'rb')data = f.read()predict =  chardet.detect(data)f.close()return predict['encoding']if __name__ == '__main__':# detect file encode type file_path = r'D:\Work\NLP\Dataset\new\sogou\news_tensite_xml.dat';print( detect_file_encoding(file_path) )# read filef2 = codecs.open(file_path, encoding='GB2312', errors="ignore")content2 = f2.read();f2.close()# write to text filef = codecs.open(r'D:\Work\NLP\Dataset\new\sogou\output\news_tensite_xml.txt', 'w',encoding='utf8');# exact the text between <content> and  </content>a = re.findall('<content>.*</content>', content2)print("Length of list: %d" % len(a));i = 0;for item in a:b = item.replace('<content>','');b = b.replace('</content>','');f.write(str(b)+'\n');i = i+1;if i%1000 == 0:print("index: %d / %d" % (i,len(a)));f.close();

2. 使用jieba进行中文分词工作,完整代码如下。

这里需要注意的是,输入给jiebad的是每行字符串,而不是整个文件作为字符串(太大了)。

import jieba
import codecs
import datetimeinp = r'D:\Work\NLP\Dataset\new\sogou\tmp\news_tensite_xml.txt';
outp = r'D:\Work\NLP\Dataset\new\sogou\output\news_tensite_xml_segment.txt';finput = codecs.open(inp, encoding='utf8', errors="ignore")
foutput = codecs.open(outp, 'w',encoding='utf8');
space = " ";i = 0;
start = datetime.datetime.now()
for line in finput: i = i+1;if i%1000 == 0:print(i);line_seg = jieba.cut(line) foutput.write(space.join(line_seg));end = datetime.datetime.now()
print (end-start)    finput.close()
foutput.close() 

附加: 使用以上分词的结果进行word2vec训练,代码如下。

# -*- coding: utf-8 -*-
# train_word2vec_model.py用于训练模型
import logging
import os.path
import sys
import multiprocessing
from gensim.models import Word2Vec
from gensim.models.word2vec import LineSentence
import datetimeif __name__=='__main__': program = os.path.basename(sys.argv[0]) logger = logging.getLogger(program) logging.basicConfig(format='%(asctime)s: %(levelname)s: %(message)s') logging.root.setLevel(level=logging.INFO) logging.info("running %s" % ' '.join(sys.argv)) #inp = r'D:\Work\NLP\Dataset\new\sogou\output\news_tensite_xml.smarty_segment.txt';#outp = r'D:\Work\NLP\Dataset\new\sogou\output\news_tensite_xml.smarty_corpus.mode';#outp2 = r'D:\Work\NLP\Dataset\new\sogou\output\news_tensite_xml.smarty_corpus.vector';inp = r'D:\Work\NLP\Dataset\new\sogou\output\news_tensite_xml_segment.txt';outp = r'D:\Work\NLP\Dataset\new\sogou\output\news_tensite_xml_corpus.mode';outp2 = r'D:\Work\NLP\Dataset\new\sogou\output\news_tensite_xml_corpus.vector';start = datetime.datetime.now()model = Word2Vec(LineSentence(inp),size=400,window=5,min_count=5)model.save(outp) model.wv.save_word2vec_format(outp2,binary=False)end = datetime.datetime.now()print (end-start)  

附加: 训练完后测试word2vec,代码如下。

import gensimmodel = gensim.models.Word2Vec.load(r'D:\Work\NLP\Dataset\new\sogou\output\news_tensite_xml_corpus.mode')result = model.most_similar(u'喜欢')
for word in result:print( word[0],word[1] )

得到的结果如下:

python下读sougou中文语料文件相关推荐

  1. python json.loads()中文问题-解决Python下json.loads()中文字符出错的问题

    Python:2.7 IDE:Pycharm5.0.3 今天遇到一个问题,就是在使用json.load()时,中文字符被转化为Unicode码的问题,解决方案找了半天,无解.全部代码贴出,很简单的一个 ...

  2. [Python] 先读后覆盖写文件

    Python先读后覆盖写文件 只打开一次文件,先把文件内容读取出来,处理之后形成新的数据,重新写入新的数据,完成先读取后覆盖写文件. 比如有一个文件内容如下,需要将内容全转为大写然后覆盖: Now Y ...

  3. c语言学生管理系统中人数,python下学生管理系统:从文件中读取30位学生的信息(含邮箱),并实现简单的增、删、查找、统计(邮箱使用人数)。---附程序哦!...

    再说python(接上一篇C语言写的): 用python编程最大的好处就简单.易懂,通过这题就可以看出.界面.增.删和查找不用说了吧....统计用python非常的简单,因为它自带信息截取功能,比如是 ...

  4. python logging模块写入中文,文件乱码的解决方法

    一下文件执行将产生乱码,切.log文件显示问好,打不开 import logging def shop_logging(name):name = name+"登录成功!"logge ...

  5. Python下使用subprocess中文乱码的解决方案

     分类: python http://blog.sina.com.cn/s/blog_567002510101c516.html http://www.cnblogs.com/bsmagic/p/43 ...

  6. python怎么读write_Python如何读写文件?python写入文件读写操作详解

    Python文件的打开或创建可以使用函数open().该函数可以指定处理模式,设置打开的文件为只读.只写或可读写状态.open()的声明如下所示. open(file, mode='r', buffe ...

  7. 13651.Python数字读作中文大写

    单位只做到亿,所以就只能处理1亿亿以内的数字.如果需要,可以进一步扩展. 小数部分思路比较简单,只要对照换成中文就行了. 整数部分 1 先参照 排序算法中分而治之的思想,以亿.万.为分割点分割字符串, ...

  8. linux系统python截图不显示中文_Linux运维知识之解决linux系统下python中的matplotlib模块内的pyplot输出图片不能显示中文的问题...

    本文主要向大家介绍了Linux运维知识之解决linux系统下python中的matplotlib模块内的pyplot输出图片不能显示中文的问题,通过具体的内容向大家展现,希望对大家学习Linux运维知 ...

  9. python怎么读取中文文件-python: py2下 中文 的 文件读写 及 打印

    读写中文文件时,不需要考虑编码的情况.此时虽然可以正常从文件中读取中文,也可以正常地将中文写入文件中,但是无法正常打印中文字段到屏幕上:# coding=utf-8 SRC_PATH = './src ...

最新文章

  1. php面向对象mysqli,php+mysqli使用面向对象方式更新数据库实例
  2. 存储过程系列之调试存储过程 SQL Server 2005
  3. java集合框架栈_自己实现集合框架(九):栈接口
  4. VTK:图表之ConstructGraph
  5. Android Context.bindService 返回 false 问题
  6. 编译错误syntax error : missing ';' before 'type'原因探寻
  7. matlab rgb2ntsc函数,matlab 颜色模型之间的转换
  8. java验证邮件正则
  9. 华为 android 5.0系统下载地址,Emui5.0+Android 华为Nova内测包
  10. 同义词词林或哈工大词林扩展的词类.
  11. 什么是JSX、是如何使用以及注意事项
  12. 使用bootstrap写一个注册页面
  13. Codeforces 1146G Zoning Restrictions dp
  14. 美国印第安纳大州Purdue(普杜)大学的法国数学家Louis de Branges de Bourcia周二表示已经证明了黎曼猜想
  15. 网上贵金属交易怎么操作?网上贵金属交易策略有哪些?
  16. P2P技术软件Murder分发大文件
  17. WiFi无线网络参数 802.11a/b/g/n 详解
  18. AD PCB设计笔记
  19. FTP协议的原理及配置
  20. canvas小鸟飞行游戏

热门文章

  1. php -- 取日期
  2. 用CSS3写圆角(超简单)
  3. CentOS下编译安装LAMP开发环境
  4. Tech.Ed 2011微软技术大会(二)之专题讲座
  5. 问题三十六:ray tracing中的Inverse Mapping(3)——圆盘Inverse Mapping
  6. mysql+join+合计_图解MySQL里的各种 JOIN,看完不懂来找我!
  7. 数据挖掘与数据分析的区别是什么
  8. 退火模拟算法c语言程序,C语言模拟退火算法(C language simulated annealing algorithm).doc...
  9. 九小时九个人九扇门(01背包)
  10. 第十二届蓝桥杯大赛软件赛决赛题解