如何使用中文維基百科語料

前言

在作天然語言處理時不少時候都會須要中文語料庫,高質量的中文語料庫較難找,維基百科和百度百科算是比較不錯的語料庫。其中維基百科會定時將語料庫打包發佈 https://dumps.wikimedia.org/zhwiki/ ,能夠下載最新版本的語料庫。而百度百科則須要本身去爬,不過也有人把爬好的語料貢獻出來了,https://pan.baidu.com/share/init?surl=i3wvfil提取碼 neqs 。html

這篇文章主要講下如何使用中文維基百科的語料庫。python

Wikipedia Dump

經過 https://dumps.wikimedia.org/zhwiki/latest/zhwiki-latest-pages-articles.xml.bz2 能夠下載最新的中文維基百科語料,目前大小爲1.37G左右,裏面內容以xml格式保存,因此咱們後續仍是須要作處理的。xml節點信息相似以下git

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

根據標籤名容易知道各個節點內容表示的意義,text節點爲文章內容,它裏面其實還包含了不少其餘的一些符號,也是須要過濾掉的。github

抽取數據

對於上述下載的語料庫,須要進一步抽取,能夠選擇json

  • 本身寫程序抽取。
  • 使用Wikipedia Extractor抽取。
  • 使用gensim中wikicorpus庫抽取。

因爲維基百科語料庫有不少符號,使用場景不一樣過濾的內容也不一樣,根據本身須要處理便可。這裏直接使用Wikipedia Extractor先初步處理,windows

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篇文章。bash

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。裏面的格式相似下面ui

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

二次處理

經過Wikipedia Extractor處理時會將一些特殊標記的內容去除了,但有時這些並不影響咱們的使用場景,因此只要把抽取出來的標籤和一些空括號、「」、『』、空書名號等去除掉便可。url

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,spa

  • 直接使用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內核設計剖析》已經在京東銷售了,有須要的朋友能夠到 item.jd.com/12185360.ht… 進行預約。感謝各位朋友。

爲何寫《Tomcat內核設計剖析》

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

歡迎關注:

這裏寫圖片描述
這裏寫圖片描述

這裏寫圖片描述
這裏寫圖片描述
相關文章
相關標籤/搜索