1. 程式人生 > >搜狗新聞原始資料處理

搜狗新聞原始資料處理

簡介:

下載的是搜狗新聞一個月版本的SogouCS.reduced,大約698M,包含128個txt檔案

主要處理包括:轉碼,提取content和URL

處理之前:

每個檔案中每條內容如下xml格式:

<doc>
<url>http://sports.sohu.com/20080627/n257795172_4.shtml</url>
<docno>215799a267c29427-71013306c0bb3300</docno>
<contenttitle>組圖:蕊蕊攔網薛明暴扣 陳忠和釋出會笑逐顏開</contenttitle
> <content>跳轉至:R常擔26N依此盜驕潺1本┦奔洌對攏玻啡眨2008年世界女排大獎賽第二週比賽繼續進行,在中國香港站的一場焦點大戰中,中國女排苦戰五局,以3-2(25-18、25-27、21-25、25-21、15-13)擊敗了不久前在瑞士女排精英賽3-1戰勝過自己的古巴女排,贏得中國香港站開門紅。圖為比賽精彩畫面。#ㄔ鶉偽嗉:王燕芳)>彩圖片</content> </doc>

處理之後:

共:15類別。資料分佈不均勻,猜測和各類新聞熱度有關。

後續分析:

待補充

程式碼如下:

(1)包括轉碼和提取資料

# -*- coding: utf-8 -*-
''' 該指令碼用於將搜狗語料庫新聞語料 轉化為按照URL作為類別名、 content作為內容的txt檔案儲存 ''' import os import re '''字元數小於這個數目的content將不被儲存''' threh = 30 '''獲取原始語料資料夾下檔案列表''' def listdir_get(path, list_name): """ :desc: get data of raw data :input: data of dir, list of slice data path """ for file in os.listdir(path): file_path
= os.path.join(path, file) if os.path.isdir(file_path): listdir_get(file_path, list_name) else: list_name.append(file_path) ''' #修改檔案編碼為utf-8 from chardet import detect def code_transfer(list_name): for fn in list_name: with open(fn, 'rb+') as fp: content = fp.read() codeType = detect(content)['encoding'] content = content.decode(codeType, "ignore").encode("utf8") fp.seek(0) fp.write(content) print(fn, ":已修改為utf8編碼") ''' def processing(list_name): '''對每個語料''' for path in list_name: print(path+'---start---') file = open(path, 'rb').read().decode("utf8") ''' 正則匹配出url和content ''' patternURL = re.compile(r'<url>(.*?)</url>', re.S) patternCtt = re.compile(r'<content>(.*?)</content>', re.S) classes = patternURL.findall(file) contents = patternCtt.findall(file) '''將內容小於30的去除''' for i in reversed(range(contents.__len__())): #如果是reversed (len(range(5))),這種索引是按從大到小的順序排列, #列表不要隨便刪除,python會自動增補,導致索引變少 if len(contents[i]) < threh: contents.pop(i) classes.pop(i) '''進一步取出URL作為樣本標籤''' for i in range(classes.__len__()): patterClass = re.compile(r'http://(.*?).sohu.com/', re.S) classi = patterClass.findall(classes[i]) classes[i] = classi[0] '''按照URL作為類別儲存到處理後文件夾''' for i in range(len(classes)): file = data_original_path + '\\processed\\' + classes[i] + '.txt' with open(file, 'a+', encoding='utf-8')as f: f.write(contents[i]+'\n') print(path+'---success---') if __name__=='__main__': print("----tast start----") #原始語料路徑 data_original_path = "D:\\software_study\\nlp_data\\SogouCS.reduced\\" #data_original_path = './SogouCS.reduced/' #獲取檔案路徑 list_name = [] listdir_get(data_original_path,list_name) #修改編碼 #code_transfer(listname) processing(list_name) print('----task success----')

 (2)主要是轉碼,本人在實際中分開進行的

#-*- coding:utf-8 -*-
import os
from chardet import detect

data_original_path = "D:\\software_study\\nlp_data\\SogouCS.reduced"

'''生成原始語料資料夾下檔案列表'''
def listdir(path, list_name):
    """
    :desc: get data of raw data
    :input: data of dir, list of slice data path
    """
    for file in os.listdir(path):
        file_path = os.path.join(path, file)
        if os.path.isdir(file_path):
            listdir(file_path, list_name)
        else:
            list_name.append(file_path)

'''獲取所有語料'''
list_name = []

listdir('D:\\software_study\\nlp_data\\SogouCS.reduced\\',list_name)
print(list_name)
for fn in list_name:
    with open(fn, 'rb+') as fp:
        content = fp.read()
        codeType = detect(content)['encoding']
        content = content.decode(codeType, "ignore").encode("utf8")
        fp.seek(0)
        fp.write(content)
        print(fn, ":已修改為utf8編碼")