中文维基百科文本预处理

步骤

  • 预备工作
    • 语料下载
    • wikiExactor提取原始文本
  • 载入原始文本
  • 清洗并繁简体转化
  • 分词
  • 再次清洗
  • 保存”干净“的语料库

流程图

00 准备工作

  • 下载原始语料 xml.文件
    • 地址:https://dumps.wikimedia.org/zhwiki/20190401/
      下载词条正文部分即可

      中文维基百科组成
    • 利用WikiExractor转化为纯文本
      • 地址:https://github.com/attardi/wikiextractor
      • 下载后在wikiextactor文件夹进入命令行,执行WikiExtractor.py脚本 ,可设置提取后文件的大小和所在路径(这里设置为500M,最终产生了13个文件)


        执行WikiExtractor脚本

        抽取后的结果,共13个文件

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 清洗文本+繁简转换

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')

参考:

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

友情链接更多精彩内容