如何使用中文维基百科语料

简介: 前言在做自然语言处理时很多时候都会需要中文语料库,高质量的中文语料库较难找,维基百科和百度百科算是比较不错的语料库。

前言

在做自然语言处理时很多时候都会需要中文语料库,高质量的中文语料库较难找,维基百科和百度百科算是比较不错的语料库。其中维基百科会定时将语料库打包发布 https://dumps.wikimedia.org/zhwiki/ ,可以下载最新版本的语料库。而百度百科则需要自己去爬,不过也有人把爬好的语料贡献出来了,https://pan.baidu.com/share/init?surl=i3wvfil提取码 neqs 。

这篇文章主要讲下如何使用中文维基百科的语料库。

Wikipedia Dump

通过 https://dumps.wikimedia.org/zhwiki/latest/zhwiki-latest-pages-articles.xml.bz2 可以下载最新的中文维基百科语料,目前大小为1.37G左右,里面内容以xml格式保存,所以我们后续还是需要做处理的。xml节点信息类似如下

<page>
  <title></title>
  <id></id>
  <timestamp></timestamp>
  <username></username>
  <comment></comment>
  <text xml:space="preserve"></text>
</page>

根据标签名容易知道各个节点内容表示的意义,text节点为文章内容,它里面其实还包含了很多其他的一些符号,也是需要过滤掉的。

抽取数据

对于上述下载的语料库,需要进一步抽取,可以选择
* 自己写程序抽取。
* 使用Wikipedia Extractor抽取。
* 使用gensim中wikicorpus库抽取。

由于维基百科语料库有很多符号,使用场景不同过滤的内容也不同,根据自己需要处理即可。这里直接使用Wikipedia Extractor先初步处理,

git clone https://github.com/attardi/wikiextractor.git wikiextractor

cd wikiextractor

python setup.py install

python WikiExtractor.py -b 1024M -o extracted zhwiki-latest-pages-articles.xml.bz2

执行过程如下,可以看到一共处理了965446篇文章。

INFO:root:5913353       服务水平管理
INFO:root:5913361       釋紹宗
INFO:root:5913367       2018年冬季奥林匹克运动会朝鲜代表团
INFO:root:5913369       扶搖
INFO:root:5913390       彭郁真
INFO:root:5913402       施耐德75毫米极轻便山炮
INFO:root:5913435       伊恩·麥奈爾
INFO:root:5913442       雷曼2:胜利大逃亡
INFO:root:5913443       兆丰洋行
INFO:root:5913445       有點想
INFO:root:5913446       田中淡
INFO:root:5913450       玩具指挥官
INFO:root:5913453       圣诞怪杰 (游戏)
INFO:root:5913457       Ontario Solar panel business proposal
INFO:root:5913458       特摄冒险话剧 超级英雄列传
INFO:root:5913465       玩具总动员2:拯救巴斯光年
INFO:root:5913467       佳能 EOS-1
INFO:root:5913480       南秉吉
INFO: Finished 11-process extraction of 965446 articles in 847.7s (1138.8 art/s)

通过以上抽取后得到两个文件wiki_00wiki_01。里面的格式类似下面

<doc id="5323477" url="https://zh.wikipedia.org/wiki?curid=5323477" title="結構與能動性">
文章内容
</doc>

二次处理

通过Wikipedia Extractor处理时会将一些特殊标记的内容去除了,但有时这些并不影响我们的使用场景,所以只要把抽取出来的标签和一些空括号、「」、『』、空书名号等去除掉即可。

import re
import sys
import codecs
def filte(input_file):
    p1 = re.compile('()')
    p2 = re.compile('《》')
    p3 = re.compile('「')
    p4 = re.compile('」')
    p5 = re.compile('<doc (.*)>')
    p6 = re.compile('</doc>')
    outfile = codecs.open('std_' + input_file, 'w', 'utf-8')
    with codecs.open(input_file, 'r', 'utf-8') as myfile:
        for line in myfile:
            line = p1.sub('', line)
            line = p2.sub('', line)
            line = p3.sub('', line)
            line = p4.sub('', line)
            line = p5.sub('', line)
            line = p6.sub('', line)
            outfile.write(line)
    outfile.close()
if __name__ == '__main__':
    input_file = sys.argv[1]
    filte(input_file)

繁体转简体

维基百科语料库中包含了大量的繁体中文,对于我们可能需要将其转换成简体中文,这里使用opencc来进行转换。两种方式使用opencc,
* 直接使用opencc的windows版本,然后执行命令对文件进行转换,可到https://bintray.com/package/files/byvoid/opencc/OpenCC下载。
* 使用opencc的python版本,这个在python3.5下可能会报错,执行命令,pip install opencc-python,可能会报错:ImportError: No module named distribute_setup,这时要到http://download.csdn.net/download/tab_space/9455349下载并解压,将distribute_setup.python文件复制到python安装目录下的Lib目录下。再次执行命令,可能又会报错:chown() missing 1 required positional argument: 'numeric_owner',这时需要将distribute_setup.python文件中self.chown(tarinfo, dirpath)改为self.chown(tarinfo, dirpath, '')

这里使用windows版本的opencc,执行如下命令将wiki_00wiki_01文件中繁体转换成简体。

opencc -i wiki_00 -o zh_wiki_00 -c t2s.json

opencc -i wiki_01 -o zh_wiki_01 -c t2s.json

分词

如果还要继续进行分词操作可以使用jieba,直接python安装jieba,然后执行下面脚本,

import jieba
import re
filename='cut_std_zh_wiki_01'
fileneedCut='std_zh_wiki_01'
fn=open(fileneedCut,"r",encoding="utf-8")
f=open(filename,"w+",encoding="utf-8")
for line in fn.readlines():
    words=jieba.cut(line)
    for w in words:
       f.write(str(w))
f.close()
fn.close()

以下是广告

========广告时间========

鄙人的新书《Tomcat内核设计剖析》已经在京东销售了,有需要的朋友可以到 https://item.jd.com/12185360.html 进行预定。感谢各位朋友。

为什么写《Tomcat内核设计剖析》

=========================

欢迎关注:

这里写图片描述
这里写图片描述

目录
相关文章
|
1月前
|
机器学习/深度学习 人工智能 自然语言处理
【Python机器学习】文本特征提取及文本向量化讲解和实战(图文解释 附源码)
【Python机器学习】文本特征提取及文本向量化讲解和实战(图文解释 附源码)
193 0
|
9月前
|
人工智能 自然语言处理 安全
中文竞技场-中文大模型比比看
今天,大语言模型正在各个应用领域引起巨大的变革,并已经在搜索、金融、办公、安全、教育、游戏、电商、社交媒体等领域迅速普及和应用。例如微软将 GPT4应用于必应搜索引擎和 Office 办公软件。几乎每个企业都试图探索如何将AI融入业务和技术中去。但以中文为主的语言大模型却缺少应有的关注,今天让我们聚焦中文竞技场,看看各种中文大语言模型的表现吧~
63575 1
中文竞技场-中文大模型比比看
|
10月前
|
机器学习/深度学习 数据采集 算法
2021-4月Python 机器学习——中文新闻文本标题分类
2021-4月Python 机器学习——中文新闻文本标题分类
186 0
|
7月前
|
存储 自然语言处理 并行计算
bert中文文本摘要代码(3)
bert中文文本摘要代码(3)
94 0
bert中文文本摘要代码(3)
|
7月前
|
存储 自然语言处理 PyTorch
bert中文文本摘要代码(1)
bert中文文本摘要代码(1)
98 0
|
10月前
|
人工智能
中文大语言模型的分析
为了体现分析的逻辑性,将会采用序数词排序对三个领域进行报告测评。
199 0
|
10月前
|
算法 测试技术 C++
代码生成 中文大语言模型
目前的中文大语言模型的能力,差的还有很多。希望这个平台能够帮助用户更好地认识和利用这些模型,同时也期待更多的用户参与进来,共同推动中文大语言模型的发展和进步。
340 1
|
10月前
|
机器学习/深度学习 自然语言处理 算法
2021-4月Python 机器学习——中文新闻文本标题分类(简单容易版)
2021-4月Python 机器学习——中文新闻文本标题分类(简单容易版)
289 0
|
机器学习/深度学习 自然语言处理 Ubuntu
维基百科的语料库下载以及信息提取笔记
维基百科的语料库下载以及信息提取笔记
|
机器学习/深度学习 数据采集 存储
【英文文本分类实战】之四——词典提取与词向量提取
【英文文本分类实战】之四——词典提取与词向量提取
200 0
【英文文本分类实战】之四——词典提取与词向量提取