最近在做知识图谱相关工作,源数据主要来自百度百科,互动百科,中文维基百科等。其中中文维基百科提供数据库下载,下文主要讨论如何处理Wiki数据。

1. 中文维基数据下载

下载dump:https://dumps.wikimedia.org/zhwiki/latest/,维基数据主要包含以下几部分

zhwiki-latest-pages-articles.xml.bz2          
词条正文
zhwiki-latest-redirect.sql  词条重定向(同义词)
zhwiki-latest-pagelinks.sql  词条页面内容外链
zhwiki-latest-page.sql 词条标题及摘要
zhwiki-latest-categorylinks.sql  词条开放分类链接

本文处理的数据是: zhwiki-latest-pages-articles.xml.bz2

2. 数据的抽取

Gensim是一个相当专业的主题模型Python工具包,提供了wiki数据的抽取处理类WikiCorpus,能对下载的数据(*articles.xml.bz2)进行抽取处理,得到纯净的文本语料。

class WikiCorpus(TextCorpus):
"""
Treat a wikipedia articles dump (\*articles.xml.bz2) as a (read-only) corpus.
The documents are extracted on-the-fly, so that the whole (massive) dump
can stay compressed on disk.
>>> wiki = WikiCorpus('enwiki-20100622-pages-articles.xml.bz2') # create word->word_id mapping, takes almost 8h
>>> MmCorpus.serialize('wiki_en_vocab200k.mm', wiki) # another 8h, creates a file in MatrixMarket format plus file with id->word
"""

源码在此,感兴趣的可以详细品味。下面是处理代码 process_wiki_1.py,将wiki数据处理得到文本语料 wiki.zh.txt,860M。

# -*- coding: utf-8 -*-
import logging
import sys
from gensim.corpora import WikiCorpus
logging.basicConfig(format='%(asctime)s: %(levelname)s: %(message)s', level=logging.INFO)
'''
extract data from wiki dumps(*articles.xml.bz2) by gensim.
@chenbingjin 2016-05-11
'''
def help():
print "Usage: python process_wiki.py zhwiki-latest-pages-articles.xml.bz2 wiki.zh.txt" if __name__ == '__main__':
if len(sys.argv) < 3:
help()
sys.exit(1)
logging.info("running %s" % ' '.join(sys.argv))
inp, outp = sys.argv[1:3]
i = 0 output = open(outp, 'w')
wiki = WikiCorpus(inp, lemmatize=False, dictionary={})
for text in wiki.get_texts():
output.write(" ".join(text) + "\n")
i = i + 1
if (i % 10000 == 0):
logging.info("Save "+str(i) + " articles")
output.close()
logging.info("Finished saved "+str(i) + "articles")

process_wiki_1.py

3. 数据预处理

由于中文维基包含繁体字及不规范字符,需要进行繁体转简体,以及字符编码转换。同时为了后续工作,需要对语料进行分词处理。

(1)繁体转简体:使用的是开源简繁转换工具OpenCC,安装说明在此,下面是linux下安装方式。

sudo apt-get install opencc
(2)字符编码转换:使用iconv命令将文件转换成utf-8编码
iconv -c -t UTF- < input_file > output_file
#iconv -c -t UTF-8 input_file -o output_file

(3)分词处理:使用jieba分词工具包,命令行分词

python -m jieba input_file > cut_file

下面是处理代码 process_wiki_2.sh

#!/bin/bash

# preprocess data
# @chenbingjin -- # Traditional Chinese to Simplified Chinese
echo "opencc: Traditional Chinese to Simplified Chinese..."
#time opencc -i wiki.zh.txt -o wiki.zh.chs.txt -c zht2zhs.ini
time opencc -i wiki.zh.txt -o wiki.zh.chs.txt -c t2s.json # Cut words
echo "jieba: Cut words..."
time python -m jieba -d ' ' wiki.zh.chs.txt > wiki.zh.seg.txt # Change encode
echo "iconv: ascii to utf-8..."
time iconv -c -t UTF- < wiki.zh.seg.txt > wiki.zh.seg.utf.txt

process_wiki_2.sh

4. 实验结果

处理器 Intel(R) Xeon(R) CPU  X5650  @ 2.67GHz

数据处理过程:主要是分词耗时48m4s。

opencc: Traditional Chinese to Simplified Chinese...

real    0m57.765s
user 0m45.494s
sys 0m6.910s
-----------------------------
jieba: Cut words...
Building prefix dict from /usr/local/lib/python2./dist-packages/jieba/dict.txt ...
Loading model from cache /tmp/jieba.cache
Dumping model to file cache /tmp/jieba.cache
Loading model cost 2.141 seconds.
Prefix dict has been built succesfully. real 48m4.259s
user 47m36.987s
sys 0m22.746s
-----------------------------
iconv: ascii to utf-... real 0m22.039s
user 0m9.304s
sys 0m3.464s

数据处理结果:1.1G 已分词的中文语料

-rw-r--r--  chenbingjin data 860M  7月   : wiki.zh.txt
-rw-r--r-- chenbingjin data 860M 7月 : wiki.zh.chs.txt
-rw-r--r-- chenbingjin data .1G 7月 : wiki.zh.seg.txt
-rw-r--r-- chenbingjin data .1G 7月 : wiki.zh.seg.utf.txt

补充:未分词的wiki语料,有需要的朋友可以下载

参考

1. licstar的博客:维基百科简体中文语料的获取

2. 52nlp:中英文维基百科语料上的word2vec实验

Wiki语料处理的更多相关文章

  1. wiki中文语料的word2vec模型构建

    一.利用wiki中文语料进行word2vec模型构建 1)数据获取 到wiki官网下载中文语料,下载完成后会得到命名为zhwiki-latest-pages-articles.xml.bz2的文件,里 ...

  2. Gensim LDA主题模型实验

    本文利用gensim进行LDA主题模型实验,第一部分是基于前文的wiki语料,第二部分是基于Sogou新闻语料. 1. 基于wiki语料的LDA实验 上一文得到了wiki纯文本已分词语料 wiki.z ...

  3. word2vec使用说明(google工具包)

    word2vec使用说明   转自:http://jacoxu.com/?p=1084. Google的word2vec官网:https://code.google.com/p/word2vec/ 下 ...

  4. 2019年10~11月-NLP工程师求职记录

    求职目标:NLP工程师 为什么想换工作? 除了技术相关书籍,我没读过太多其他类型的书,其中有一本内容短但是对我影响特别大的书--<谁动了我的奶酪>.出门问问是我毕业后的第一份工作,无论是工 ...

  5. wiki中文语料+word2vec (python3.5 windows win7)

    环境: win7+python3.5 1. 下载wiki中文分词语料   使用迅雷下载会快不少,大小为1个多G      https://dumps.wikimedia.org/zhwiki/late ...

  6. 中英文维基百科语料上的Word2Vec实验

    最近试了一下Word2Vec, GloVe 以及对应的python版本 gensim word2vec 和 python-glove,就有心在一个更大规模的语料上测试一下,自然而然维基百科的语料进入了 ...

  7. Windows下基于python3使用word2vec训练中文维基百科语料(二)

    在上一篇对中文维基百科语料处理将其转换成.txt的文本文档的基础上,我们要将为文本转换成向量,首先都要对文本进行预处理 步骤四:由于得到的中文维基百科中有许多繁体字,所以我们现在就是将繁体字转换成简体 ...

  8. Windows下基于python3使用word2vec训练中文维基百科语料(一)

    在进行自然语言处理之前,首先需要一个语料,这里选择维基百科中文语料,由于维基百科是 .xml.bz2文件,所以要将其转换成.txt文件,下面就是相关步骤: 步骤一:下载维基百科中文语料 https:/ ...

  9. 【NLP】Python NLTK获取文本语料和词汇资源

    Python NLTK 获取文本语料和词汇资源 作者:白宁超 2016年11月7日13:15:24 摘要:NLTK是由宾夕法尼亚大学计算机和信息科学使用python语言实现的一种自然语言工具包,其收集 ...

随机推荐

  1. spark 1.5.2配置记录

    1)slaves # A Spark Worker will be started on each of the machines listed below. dataNode 2)spark-env ...

  2. IIS7 WebAPI 404.0 Error

    <system.webServer><modules runAllManagedModulesForAllRequests="true"/></sys ...

  3. JSTL跳出<c:forEach>循环

    <c:forEach items="${consultPager.dataList }" var="consult"> <tr> < ...

  4. Bootstrap<基础十四> 按钮下拉菜单

    使用 Bootstrap class 向按钮添加下拉菜单.如需向按钮添加下拉菜单,只需要简单地在在一个 .btn-group 中放置按钮和下拉菜单即可.也可以使用 <span class=&qu ...

  5. JSP内置对象---response 响应

    将response.jsp 页面的html标签(包括html.head.body)全部删掉. <%@ page language="java" import="ja ...

  6. pickle 序列化反序列化

    python的pickle模块实现了基本的数据序列和反序列化.通过pickle模块的序列化操作我们能够将程序中运行的对象信息保存到文件中去,永久存储:通过pickle模块的反序列化操作,我们能够从文件 ...

  7. js回顾2

    1:事件流:一个事件发生时按一个方向传播 eg:a标签->html 冒泡:从里到外(一般的选择)-----IE只有冒泡 捕获:从外到里-----网景只有捕获(已经不存在了) 2.事件处理的两种种 ...

  8. 关于mongodb的复合索引新功能

    最新在做一个项目,由于查询字段较多,且查询较频繁,所以我做了一个复合索引,将所有需要查询的字段都做到索引里,做了一个名为s_1_m_1_c_1_v_1_year_1_month_1_week_1_da ...

  9. 2014年7月份第1周51Aspx源码发布详情

      QF万能视频播放器源码  2014-6-30 [VS2010]本源码是一个万能视频播放器源码.可实现各种格式的影片播放功能. 1.点击[开始]按钮,弹出窗口,选择影片路径,确定后即可播放.可拖拽滚 ...

  10. Android 2016新技术

    Android 2016新技术 版权声明:本文为博主原创文章,未经博主允许不得转载. 2016你需要了解Android有以下新兴的技术与框架,有些也许还不成熟,但是你应该去了解下,也许就是未来的方向. ...