最近做实验需要较大规模的中文语料,很自然的就想到使用维基百科的中文数据。
使用维基百科做训练语料有很多好处:
- 维基百科资源获取非常方便,有 Wiki Dump 可以直接下载,所有的最新备份都在里面。最近的一次备份是3月底,也就是5天前。相比之下,其他很多语料都需要用爬虫抓取,或者付费获得。
- 维基百科的文档解析有非常多的成熟工具,直接使用开源工具即可完成正文的提取。
- 维基百科的质量较高,而且领域广泛(比较适合我要做的问题)。
当然,缺点也有:最主要的就是数量较少,相比国内的百度百科、互动百科等,数据量要少一个数量级。
直接切入正题。
第一步,下载中文的 Wiki Dump
链接是:http://download.wikipedia.com/zhwiki/latest/zhwiki-latest-pages-articles.xml.bz2。这个压缩包里面存的是标题、正文部分,如果需要其他数据,如页面跳转、历史编辑记录等,可以到目录下找别的下载链接。
第二步,使用 Wikipedia Extractor 抽取正文文本
Wikipedia Extractor 是意大利人用 Python 写的一个维基百科抽取器,使用非常方便。下载之后直接使用这条命令即可完成抽取,运行了大约半小时的时间。
bzcat zhwiki-latest-pages-articles.xml.bz2 | python WikiExtractor.py -b 1000M -o extracted >output.txt
参数 -b 1000M 表示以 1000M 为单位切分文件,默认是 500K。由于最后生成的正文文本不到 600M,把参数设置的大一些可以保证最后的抽取结果全部存在一个文件里。
第三步,繁简转换
维基百科的中文数据是繁简混杂的,里面包含大陆简体、台湾繁体、港澳繁体等多种不同的数据。有时候在一篇文章的不同段落间也会使用不同的繁简字。
解决这个问题最佳的办法应该是直接使用维基百科自身的繁简转换方法(参照 http://zh.wikipedia.org/wiki/Wikipedia:繁简处理)。不过维基百科网站虽然是开源的,但要把里面的繁简转换功能拆解出来,有一定的难度。
为了方便起见,我直接使用了开源项目 opencc。参照安装说明的方法,安装完成之后,使用下面的命令进行繁简转换,整个过程大约需要1分钟。
opencc -i wiki_00 -o wiki_chs -c zht2zhs.ini
命令中的 wiki_00 这个文件是此前使用 Wikipedia Extractor 得到的。
到此为止,已经完成了大部分繁简转换工作。实际上,维基百科使用的繁简转换方法是以词表为准,外加人工修正。人工修正之后的文字是这种格式,多数是为了解决各地术语名称不同的问题:
他的主要成就包括Emacs及後來的GNU Emacs,GNU C 編譯器及-{zh-hant:GNU 除錯器;zh-hans:GDB 调试器}-。
对付这种可以简单的使用正则表达式来解决。一般简体中文的限定词是 zh-hans 或 zh-cn,在C#中用以下代码即可完成替换:
s = Regex.Replace(s, @"-\{.*?(zh-hans|zh-cn):([^;]*?);.*?\}-", @"$2");
由于 Wikipedia Extractor 抽取正文时,会将有特殊标记的外文直接剔除,最后形成类似这样的正文:
西方语言中“数学”(;)一词源自于古希腊语的()
虽然上面这句话是读不通的,但鉴于这种句子对我要处理的问题影响不大,就暂且忽略了。最后再将「」「」『』这些符号替换成引号,顺便删除空括号,就大功告成了!
通过上述方法得到的维基百科简体中文纯文本语料约 528M。
Wiki中的正则表达式我可以使用perl來置換嗎
我不想再回到PC處理
肯定可以用perl的。不过我不会perl,没法把C#那段代码改过去。
我下载了两个文件 运行bzcat zhwiki-latest-pages-articles.xml.bz2 | python WikiExtractor.py -b1000M -o extracted >output.txt命令的时候 显示的是 少参数 是还要传wikidump和outputdir两个参数吗 这两个参数应该写什么
wikidump就是前面的输入,outputdir是extracted。应该能正常运行才是。我用的时候就用的这个命令,一字不差。不知道你那具体的提示是什么呢?
我跟他的是一样的错误:
[hadoop@master wiki]$ bzcat zhwiki-latest-pages-articles.xml.bz2 | python WikiExtractor.py -b1000M -o extracted > output.txt
usage: WikiExtractor.py [-h] [-o OUTPUT] [-b n[KMG]] [-B BASE] [-c] [-l]
[-ns ns1,ns2] [-q] [–debug] [-s] [-a]
[–templates TEMPLATES] [–no-templates]
[–threads THREADS] [-v]
input
WikiExtractor.py: error: too few arguments
现在WikiExtractor.py和压缩文件都在这个目录下运行的
这下真不知道了,我这里没这个问题。如果需要我可以把我转换好的发给你。
能不能也发给我一份转换好的 谢谢了
链接: http://pan.baidu.com/s/1dDxwF3j 密码: v9da
您好,您转换好的能发一份给我吗?谢谢
648127199@qq.com
放到网盘了
链接:http://pan.baidu.com/s/1dDxwF3j 密码:v9da
你好,可否再把网盘链接分享一份,之前的链接过期了,谢谢。
链接: https://pan.baidu.com/s/1hulIt2c 密码: yij7
先解压,再用WikiExtractor处理。解压用bunzip2 文件名
再用python WikiExtractor.py 文件名 -b1000M -o extracted>output.txt
文件下载下来没有后缀啊,怎么办
看看下载链接是什么文件名,然后自己加个后缀。可能是bz2压缩格式或者文本格式吧。
使用这个版本的WikiExtractor.py。
https://github.com/bwbaugh/wikipedia-extractor/blob/97f354240a1c91cce369598eed50e60774897668/WikiExtractor.py
基础问题就不要问了,看不懂英语可以去翻译
-b1000M 这边选项和参数在一块才报错的,没人说提一下吧,万一还有人这样 😉
-b空格1000M
我在redhat里面能用opencc吗?
Fedora可以,猜想redhat也可以吧
用了同样读方法,得到的只有数字和名称如下面的格式:
13 数学
18 哲学
21 文學
22 历史
25 计算机科学
……
而且总共只有18M多
但是下载的dump里面明明有全文,不知道是为什么
没遇到过这个问题
output.txt里的是日志,文件在-o指定的目录下
您好,我遇见的问题与您一样,请问您解决了吗?您当时是怎么解决的,我现在也遇见了,在控制台显示的是举个例子:ERROR:root:Processing page:3900 奥林匹克;
我不需要所有的资料,我只需要在维基百科上抓取包含某个关键字的一系列页面的正文,要怎么弄?求教啊
可能比较方便的就是爬搜索引擎吧。不过完整的语料也不大啊,解压之后也就若干G,下载下来挺快的。
博主,您好!请问目前有没有大规模已经处理好的中文语料,还是说要做这部分工作需要自己去爬,有没有现成的?
https://pan.baidu.com/s/1dDjddip
有一份比较早期的
哦,谢谢啊,WikiExtractor.py怎么用啊?请教一下,谢谢
我下了python,但在dos中运行不了,
是程序WikiExtractor.py不能执行
运行WikiExtractor.py,输入命令没反应啊,咋回事?
要不博主加个好友吧,帮帮忙咯
博主,我想问一下,我在繁体转简体时,安装那个opencc,安装好了,我输入opencc -i wiki.zh.text -o wiki.zh.text.jian -c zht2zhs.ini后,为什么出现了glibc detected***opencc :realloc():invalid next size…,得到的输出文件永远是空的,怎么回事呢?
不太清楚,我没遇到过。你可以搜一下opencc的论坛,应该更有帮助。
你好 请问你的zht2zhs.ini 文件是如何设置的呢?
title = trad_to_simp
description = Standard Configuration for Conversion from Traditional Chinese to Simplified Chinese
dict0 = OCD trad_to_simp_phrases.ocd
dict0 = OCD trad_to_simp_characters.ocd
我设置成上面那样,可是执行之后,出现了下面的错误,谢谢了
Invalid format: Error parsing JSON
我是用的是默认配置,没有修改过。opencc的问题可以到他的官网论坛提问,会有更好的解答。
根据新版的OpenCC说明 https://github.com/BYVoid/OpenCC
繁体到简体的命令应该是 opencc -i wiki_00 -o wiki_chs -c t2s.json
哭了,楼主的半小时解析完xml是怎么办到的。。。我这儿都跑了19个小时了还在刷。。。现在刷到:
INFO: 1606843 陈玉先
INFO: 1606848 格里特·尤拉克
INFO: 1606855 鎌倉七口
INFO: 1606860 變身男女Chok Chok Chok
呃,我也不知道。。。等等吧。。。
您好 我下载了转好的语料 但是解压之后没有后缀 显示是文件类型 应该如何处理呢
一般都是文本文件吧,如果不是的话,随便加个.zip之类的后缀,看看能不能解压缩。
楼主 opencc具体是怎么使用的
https://github.com/BYVoid/OpenCC
可以看一下文档,里面介绍的很详细。
是用的Python2,还是Python3。我也是这个错误
WikiExtractor.py -b1000M -o extracted > output.txt
usage: WikiExtractor.py [-h] [-o OUTPUT] [-b n[KMG]] [-B BASE] [-c] [-l]
[-ns ns1,ns2] [-q] [–debug] [-s] [-a]
[–templates TEMPLATES] [–no-templates]
[–threads THREADS] [-v]
input
WikiExtractor.py: error: too few arguments
我当时用的是python2
现在这个问题解决了吗?怎么解决的
WikiExtractor.py -b 5000M -o zhwiki-latest-pages-articles.extracted.txt zhwiki-latest-pages-articles.xml.bz2
请问一下,英文的下载下来要经过怎么样处理才能用做训练高质量的词向量
我是用Stanford Tokenizer处理了一下,主要就是把标点符号和单词分开。如果任务不区分大小写,还可以把训练语料全转小写。
你好,我最近又拜读了你的博士论文,有几个问题。你在维基百科上实验的时候是如何打乱文章顺序的,还有就是子集是怎么抽取的,能否参考一下你的实现代码~~
直接用linux命令shuf和head就行了
请问来博士,你博士毕业论文中提到的纽约时报语料是在哪里下载的,方便给个链接吗。
是实验室购买的语料
https://catalog.ldc.upenn.edu/ldc2008t19
bzcat是linux的命令吗,请问windows怎么办
先找个解压工具解压了,然后就一样了。
你好。openCC的安装说明无法打开了,能请教一下如何安装吗
https://github.com/BYVoid/OpenCC
#/bin/sh
bzcat zhwiki-latest-pages-articles.xml.bz2 | \
python WikiExtractor.py -o – | \
sed -e ‘s///g’ -e ‘s///g’ -e ‘/^$/d’ | \
opencc -c zht2zhs.ini | \
sed -r -e ‘s/(.)/\ \1/g’ -e ‘s/^\ //g’ > zhs_wiki.txt
文中贡献的语料是2015年的,我们可以做一个任务,定时刷一下。
不错,学习了,谢谢!
在Ubuntu系统中执行opencc操作的时候建议,先执行一条
-sudo apt-get update
要不然执行
-sudo apt-get install opencc
的时候会报各种依赖错误,按照博主的方法外加Python对下载到的预料做的预处理,终于成功了,感谢博主!
后续向博主学习
使用这个命令就可以了python WikiExtractor.py -cb1000M -o extracted enwiki-20150602-pages-articles1.xml-p000000010p000010000.bz2