2019独角兽企业重金招聘Python工程师标准>>>

为了练习Gensim中文词向量建模,要用到wiki文件做语料库。因为这个文件是xml格式的,需要把它转成文本格式,所以有了下面的Python代码。

1、参考的代码

在某视频教程中看到的代码是这样写的:

运行后报错:

  File "process-xml.py", line 32, in <module>s = space.join(text)
TypeError: sequence item 0: expected a bytes-like object, str found

2、做类型转换

既然text是str,那么就将str转成bytes。

修改了代码:

    for text in wiki.get_texts():for item in text:s = space.join(item.encode(encoding="utf-8"))s = space.join(text)+"\n"

还是报错。

  File "process-xml.py", line 30, in <module>s = space.join(item.encode(encoding="utf-8"))
TypeError: sequence item 0: expected a bytes-like object, int found

3、网上搜索到说是py版本的原因

觉得可能要解决了,然而仔细一看,他的写法跟第1处的一样。

文章地址:https://www.cnblogs.com/combfish/p/6413553.html

4、那么就试试用老版本的写法

就是第24行space不用b类型。(注意26行,没有写编码)

又报错了:

  File "process-xml2.py", line 30, in <module>output.write(s)
UnicodeEncodeError: 'gbk' codec can't encode character '\u0107' in position 200: illegal multibyte sequence

既然是gbk的问题,那么把编码改成u8呢?

于是把chcp 65001试着这样把编程改成u8,不出所料,没有用。

既然是gbk的问题,那就在虚拟机里面跑吧,可想而知,很慢。3G内存的Ubuntu虚拟机,跑1.49G数据,耗时97分钟,Windows跑大概半小时左右。

5、准备到Stack Overflow上提问

为了准备提问内容,就重演一遍灾难过程。

突然发现跑成功了。

仔细一看,这回原来是第26行的原因。output = open(outp,'w',encoding='utf-8'),输出要加上编码。

6、完整代码

因为这个错误地方是在文件全部读完,写到磁盘的时候的代码,需要等一段时间,才会走到这段代码,所以测试时,用的是一个10M的小WIKI文件测试的。

#-*- coding: utf-8 -*-
# @File    : process-xml.pyimport logging
import os.path
import sys
from gensim.corpora import WikiCorpusif __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)logger.info("running %s"% ' '.join(sys.argv))if len(sys.argv) > 3:print(globals()['__doc__'] % locals())sys.exit(1)inp,outp = sys.argv[1:3]space = ' 'i = 0output = open(outp,'w',encoding='utf-8')wiki = WikiCorpus(inp,lemmatize=False,dictionary={ })for text in wiki.get_texts():s = space.join(text)+"\n"output.write(s)i = i+1if(i% 10000 == 0):logger.info("Saved "+str(i) + " articles")output.close()logger.info("Finished Saved "+ str(i) +" articles")# python process-xml.py zhwiki-20180620-pages-articles.xml.1.49G.bz2 wiki.zh.1.49G.text

转载于:https://my.oschina.net/datadev/blog/1836529

维基百科文件解析成中文遇到的变量类型、编码问题相关推荐

  1. 自定义字体文件解析成人眼可识别文字

    # coding=utf-8 from fontTools.ttLib import TTFont from PIL import Image, ImageDraw, ImageFont #绘制图片 ...

  2. 看这里,教你如何快速将pdf文件翻译成中文

    因为网上下载的PDF资料,往往掺杂着一些英文,所以中英文翻译是一件很平常的事,毕竟不是每个人的英文都那么好,轻轻松松的就能够看完一篇英文的文件,那么,我们就要寻找翻译工具来帮助我们看完了,那么如何将P ...

  3. [评测] 利用维基百科实现高质量中文简繁转换

    自从有了简体中文以来,中文的简繁转换便成了一项新兴职业,特别是近年来,两岸三地的交流愈发频繁,这种需求更为旺盛.当然,你可以付钱选择专业的公司来帮您完成文件.文章等等的职业级简繁转换:然而,您也可以选 ...

  4. java 文件解析成JSON数据(其三)

    个人用途,用于将数据解析成json格式使用 import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; ...

  5. mot文件解析成bin

    mot固件文件转成bin文件 mot文件介绍 开始解析 mot文件介绍 mot s19 bin hex都可以用于固件文件的存储,其中bin文件就是固件原始数据,只记录固件的二进制数据流,mot文件实际 ...

  6. long类型怎么转换成string_Python知识点-Python变量类型有哪些?

    Python的内置变量类型是非常基础的知识点,善用变量类型转换在日常的工作学习中会给我们带来非常大的帮助. 相对于其他语言,Python的变量类型既有自己的特色方法,也有借鉴前辈的优秀之处.今天酷仔整 ...

  7. 怎样将英文html文件转换成中文乱码,解决html导出pdf中文乱码问题的正确姿势

    简介 jspdf是歪果仁开发的,因此在一开始就没想过支持非英文以外的文字,这就导致了非英文的文本都是乱码. 因此就有其他大佬给增加了其他解决方案,到了1.5版本也正式加入了非英文支持的解决方案. 解决 ...

  8. cron翻译_将定时任务cron 解析成中文

    在使用定时器 quartz 时,其中的cron 表达式,老板表示作为开发的你能看懂外,其他的非开发同事可能看不懂,要用一个他们能看懂的方式表达出来. 还好我们的项目要求的表达式不是特别的麻烦,所以就写 ...

  9. js把base64串解析成中文_回文问题终极篇:最小代价构造回文串

    学算法认准 labuladong 东哥带你手把手撕力扣? 点击下方卡片即可搜索? 读完本文,你可以去力扣完成第 1312 题「让字符串成为回文串的最少插入次数」,难度 Hard. 回文串就是正着读反着 ...

最新文章

  1. Windows10上安装Git 2.10.2详细图解
  2. android Handler更新UI
  3. MIT 算法导论 (二)Math Notation
  4. zookeepe安装配置_Zookeeper安装配置及简单使用
  5. 职称英语与计算机考试试题,2020年职称计算机考试模拟选择试题及答案.doc
  6. IIS5.1安装设置-Sql Sever2008安装设置-移动端设置等必读
  7. 后缀树c语言算法,C语言数据结构之中缀树转后缀树的实例
  8. SVPWM算法的推导
  9. USB 协议整理 八:STM32官方USB库
  10. LaTex 论文排版(1): Win10 下 LaTex所需软件安装 (Tex live 2018 + Tex studio)
  11. 命令行查看文件夹大小
  12. Vue 作者尤雨溪,引路中国程序开发
  13. 香橙派PC 2(H5)配置备忘录
  14. H5-农阳历日期互转并对应
  15. matlab中numden函数,numden函数 MATLAB里面numden函数有什么用?
  16. 【原创】DDR3 SO-DIMM 内存条硬件知识
  17. H.264/AVC标准参考软件 JM
  18. winform中使用ReportViewer的时候,找不到报表数据面板.
  19. 不用深度学习网络,只需预先设置NAS算法,就能实现AutoML自动机器学习的革命吗?
  20. 微机原理与接口技术重要的知识点

热门文章

  1. 最近安装了Netscape Navigator 9.0英文版,真好用!
  2. 详解promise、async和await的执行顺序
  3. 前嗅ForeSpider教程:采集图片/视频/资源文件的链接地址 1
  4. Centos7下,LVM根分区扩容
  5. 一个页面可以重复调用的TAB选项卡切换js代码 鼠标悬浮
  6. IOS Socket 01-网络协议基础知识
  7. iOS7新特性的兼容性处理方法 之三
  8. Android工程重新编译问题
  9. python与java的默认入参(重载)
  10. SQLServer 语句相关