搜狗新聞原始資料處理
阿新 • • 發佈:2019-01-03
簡介:
下載的是搜狗新聞一個月版本的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編碼")