照例,先講下環境,Mac OSX 10.11.2 ,Python 3.4.3。python
方法1:使用官方dump的xml數據c++
最新打包的中文文檔下載地址是:https://dumps.wikimedia.org/zhwiki/latest/zhwiki-latest-pages-articles.xml.bz2 。git
方法2:也是官方,結構化數據(json)github
下載地址是:https://dumps.wikimedia.org/wikidatawiki/entities/ 。目前還沒有測試使用此數據,很少做介紹。但數據模型和已有的工具均可以在wikidata的站點上找到。數據庫
我使用方法1,下載後須要對該xml文件的壓縮包做處理,所幸gensim的WikiCorpus已經預置了部分處理。幾行關鍵的python代碼以下:macos
input_file = "zhwiki-latest-pages-articles.xml.bz2" wiki = WikiCorpus(input_file, lemmatize=False, dictionary={}) for text in wiki.get_texts(): str_line = bytes.join(b' ', text).decode() #如下能夠存入文件或數據庫
更詳細的關於WikiCorpus的介紹能夠看這裏。json
在上面的代碼中,補下本身的漏,python3裏,str和bytes是兩個不一樣的東西,有點相似python2中的str和unicode。下面是str和bytes的相互轉換方法:網絡
# str轉bytes data = "" #string data = "".encode() #bytes data = b"" #bytes # bytes轉str data = b"" #bytes data = b"".decode() #string data = str(b"") #string
除了用gensim,還有個哥們寫了一個wikiextractor工具來處理wiki的dump數據,若感興趣可拿來參考,詳見github地址。工具
根據個人數據,1.17G的原始數據處理所得的文本文件845M,246497篇文章(這個數字隨時間日後是愈來愈大)。測試
這是個糟糕的話題,佔這麼大篇幅真得感嘆中華崛起之重要。中文維基數據繁簡混雜——你們都說存在這個問題,但wikipedia的網站是將繁體中文和簡體中文分開處理的,因此一直以爲從數據庫到dump結構都應有方法將二者區分開,暫罷,待有空研究其數據時再議。關於繁簡轉換,來斯唯和52nlp的博文都用到了一個繁簡轉換工具——OpenCC,關於此,引官方介紹以下:
Open Chinese Convert(OpenCC)是一個中文簡繁轉換開源項目,提供高質量的簡繁轉換詞庫和可供調用的函數庫(libopencc)。還提供命令行簡繁轉換工具,人工校對工具,詞典生成程序,以及圖形用戶界面。
這裏使用的是命令行工具。至於安裝方法,能夠看Google Code上的項目頁面。如在Mac下,直接:
brew install opencc
將繁體轉爲簡體的命令以下:
opencc -i wiki_zh.text -o wiki_zhs.text -c zht2zhs_config.json
那個json是什麼鬼?OpenCC的配置文件,如今已支持json寫法,以下:
{ "name": "Traditional Chinese to Simplified Chinese", "segmentation": { "type": "mmseg", "dict": { "type": "ocd", "file": "TSPhrases.ocd" } }, "conversion_chain": [{ "dict": { "type": "group", "dicts": [{ "type": "ocd", "file": "TSPhrases.ocd" }, { "type": "ocd", "file": "TSCharacters.ocd" }] } }] }
OK,這是個大話題,有不少選擇,網上有很多推薦結巴分詞,實際上是挺不錯的。但這裏使用哈工大的LTP,github地址,篇幅緣由暫時不詳細介紹這個了,只講我認爲的三點:
計算語言學的基本任務,解釋地比較透徹,不管是代碼仍是文檔。
配套論文產量和質量都不錯。
良心的python封裝。
儘管,國內大學中不乏相似工做,清華、復旦等也作了很多。
LTP目前我使用release裏的3.3.2,模型文件使用3.3.1,python封裝使用0.1.9。因爲是Mac下使用源文件編譯,因此因爲OSX編譯器類型變遷,pyltp 0.1.9的setup.py中必定要記得修改這行:
extra_compile_args += ['-std=c++11', '-Wno-c++11-narrowing',"-mmacosx-version-min=10.8",'-stdlib=libc++']
其重點是-mmacosx-version-min這個參數。固然,根據issue記錄,25天前這個問題已修復且合併進mater分支。因此據拍腦殼估計,git源碼安裝也是可行:
$ git clone https://github.com/HIT-SCIR/pyltp $ git submodule init $ git submodule update $ python setup.py install
具體分詞的寫法就比較簡單了,例子以下:
# -*- coding: utf-8 -*- from pyltp import Segmentor segmentor = Segmentor() segmentor.load("/path/to/your/cws/model") words = segmentor.segment("這句句子要分詞") print "|".join(words) segmentor.release()
找一篇語料對比下分詞先後,分詞前:
巨蟹座 是一顆環繞巨蟹座 a運轉的系外行星 軌道週期爲 地球日 它是距離其中央恆星第三近的行星 其質量接近於土星 該行星於 日被發現 發現
和大多數系外行星同樣 而以前 巨蟹座 該恆星仍然會出現視向速度位移 進一步的探測發如今距中央恆星 可是即便摒除了這兩顆行星的影響
中央恆星仍然存在週期爲 地球日的擾動現象 因爲該週期接近於巨蟹座 a的自轉週期 儘管如此 在同一份報告中 科學家宣佈發現了巨蟹座 d和巨蟹座
對其中央恆星進行的長達 並且視向速度位移的幅度較大 沒法爲巨蟹座 a不大活躍的光球層活動所解釋 軌道和質量 在巨蟹座 行星系統中
迄今爲止已經發現了 顆行星 顆行星中 巨蟹座 c的軌道屬於輕度偏愛軌道 其遠拱點較之近拱點遠了 該行星的軌道週期要長於熱木星
可是其軌道與巨蟹座 模擬代表該行星與巨蟹座 的比值 因爲視向速度法的侷限性 若是此預測無誤 那麼該行星的真實質量就爲 倍木星質量 物理特性
因爲科學家只能間接地探測該行星 因此至今還不知道其半徑 物質構成和表面溫度 該行星質量接近土星 因此它可能屬於類木行星 從而並不擁有固體表面
參考文獻 外部連接 extrasolar visions cancri
分詞後:
巨蟹座|是|一|顆|環繞|巨蟹座|a|運轉|的|系|外行星|軌道|週期|爲|地球日|它|是|距離|其|中央|恆星|第三|近|的|行星|其|質量|接近|於|土星|該|行星|於|日|被|發現|發現|和|大多數|系外|行星|同樣|而|以前|巨蟹座|該|恆星|仍然|會|出現|視|向|速度|位移|進一步|的|探測|發現|在|距|中央|恆星|可是|即便|摒除|了|這|兩|顆|行星|的|影響|中央|恆星|仍然|存在|週期|爲|地球日|的|擾動|現象|因爲|該|週期|接近|於|巨蟹座|a|的|自轉|週期|儘管|如此|在|同一|份|報告|中|科學家|宣佈|發現|了|巨蟹座|d|和|巨蟹座|對|其|中央|恆星|進行|的|長|達|並且|視|向|速度|位移|的|幅度|較|大|沒法|爲|巨蟹座|a|不|大|活躍|的|光球層|活動|所|解釋|軌道|和|質量|在|巨蟹座|行星|系統|中|迄今爲止|已經|發現|了|顆|行星|顆|行星|中|巨蟹座|c|的|軌道|屬於|輕度|偏愛|軌道|其|遠|拱點|較之|近|拱點|遠|了|該|行星|的|軌道|週期|要|長|於|熱|木星|可是|其|軌道|與|巨蟹座|模擬|代表|該行星|與|巨蟹座|的|比值|因爲|視|向|速度|法|的|侷限性|若是|此|預測|無誤|那麼|該行星|的|真實|質量|就|爲|倍|木星|質量|物理|特性|因爲|科學家|只能|間接|地|探測|該行|星所|以致今|還|不|知道|其|半徑|物質|構成|和|表面|溫度|該行|星|質量|接近|土星|因此|它|可能|屬於|類|木行星|從而|並|不|擁有|固體|表面|參考|文獻|外部|連接|extrasolar|visions|cancri
這篇主要基於網絡上的資料,重走了一遍數據下載到中文分詞的技術點,並彙總了已知的工具鏈。上述結果對比維基的原網頁,明顯還存在很多問題,例如語料中的數字均丟失了,對於其中數量、年份等信息對於文本理解其實很重要。尚不肯定是不是WikiCorpus形成的問題。
下一篇計劃嘗試用此語料作詞嵌入相關的部分實驗。
To be continued.
原文連接:http://qiancy.com/2016/05/08/wiki-text-analysis-prepare/