我的编程空间,编程开发者的网络收藏夹
学习永远不晚

中文维基百科文本数据获取与预处理

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

中文维基百科文本数据获取与预处理

照例,先讲下环境,Mac OSX 10.11.2 ,Python 3.4.3。

下载数据

方法1:使用官方dump的xml数据

最新打包的中文文档下载地址是:https://dumps.wikimedia.org/zhwiki/latest/zhwiki-latest-pages-articles.xml.bz2 。

方法2:也是官方,结构化数据(json)

下载地址是:https://dumps.wikimedia.org/wikidatawiki/entities/ 。目前尚未测试使用此数据,不多作介绍。但数据模型和已有的工具都可以在wikidata的站点上找到。

解压与转存

我使用方法1,下载后需要对该xml文件的压缩包作处理,所幸gensim的WikiCorpus已经预置了部分处理。几行关键的python代码如下:

input_file = "zhwiki-latest-pages-articles.xml.bz2"
wiki = WikiCorpus(input_file, lemmatize=False, dictionary={})
    for text in wiki.get_texts():
        str_line = bytes.join(b' ', text).decode()
        #以下可以存入文件或数据库

更详细的关于WikiCorpus的介绍可以看这里。

在上面的代码中,补下自己的漏,python3里,str和bytes是两个不同的东西,有点类似python2中的str和unicode。下面是str和bytes的相互转换方法:

# str转bytes
data = ""  #string
data = "".encode()  #bytes
data = b""  #bytes

# bytes转str
data = b""  #bytes
data = b"".decode()  #string
data = str(b"")  #string

除了用gensim,还有个哥们写了一个wikiextractor工具来处理wiki的dump数据,若感兴趣可拿来参考,详见github地址。

根据我的数据,1.17G的原始数据处理所得的文本文件845M,246497篇文章(这个数字随时间往后是越来越大)。

繁简转换

这是个糟糕的话题,占这么大篇幅真得感叹中华崛起之重要。中文维基数据繁简混杂——大家都说存在这个问题,但wikipedia的网站是将繁体中文和简体中文分开处理的,所以一直觉得从数据库到dump结构都应有方法将两者区分开,暂罢,待有空研究其数据时再议。关于繁简转换,来斯惟和52nlp的博文都用到了一个繁简转换工具——OpenCC,关于此,引官方介绍如下:

Open Chinese Convert(OpenCC)是一個中文簡繁轉換開源項目,提供高質量的簡繁轉換詞庫和可供調用的函數庫(libopencc)。還提供命令行簡繁轉換工具,人工校對工具,詞典生成程序,以及圖形用戶界面。

这里使用的是命令行工具。至于安装方法,可以看Google Code上的项目页面。如在Mac下,直接:

brew install opencc

将繁体转为简体的命令如下:

opencc -i wiki_zh.text -o wiki_zhs.text -c zht2zhs_config.json
那个json是什么鬼?OpenCC的配置文件,现在已支持json写法,如下:

{
  "name": "Traditional Chinese to Simplified Chinese",
  "segmentation": {
    "type": "mmseg",
    "dict": {
      "type": "ocd",
      "file": "TSPhrases.ocd"
    }
  },
  "conversion_chain": [{
    "dict": {
      "type": "group",
      "dicts": [{
        "type": "ocd",
        "file": "TSPhrases.ocd"
      }, {
        "type": "ocd",
        "file": "TSCharacters.ocd"
      }]
    }
  }]
}

中文分词

OK,这是个大话题,有很多选择,网上有不少推荐结巴分词,其实是挺不错的。但这里使用哈工大的LTP,github地址,篇幅原因暂时不详细介绍这个了,只讲我认为的三点:

  1. 计算语言学的基本任务,解释地比较透彻,无论是代码还是文档。

  2. 配套论文产量和质量都不错。

  3. 良心的python封装。

尽管,国内大学中不乏类似工作,清华、复旦等也做了不少。

LTP目前我使用release里的3.3.2,模型文件使用3.3.1,python封装使用0.1.9。由于是Mac下使用源文件编译,所以由于OSX编译器类型变迁,pyltp 0.1.9的setup.py中一定要记得修改这行:

extra_compile_args += ['-std=c++11', '-Wno-c++11-narrowing',"-mmacosx-version-min=10.8",'-stdlib=libc++']

其重点是-mmacosx-version-min这个参数。当然,根据issue记录,25天前这个问题已修复且合并进mater分支。所以据拍脑袋估计,git源码安装也是可行:

$ git clone https://github.com/HIT-SCIR/pyltp
$ git submodule init
$ git submodule update
$ python setup.py install

具体分词的写法就比较简单了,例子如下:

# -*- coding: utf-8 -*-
from pyltp import Segmentor
segmentor = Segmentor()
segmentor.load("/path/to/your/cws/model")
words = segmentor.segment("这句句子要分词")
print "|".join(words)
segmentor.release()

找一篇语料对比下分词前后,分词前:

巨蟹座 是一颗环绕巨蟹座 a运转的系外行星 轨道周期为 地球日 它是距离其中央恒星第三近的行星 其质量接近于土星 该行星于 日被发现 发现
和大多数系外行星一样 而之前 巨蟹座 该恒星仍然会出现视向速度位移 进一步的探测发现在距中央恒星 但是即使摒除了这两颗行星的影响
中央恒星仍然存在周期为 地球日的扰动现象 由于该周期接近于巨蟹座 a的自转周期 尽管如此 在同一份报告中 科学家宣布发现了巨蟹座 d和巨蟹座
对其中央恒星进行的长达 而且视向速度位移的幅度较大 无法为巨蟹座 a不大活跃的光球层活动所解释 轨道和质量 在巨蟹座 行星系统中
迄今为止已经发现了 颗行星 颗行星中 巨蟹座 c的轨道属于轻度偏心轨道 其远拱点较之近拱点远了 该行星的轨道周期要长于热木星
但是其轨道与巨蟹座 模拟表明该行星与巨蟹座 的比值 由于视向速度法的局限性 如果此预测无误 那么该行星的真实质量就为 倍木星质量 物理特性
由于科学家只能间接地探测该行星 所以至今还不知道其半径 物质构成和表面温度 该行星质量接近土星 所以它可能属于类木行星 从而并不拥有固体表面
参考文献 外部链接 extrasolar visions cancri

分词后:

巨蟹座|是|一|颗|环绕|巨蟹座|a|运转|的|系|外行星|轨道|周期|为|地球日|它|是|距离|其|中央|恒星|第三|近|的|行星|其|质量|接近|于|土星|该|行星|于|日|被|发现|发现|和|大多数|系外|行星|一样|而|之前|巨蟹座|该|恒星|仍然|会|出现|视|向|速度|位移|进一步|的|探测|发现|在|距|中央|恒星|但是|即使|摒除|了|这|两|颗|行星|的|影响|中央|恒星|仍然|存在|周期|为|地球日|的|扰动|现象|由于|该|周期|接近|于|巨蟹座|a|的|自转|周期|尽管|如此|在|同一|份|报告|中|科学家|宣布|发现|了|巨蟹座|d|和|巨蟹座|对|其|中央|恒星|进行|的|长|达|而且|视|向|速度|位移|的|幅度|较|大|无法|为|巨蟹座|a|不|大|活跃|的|光球层|活动|所|解释|轨道|和|质量|在|巨蟹座|行星|系统|中|迄今为止|已经|发现|了|颗|行星|颗|行星|中|巨蟹座|c|的|轨道|属于|轻度|偏心|轨道|其|远|拱点|较之|近|拱点|远|了|该|行星|的|轨道|周期|要|长|于|热|木星|但是|其|轨道|与|巨蟹座|模拟|表明|该行星|与|巨蟹座|的|比值|由于|视|向|速度|法|的|局限性|如果|此|预测|无误|那么|该行星|的|真实|质量|就|为|倍|木星|质量|物理|特性|由于|科学家|只能|间接|地|探测|该行|星所|以至今|还|不|知道|其|半径|物质|构成|和|表面|温度|该行|星|质量|接近|土星|所以|它|可能|属于|类|木行星|从而|并|不|拥有|固体|表面|参考|文献|外部|链接|extrasolar|visions|cancri

小结

这篇主要基于网络上的资料,重走了一遍数据下载到中文分词的技术点,并汇总了已知的工具链。上述结果对比维基的原网页,明显还存在不少问题,例如语料中的数字均丢失了,对于其中数量、年份等信息对于文本理解其实很重要。尚不确定是否是WikiCorpus造成的问题。

下一篇计划尝试用此语料做词嵌入相关的部分实验。

To be continued.

原文链接:http://qiancy.com/2016/05/08/wiki-text-analysis-prepare/

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

中文维基百科文本数据获取与预处理

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

中文维基百科文本数据获取与预处理

照例,先讲下环境,Mac OSX 10.11.2 ,Python 3.4.3。下载数据方法1:使用官方dump的xml数据最新打包的中文文档下载地址是:https://dumps.wikimedia.org/zhwiki/latest/zh
2023-01-31

Python 专题五 列表基础知识(二维list排序、获取下标和处理txt文本实例)

通常测试人员或公司实习人员需要处理一些txt文本内容,而此时使用Python是比较方便的语言。它不光在爬取网上资料上方便,还在NLP自然语言处理方面拥有独到的优势。这篇文章主要简单的介绍使用Python处理txt汉字文字、二维列表排序和获取
2022-06-04

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录