Wiki语料处理
最近在做知识图谱相关工作,源数据主要来自百度百科,互动百科,中文维基百科等。其中中文维基百科提供数据库下载,下文主要讨论如何处理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
- 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语料处理的更多相关文章
- wiki中文语料的word2vec模型构建
一.利用wiki中文语料进行word2vec模型构建 1)数据获取 到wiki官网下载中文语料,下载完成后会得到命名为zhwiki-latest-pages-articles.xml.bz2的文件,里 ...
- Gensim LDA主题模型实验
本文利用gensim进行LDA主题模型实验,第一部分是基于前文的wiki语料,第二部分是基于Sogou新闻语料. 1. 基于wiki语料的LDA实验 上一文得到了wiki纯文本已分词语料 wiki.z ...
- word2vec使用说明(google工具包)
word2vec使用说明 转自:http://jacoxu.com/?p=1084. Google的word2vec官网:https://code.google.com/p/word2vec/ 下 ...
- 2019年10~11月-NLP工程师求职记录
求职目标:NLP工程师 为什么想换工作? 除了技术相关书籍,我没读过太多其他类型的书,其中有一本内容短但是对我影响特别大的书--<谁动了我的奶酪>.出门问问是我毕业后的第一份工作,无论是工 ...
- wiki中文语料+word2vec (python3.5 windows win7)
环境: win7+python3.5 1. 下载wiki中文分词语料 使用迅雷下载会快不少,大小为1个多G https://dumps.wikimedia.org/zhwiki/late ...
- 中英文维基百科语料上的Word2Vec实验
最近试了一下Word2Vec, GloVe 以及对应的python版本 gensim word2vec 和 python-glove,就有心在一个更大规模的语料上测试一下,自然而然维基百科的语料进入了 ...
- Windows下基于python3使用word2vec训练中文维基百科语料(二)
在上一篇对中文维基百科语料处理将其转换成.txt的文本文档的基础上,我们要将为文本转换成向量,首先都要对文本进行预处理 步骤四:由于得到的中文维基百科中有许多繁体字,所以我们现在就是将繁体字转换成简体 ...
- Windows下基于python3使用word2vec训练中文维基百科语料(一)
在进行自然语言处理之前,首先需要一个语料,这里选择维基百科中文语料,由于维基百科是 .xml.bz2文件,所以要将其转换成.txt文件,下面就是相关步骤: 步骤一:下载维基百科中文语料 https:/ ...
- 【NLP】Python NLTK获取文本语料和词汇资源
Python NLTK 获取文本语料和词汇资源 作者:白宁超 2016年11月7日13:15:24 摘要:NLTK是由宾夕法尼亚大学计算机和信息科学使用python语言实现的一种自然语言工具包,其收集 ...
随机推荐
- Handle机制的原理
Android提供了Handle和Looper来满足线程间的通信.Handle先进先出原则.Looper类用来管理特定线程内对象之间的消息交换(Message Exchange). 1.Looper: ...
- sfliter__except_handler4
sfliter源码在vs08中编译 出现 错误error LNK2019: unresolved external symbol __except_handler4 referenced in fun ...
- Hibernate+Oracle注解式完整实例
MyEclipse10,新建Web Project,取名hibernate, jar包 1.Cat.java (实体类) package com.hibernate.bean; import java ...
- koa框架异步返回值的操作(co,koa-compose)
最近在做demo的时候使用了koa框架,自己做了一个静态服务器,首先判断访问文件是否存在,在回调函数中设置了this.body,run之后,各种404,花了N长的时间把koa-compose和co模块 ...
- C++小项目:directx11图形程序(八):particleSysclass
粒子系统类,粒子系统是游戏里细小元素的控制系统,虽然感觉上它对游戏的影响不大,但是其实有了它能给游戏增色不少.粒子系统控制着细小元素的生死,运动,纹理.对它的编写让我知道,游戏里的这一片从天空飘落的雪 ...
- web开发流程(传智播客-方立勋老师)
1.搭建开发环境 1.1 导入项目所需的开发包 dom4j-1.6.1.jar jaxen-1.1-beta-6.jar commons-beanutils-1.8.0.jar commons-log ...
- 使用开源DocX 生成Word
工作中遇到这样一个需求,要求把选中的订单导出到一张Word中(要求不能使用Com组件) 要求实现图如下 下面是代码实现 先引用 DocX string tempName = Guid.NewGuid ...
- jqzoom与scrollpic配合的问题
<script type="text/javascript"> //以下两个方法的执行顺序不能互换,否则zoom方法的单击缩略图事件会失效 if (document.a ...
- 使用cocoapods碰到的难题
-------------报错---------- 1. git clone error: RPC failed; result=56, HTTP code = 200 解决办法: git confi ...
- tar命令的使用
tar格式,会打包成一个文件,可以对多个目录,或者多个文件进行打包 tar命令只是打包,不会压缩,打包前后大小是一样的 tar命令 -c //打包 -x //解压 -f //指定文件 ...