语料的获取
下载
相比于其他语料,中文维基百科提供了免费的语料资源,可以直接从中文维基百科标题和正文处直接下载。
抽取
对下载好的文件,可以使用Wikipedia_Extractor直接对文件进行抽取处理:首先在解压缩下载文件得到xml格式的数据,然后执行WikiExtractor.py处理xml数据即可:1
$ ./WikiExtractor.py -b 1000M -o extracted2 zhwiki-latest-pages-articles.xml
这表示把指定的xml文件抽取并以1000M的单位大小来切分文件,文件输出到extracted2文件夹中。
简繁转换
抽取好的文档混杂的繁体中文,使用opencc可以对抽取的文档进行简繁转换。(很久之前就听说过opencc的作者BYVoid大神的大名TT)1
$ opencc -i wiki_00 -o wiki_chs -c zht2zhs.ini
经过简繁转换后,文档就预处理得差不多了。在我的实践中,文章中还剩下一下诸如1
<doc id="13" url="https://zh.wikipedia.org/wiki?curid=13" title="数学">
之类的标签没有去除,可以简单的使用python的正则表达式再把它去掉。维基百科中文语料的获取主要参考抄袭 自 这篇文章
结巴中文分词
主题模型使用的是词袋模型,和英文词语直接有空格隔开不同,中文需要进一步进行分词。目前常用的中文分词工具有jiebajiba 分词。
无论是中文文章还是英文文章,文档中都会出现大量的和文档描述的主题没什么关联的词:比如英文的a,and;中文的‘不会’,‘不但’这一大类词语。中文的停用词词表很多,这是其中一个
进行中文分词后的文本的前后对比:1
基础数学的知识与运用总是个人与团体生活中不可或缺的一块。其基本概念的精炼早在古埃及、美索不达米亚及古印度内的古代数学文本内便可观见。从那时开始,其发展便持续不断地有小幅的进展,直至16世纪的文艺复兴时期,因为和新的科学发现相作用而产生的数学革新导致了知识的加速发展,直至今日。
1 | 基础 数学 知识 团体 生活 不可或缺 一块 基本概念 精炼 古埃及 美索不达米亚 古印度 古代 数学 文本 可观 发展 持续 地有 小幅 进展 直至 世纪 文艺复兴 时期 科学 发现 作用 数学 革新 导致 知识 加速 发展 直至 今日 |
不得不承认我的这次分词还不够智能,短短的一段就出现了‘地有’,‘可观’这样错误。突然想起小朋友用天真造句的梗了:今天天真冷呀。不过在这段关于数学的文章中,jieba分词的结果并没有对语义造成太大的影响,关键的词语都没有被分错。
主题模型
在主题模型,潜在狄利克雷分配(Latent Dirichlet allocation)是我最早接触到。关于LDA中复杂的数学原理,这篇文章讲解得相对深入浅出:LDA数学八卦
虽然其数学原理相当复杂,但是python中的gensim包使用起来却非常简单。1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23#coding=utf8
from __future__ import unicode_literals
import io
from gensim import corpora,models
import logging
logging.basicConfig(format='%(asctime)s : %(levelname)s : %(message)s', level=logging.INFO)
def divide(x):#根据文件的特征,切分出文档
with io.open(x,encoding ='utf8') as f:
text=[]
for line in f:
l=line.split()
if len(l)!=0:
text.extend(l)
else:
yield text
text=[]
dictionary=corpora.Dictionary(divide('outfile.txt'))
corpus = [ dictionary.doc2bow(text) for text in divide('outfile.txt')]
dictionary.save('mydict1.dic')
corpora.MmCorpus.serialize('corpora.mm', corpus)
lda = models.LdaModel(corpus = corpus,id2word=dictionary,num_topics=100,passes=3)
lda.save('model1.lda')
这里因为把所有文档都存到了一个文件中,所以后面根据文件的格式拆分了一下(有些小缺陷,不过应该不会造成太大的偏差)。这里预先设定了100个主题,构建这个主题模型会花费大量的运行时间。
有趣的结果
使用python wordcloud可以可视化得到的主题。
涉及文档最多的主题:
中文维基百科嘛,讲的都是中国的东西。虽然混入了一些奇怪的词语,不过考虑到她涉及了大量的文档,当然是原谅她啊。
涉及文档最少的主题:
AV二字真是分外醒目,然而并没什么可奇怪的。