照例,先讲下环境,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/