专栏首页算法channel一种获取NLP语料的基本方法

一种获取NLP语料的基本方法

学习自然语言处理,语料获取是第一步,那么如何抓取和提取语料呢,本文提供一种思路。

维基百科语料库

维基百科会定期把各种语言的百科网页全部打包存储起来,这里我们选择其中的中文维基百科网页,这个文件可以作为中文语料库来使用。原始维基百科数据是压缩的 xml 文件,为了提取其中词条的纯文本内容,去掉众多 xml 标记,我们必须要对原始的压缩文件进行处理,提取有用信息。

语料库处理

首先下载原始的中文维基百科网页文件,下载地址为 https://dumps.wikimedia.org/zhwiki/latest/zhwiki-latest-pages-articles.xml.bz2,文件大小在 1.5G 以上,

如果想要下载其他的小文件,可以使用 https://dumps.wikimedia.org/zhwiki 去自行挑选同时带有stream、xml和bz2的文件

在 Windows 系统下,推荐使用 Free Download Manager 下载。

下载其他语言

观察上面https://dumps.wikimedia.org/zhwiki,若我们把 zhwiki 替换为 enwiki,就能找到英文语料,如果替换为 frwiki,就能找到法语语料,依次类推。

可以参考 ISO 639-1语言列表,相应替换便能找到对应语料。

代号

语言

代号

语言

代号

语言

代号

语言

aa

阿法尔语

fr

法语

li

林堡语

se

北萨米语

ab

阿布哈兹语

fy

弗里西亚语

ln

林加拉语

sg

桑戈语

ae

阿维斯陀语

ga

爱尔兰语

lo

老挝语

sh

塞尔维亚-克罗地亚语

af

南非语

gd

苏格兰盖尔语

lt

立陶宛语

si

僧伽罗语

ak

阿坎语

gl

加利西亚语

lu

卢巴语

sk

斯洛伐克语

am

阿姆哈拉语

gn

瓜拉尼语

lv

拉脱维亚语

sl

斯洛文尼亚语

an

阿拉贡语

gu

古吉拉特语

mg

马达加斯加语

sm

萨摩亚语

ar

阿拉伯语

gv

马恩岛语

mh

马绍尔语

sn

修纳语

as

阿萨姆语

ha

豪萨语

mi

毛利语

so

索马里语

av

阿瓦尔语

he

希伯来语

mk

马其顿语

sq

阿尔巴尼亚语

ay

艾马拉语

hi

印地语

ml

马拉雅拉姆语

sr

塞尔维亚语

az

阿塞拜疆语

ho

希里莫图语

mn

蒙古语

ss

斯威士语

ba

巴什基尔语

hr

克罗地亚语

mo

摩尔达维亚语

st

塞索托语

be

白俄罗斯语

ht

海地克里奥尔语

mr

马拉地语

su

巽他语

bg

保加利亚语

hu

匈牙利语

ms

马来语

sv

瑞典语

bh

比哈尔语

hy

亚美尼亚语

mt

马耳他语

sw

斯瓦希里语

bi

比斯拉马语

hz

赫雷罗语

my

缅甸语

ta

泰米尔语

bm

班巴拉语

ia

因特语

na

瑙鲁语

te

泰卢固语

bn

孟加拉语

id

印尼语

nb

书面挪威语

tg

塔吉克斯坦语

bo

藏语

ie

西方国际语

nd

北恩德贝莱语

th

泰语

br

布列塔尼语

ig

伊博语

ne

尼泊尔语

ti

提格雷尼亚语

bs

波斯尼亚语

ii

四川彝语(诺苏语)

ng

恩敦加语

tk

土库曼语

ca

加泰隆语

ik

伊努皮克语

nl

荷兰语

tl

他加禄语

ce

车臣语

io

伊多语

nn

新挪威语

tn

茨瓦纳语

ch

查莫罗语

is

冰岛语

no

挪威语

to

汤加语

co

科西嘉语

it

意大利语

nr

南恩德贝莱语

tr

土耳其语

cr

克里语

iu

因纽特语

nv

纳瓦霍语

ts

宗加语

cs

捷克语

ja

日语

ny

尼扬贾语

tt

塔塔尔语

cu

古教会斯拉夫语

jv

爪哇语

oc

奥克语

tw

特威语

cv

楚瓦什语

ka

格鲁吉亚语

oj

奥杰布瓦语

ty

塔希提语

cy

威尔士语

kg

刚果语

om

奥罗莫语

ug

维吾尔语

da

丹麦语

ki

基库尤语

or

奥里亚语

uk

乌克兰语

de

德语

kj

宽亚玛语

os

奥塞梯语

ur

乌尔都语

dv

迪维西语

kk

哈萨克语

pa

旁遮普语

uz

乌兹别克语

dz

不丹语

kl

格陵兰语

pi

巴利语

ve

文达语

ee

埃维语

km

高棉语

pl

波兰语

vi

越南语

el

现代希腊语

kn

卡纳达语

ps

普什图语

vo

沃拉普克语

en

英语

ko

朝鲜语、韩语

pt

葡萄牙语

wa

瓦隆语

eo

世界语

kr

卡努里语

qu

克丘亚语

wo

沃洛夫语

es

西班牙语

ks

克什米尔语

rm

罗曼什语

xh

科萨语

et

爱沙尼亚语

ku

库尔德语

rn

基隆迪语

yi

依地语

eu

巴斯克语

kv

科米语

ro

罗马尼亚语

yo

约鲁巴语

fa

波斯语

kw

康沃尔语

ru

俄语

za

壮语

ff

富拉语

ky

吉尔吉斯斯坦语

rw

卢旺达语

zh

中文、汉语

fi

芬兰语

la

拉丁语

sa

梵语

zu

祖鲁语

fj

斐济语

lb

卢森堡语

sc

撒丁语

fo

法罗语

lg

卢干达语

sd

信德语

使用wikiextractor 工具提取语料

为了读取其中的文本信息,我们需要借助提取工具,WikiExtractor 是一款不错的开源提取工具,使用该工具,可以方便地处理语料库,输出为想要的存储格式。首先使用以下命令安装该工具:

git clone https://github.com/attardi/wikiextractor
cd wikiextractor
python setup.py install

wikiextractor 会把整个语料库分割为指定大小的文件,文件的格式默认为 xml 格式,具体格式如下:

<doc id="xxx" url="xxx" title="xxxx">
xxxxx
</doc>

<doc id="xxx" url="xxx" title="xxxx">
xxxxx
</doc>

<doc id="xxx" url="xxx" title="xxxx">
xxxxx
</doc>

每个生成的文件包含若干个词条。要生成 xml 格式的语料,可以使用以下命令:

WikiExtractor -o extracted_xml --process 2 -b 512K zhwiki-latest-pages-articles.xml.bz2

-o 用来指定输出目录,--process 用来指定使用的进程数目(默认为 1),-b 选项用来控制单个生成文件的大小(默认为 1M,文件越大,包含的词条也越多),最后的参数为要处理的原始压缩语料文件名称。程序运行完成以后,在输出目录下面会生成多个子目录,每个目录下面有一些生成的文件。

如果要生成 json 格式的语料文件,只需要加上 --json 选项:

WikiExtractor -o extracted_xml --process 2 -b 512K --json zhwiki-latest-pages-articles.xml.bz2

每个生成的文件中,每行对应一个以 JSON 格式存储的词条,格式如下:

{"id": "xxx", "url": "xxx", "title": "xxx", "text": "xxxxxx"}

其中 text 对应的是某个词条的真正内容。

如何提取 JSON 格式字符串中的 text 内容?可以使用json.loads()方法将符合 JSON 格式的字符串转换为 Python 中的字典。例如

In [6]: s = '{"apple": 1, "bananas": 2, "pear": 2.5}'

In [7]: json.loads(s)
Out[7]: {'apple': 1, 'bananas': 2, 'pear': 2.5}

下面给出一个简单读取一个文件所有词条 text 并且整合的代码:

texts = ""
# file is a generated file
with open(file, encoding='utf-8') as f:
    # each line in the file is a wiki page
    for line in f:
        # read the line as valid json and select text field
        text = json.loads(line)['text']
        texts += text

根据自己的需要,可以把每一行的 text 存为新的文件,或者把原来文件里面的所有词条的 text 合在一起存为一个新文件。

Refernces

  • https://zh.wikipedia.org/wiki/ISO_639-1
  • https://jdhao.github.io/2019/01/10/two_chinese_corpus/
  • https://jdhao.github.io/2019/01/10/two_chinese_corpus/

这些内容我已经同步整理到 Python中文网,欢迎电脑端登入收藏,以备后面使用。

本文分享自微信公众号 - Python与机器学习算法频道(alg-channel),作者:zhenguo

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2021-03-09

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 【springMVC基础】spring获取bean的几种方法

    ApplicationContext ac = new FileSystemXmlApplicationContext("applicationContext....

    用户5640963
  • 关于java获取本地ip的几种方法

    关于java获取本地ip的几种方法 1.获取本地ip的方法

    业余草
  • linux获取本机ip命令的几种方法

    方法1 :ifconfig eth0|grep 'inet addr'|awk-F ":"'{print $2}'|awk '{print $1}'

    用户1168904
  • 获取小程序基础库的N种方法

    小程序开发者都知道基础库是个很重要的东西。小程序这个最佳hybrid应用案例离不开它绝妙的底层基础库设计的支持。 如果你对基础库感兴趣,那第一步就是要去获取基...

    薛定喵君
  • 人工智能难点之——自然语言处理

    写在前面 如果单从NLP缩写包含很多方面: 有数学的非线性规划(Non-linear programming) 医学的无光感(No light percepti...

    企鹅号小编
  • c语言获取数组长度的三种方法

    vv彭
  • Android获取本机各种类型文件的方法

    本篇介绍Android获取本机各种类型文件的方法,已经封装成工具类,末尾有源码下载地址。

    砸漏
  • 《自然语言处理实战课程》---- 第一课:自然语言处理简介

    大家好,今天开始和大家分享,我在自然语言处理(Natural Language Processing,NLP)的一些学习经验和心得体会。

    流川疯
  • Awesome-Chinese-NLP:中文自然语言处理相关资料

    推荐Github上一个很棒的中文自然语言处理相关资料的Awesome资源:Awesome-Chinese-NLP ,Github链接地址,点击文末"阅读原文"可...

    AINLP

扫码关注云+社区

领取腾讯云代金券