数据清洗:

对占中新闻进行数据清洗



王成军

wangchengjun@nju.edu.cn

计算传播网 http://computational-communication.com


In [171]:
with open("/Users/chengjun/github/cjc2016/data/ocuppy/central/zz-hk-2014-9.rtf") as f:
   news = f.readlines()

In [172]:
len(news)


Out[172]:
9480

In [173]:
print news[17].decode('gb18030')[:500]


\par\par 【本报讯】「\loch\af0\hich\af0\dbch\f15 \b\cf6 占领中环\loch\af0\hich\af0\dbch\f15 \b0\cf0 」在网上热烈讨论,部分网民支持\loch\af0\hich\af0\dbch\f15 \b\cf6 占中\loch\af0\hich\af0\dbch\f15 \b0\cf0 ,赞叹香港人的素质,对和平\loch\af0\hich\af0\dbch\f15 \b\cf6 占中\loch\af0\hich\af0\dbch\f15 \b0\cf0 感到骄傲。一则「在场人士的经历」贴子,转述朋友经历,指虽然金钟港铁站人山人海,却秩序井然,市民高呼自己香港自己救,她认为市民的美丽、齐心及纯良无法形容。\par\par 港铁车长:金钟需要你\par\par 亦有网民深受香港人的团结精神所动容,有市民在乘港铁前往支援\loch\af0\hich\af0\dbch\f15 \b\cf6 占中\loch\af0\hich\af0\dbch\f15 \b0\cf0 ,到达金钟站时,听到车长说的一句话,「金钟落车嘅乘客,请加油

In [174]:
def stringclean(s):
    s = s.decode('gb18030').encode('utf8')
    s = s.replace(r'\loch\af0\hich\af0\dbch\f15 \b\cf6 ', '')
    s = s.replace(r'\loch\af0\hich\af0\dbch\f15 \b0\cf0 ', '')
    s = s.replace('\par', '').replace('\n', '')
    return s

In [175]:
print stringclean(news[17])


 【本报讯】「占领中环」在网上热烈讨论,部分网民支持占中,赞叹香港人的素质,对和平占中感到骄傲。一则「在场人士的经历」贴子,转述朋友经历,指虽然金钟港铁站人山人海,却秩序井然,市民高呼自己香港自己救,她认为市民的美丽、齐心及纯良无法形容。 港铁车长:金钟需要你 亦有网民深受香港人的团结精神所动容,有市民在乘港铁前往支援占中,到达金钟站时,听到车长说的一句话,「金钟落车嘅乘客,请加油,金钟需要你哋!」亦有网民被在旺角示威、齐心演唱本地乐队Beyond《光辉岁月》的市民所感动,「今天只有残留的躯壳,迎接光辉岁月,风雨中抱紧自由!」更认为这是香港人的歌。 然而亦有不少网民反对占中,担心运动带来负面影响。一位自称「师奶」的网民表示,占中行动令香港陷入混乱,应和平地寻求共识。有网民指行动已变质,太过煽情失去理性。亦有网民分析,认为目前政改框架非完美,但亦应「一人让一步」,而且部分人太偏激,会拖垮经济,比没有普选「死得更快」。更有人指自己支持争取民主,但占中以威胁方式难以达到目的,应有耐性一步一步去做,同时保障经济及民主发展。 

In [176]:
news_clean = [stringclean(n) for n in news]
len(news_clean)


Out[176]:
9480

In [177]:
print news_clean[17][:100]


 【本报讯】「占领中环」在网上热烈讨论,部分网民支持占中,赞叹香港人

In [181]:
from collections import defaultdict

def deletetab(s):
    return s.replace('\t', '')


import sys
def flushPrint(s):
    sys.stdout.write('\r')
    sys.stdout.write('%s' % s)
    sys.stdout.flush()

In [183]:
def readblocks(data):
    copy = False
    n = 0
    block = []
    chunk = defaultdict(lambda:[])
    for i in data:
        try:
            if "~~~~~~~~~~~~~~~~~~~~~~~~~~  #" in i:
                copy = True
            elif "文章编号:" in i:
                id = i.replace('文章编号: ', '')
                source = block[0].split('|')[0]
                info = block[1]
                title = deletetab(block[3])
                body = [j for j in block[6:] if j != '\n']
                body = ' '.join(body)
                body = deletetab(body)
                body = '"' + body  + '"'
                line = '\t'.join([id, source, info, title, body])
                chunk[id] = line
                block = []
                n += 1
                if n%10 == 0:
                    flushPrint(n)
                copy = False
            elif copy:
                block.append(i)
        except Exception, e:
            print i, e
            pass
    return chunk

In [186]:
news_result = readblocks(news_clean)


410

In [187]:
len(news_result)


Out[187]:
412

In [190]:
news_result.keys()[:5]


Out[190]:
['201409015325665 ',
 '201409055305251 ',
 '201409165304250 ',
 '201409300050105 ',
 '201409290320076 ']

In [192]:
with open('/Users/chengjun/github/cjc2016/data/zz-hk-2014-9-clean.txt','a') as p:
     for record in news_result.values():
         p.write(record+"\n")

In [194]:
import pandas as pd

df = pd.read_csv('/Users/chengjun/github/cjc2016/data/zz-hk-2014-9-clean.txt', sep = "\t", header=None)
df[:10]


Out[194]:
0 1 2 3 4
0 201409015325665 南华早报 EDT13| EDT Pain of stasis 没有文字档。
1 201409055305251 大公报 A20| 专版 坚决支持和拥护 全国人大常委会对香港政改的决定 一、本会坚决支持全国人大常委会关于香港特别行政区行政长官普选问题和201...
2 201409165304250 大公报 B02| 经济.航运 粤投1.8亿入股中超 【大公报记者毛丽娟深圳十五日电】中国水业(01129)与粤海投资(002...
3 201409300050105 文汇报 B04| 地产新闻 提早开标 信置高价夺粉岭地 中标价7.3亿 呎价区内新高 香港文汇报讯 (记者 颜伦乐) 地政总署昨日突然提早开标,较平日三个工作...
4 201409290320076 东方日报 B12| 产经 星湾御累收逾2200票 多家发展商表示,新盘部署暂未受到「占中」影响,恒地(00012)马鞍山迎...
5 201409300010113 香港商报 A10| 投资分析| 股海追踪| By 蔺常念 炒壳股秘诀 九月份环球利率上升,内地经济数据转弱,加上9月28日开始占中,令港股寻底...
6 201409160040016 明报 A22| 教育| By 刘锦辉 时事通识教材 文:通识科教师刘锦辉漫画创作:梁浩铨 时事焦点:黑布游行涉及单元:今日香...
7 201409305305767 am730 A62| 娱乐 王敏德担心香港会暴乱 王敏德(Michael)与女儿王曼喜,昨日坐直升机现身东莞出席高尔夫球赛...
8 201409264480062 英文虎报 P08| Top News| By Imogene Wong Occupy fears trim benchmark Hong Kong shares skidded to their l...
9 201409135304499 大公报 A08| 要闻 谭耀宗鼓励港人发声撑普选 【大公报讯】记者张媞报道:全国政协委员、民建联主席谭耀宗昨日在「闽港合作...

In [197]:
import os
os.chdir('/Users/chengjun/github/cjc2016/data/occupycentral/')
import glob
filenames = glob.glob('*.rtf')
filenames


Out[197]:
['zz-hk-2014-10.rtf', 'zz-hk-2014-9.rtf']

In [198]:
for i in filenames:
    print i
    with open(i) as f:
        news = f.readlines()
        news = [stringclean(n) for n in news]
        news_result = readblocks(news)
        with open('/Users/chengjun/github/cjc2016/data/zz-hk-all-clean.txt','a') as p:
            for record in news_result.values():
                p.write(record+"\n")


zz-hk-2014-10.rtf
710zz-hk-2014-9.rtf
410

This is the End.

Thank you for your attention.