步骤
- 预备工作
- 语料下载
- wikiExactor提取原始文本
- 载入原始文本
- 清洗并繁简体转化
- 分词
- 再次清洗
- 保存”干净“的语料库
00 准备工作
- 下载原始语料 xml.文件
- 地址:https://dumps.wikimedia.org/zhwiki/20190401/
- 利用WikiExractor转化为纯文本
- 地址:https://github.com/attardi/wikiextractor
-
下载后在wikiextactor文件夹进入命令行,执行WikiExtractor.py脚本 ,可设置提取后文件的大小和所在路径(这里设置为500M,最终产生了13个文件)
- 地址:https://dumps.wikimedia.org/zhwiki/20190401/
01 加载文本
wiki_01 = []
path = 'C:/Users/USER\Desktop/wiki/wikiextractor/extracted/AA/wiki_01'
f = open(path, "r", encoding="utf8")
lines = f.readlines()
wiki_01.append(lines)
text_original=''
for a in all_articles:
text_original+=str(a)
如上,为了方便起见,先使用部分语料,加载原始语料文本后发现里面不经有很多非法字符,还有繁体字。
02 清洗文本+繁简转换
- 清洗非法字符
- <doc id="77580" url="https://zh.wikipedia.org/wiki?curid=77580" title="百团大战">之类
- </doc>
- '\n'
- 句子中的[] () 等等标点符号
- 繁简转换
- 方法一:opencc https://github.com/BYVoid/OpenCC
- 方案二:hanziconv https://pypi.org/project/hanziconv/
import re
from hanziconv import HanziConv
def token(all_articles):
TEXT=''
for articles in all_articles:
for a in articles:
if a.startswith('<doc id') or a.startswith('</doc>'):
articles.remove(a)
else:
TEXT+=a
TEXT=TEXT.strip('\n')
return ' '.join(re.findall('[\w|\d]+', TEXT))
text_token=token(wiki_01)
text_token_simp= HanziConv.toSimplified(text_token)
03 分词
jieba分词
import jieba
def cut(string) : return list(cut(string))
04 再次清洗
上一步分词发现,还有还有空白符,再次去除
def remove_ Whitespace(text) :
text_valid=[t for t in text if t.strip()] #如果非空白就加入
return text_valid
统计下语料库字数(分词后即为词数)的变化
import matplotlib.pyplot as plt
%matplotlib inline
mount=[len(text_original),len(text_token_simp),len(text_cut),len(text_valid)]
name_list=['Original','Clean&Convert','Cut','Clean Again']
x=[i for i in range(len(mount))]
plt.bar(x, mount,tick_label=name_list)
05 保存
保存清洗后的文本,作为语料库方便后续使用
with open ("wiki_01_corpus.txt",'w',encoding='utf-8') as f:
for a in text_cut:
f.write(a+'\n')