中文维基数据处理 - 1. 下载与清洗

1. 数据下载

一些重要的链接:

  1. 最新转储
    需要 zhwiki-latest-pages-articles.xml.bz2 这个文件
  2. 中文维基的页面统计信息
    目前内容页面数大约是 978K

2. 数据处理

选择了 Gensim 这个主题工具包进行数据预处理。

2.1 xml 转 json

scripts.segment_wiki

python -m gensim.scripts.segment_wiki -f zhwiki-latest-pages-articles.xml.bz2 | gzip > zhwiki-latest.json.gz

然后就转换成了可被 Python 直接读取的 json 文档。

2.2 测试数据

from smart_open import smart_open
import json
x = 0

for line in smart_open('zhwiki-latest.json.gz'):
     article = json.loads(line)

     print("Article title: %s" % article['title'])
     for section_title, section_text in zip(article['section_titles'], article['section_texts']):
         print("Section title: %s" % section_title)
         print("Section text: %s" % section_text)

     x += 1
     if x == 5:
         break

运行如上代码可以输出中文维基中的前 5 篇文档。

2.3 繁简转换

采用 OpenCC 实现。

#!/usr/bin/env python3
import opencc

def t2s(s):
    return opencc.convert(s, config='t2s.json')

def convert_obj(p):
    num, line = p[0], p[1]
    article = json.loads(line)
    article['title'] = t2s(article['title'])
    article['section_titles'] = [t2s(t) for t in article['section_titles']]
    article['section_texts'] = [t2s(t) for t in article['section_texts']]
    return (num, json.dumps(article))

from smart_open import smart_open
import json
import sys
import multiprocessing
from itertools import count

p = multiprocessing.Pool()
x = 0

for out in p.imap(convert_obj, zip(count(), smart_open('zhwiki-latest.json.gz'))):
    print(out[1])

    if out[0] % 100000 == 0:
        sys.stderr.write('Processed %d\n' % (out[0]))

posted @ 2017-11-25 11:10  nlp-in-shell  阅读(1483)  评论(0编辑  收藏  举报