搜狗新聞語料庫解析

2021-08-16 21:20:07 字數 3260 閱讀 4648

蒐集語料,考慮使用搜狗新聞語料庫。但其採用了gbk編碼,在ubuntu下開啟為亂碼,需要將編碼格式轉換為utf。

直接採用shell命令進行轉碼:

cat news_tensite_xml.dat | iconv -f gbk -t utf-8-c

| grep ""

> a.txt

但得到的txt檔案中會有些許亂碼

想嘗試在windows下開啟(windows預設gbk編碼格式)後轉碼儲存,但檔案解壓後接近1.5g,記事本、寫字板和word等都無法開啟。又想直接使用轉碼工具進行轉碼,但檔案是.dat格式,不能直接轉碼。

於是,先將.dat格式的檔案分割為多個.txt檔案,再使用小工具進行批量轉碼:

# -*- coding:utf8 -*- 

import re

def split():

p = re.compile('',re.s)

end = 'doc>'

filecontent = open('news_tensite_xml.dat','r').read(); #讀檔案內容

paralist = p.split(filecontent) #根據對文字進行切片

#print(len(paralist))

filewriter = open('files/0.txt','a') #建立乙個寫檔案的控制代碼

#遍歷切片後的文字列表

for paraindex in range(len(paralist)):

#print(paralist[paraindex])

filewriter.write(paralist[paraindex]) #先將列表中第乙個元素寫入檔案中

if(paraindex != len(paralist)): #不加if這兩行的執行結果是所有的都沒有了,除了最後分割的文字

filewriter.write(end)

if((paraindex+1)%5000==0): #5000個切片合成乙個.txt文字

filewriter.close()

filewriter = open('files/'+str((paraindex+1)/5000)+'.txt','a'); #重新建立乙個新的控制代碼,等待寫入下乙個切片元素。注意這裡檔名的處理技巧。

filewriter.close() #關閉最後建立的那個寫檔案控制代碼

print('finished')

split()

這樣files資料夾下就包含了250+個**開的txt檔案,使用批量轉碼小工具(網上一搜一大堆)將這些txt檔案由gbk轉化為utf,就得到了utf編碼格式的txt檔案,此時在ubuntu下開啟這些txt檔案,不再是亂碼。

最後,需要將txt裡面的content即正文部分提取出來,合併為乙個txt:

# coding: utf8 

import os

from xml.dom import minidom

from urlparse import urlparse

import codecs

import sys

reload(sys)

sys.setdefaultencoding("utf-8")

deffile_fill

(file_dir):

for root, dirs, files in os.walk(file_dir):

for f in files:

tmp_dir = 'decodes' + '/' + f # 加上標籤後的文字

text_init_dir = file_dir + '/' + f #原始文字

# print text_init_dir

file_source = codecs.open(text_init_dir, 'r')

ok_file = codecs.open(tmp_dir, 'w','utf-8')

start = '\n'

end = ''

line_content = file_source.readlines()

ok_file.write(start)

for lines in line_content:

text1 = lines.replace('', '')

text=text1.replace('&', '&')

ok_file.write(text)

ok_file.write(end)

file_source.close()

ok_file.close()

deffile_read

(file_dir):

b=codecs.open('final.txt','w','utf-8')

for root, dirs, files in os.walk(file_dir):

for f in files:

doc = minidom.parse(file_dir + "/" + f)

root = doc.documentelement

claimtext = root.getelementsbytagname("content")

for index in range(0, len(claimtext)):

if (claimtext[index].firstchild == none):

continue

b.write((claimtext[index].firstchild.data).encode('utf8'))

b.close()

if __name__=="__main__":

file_fill("files")

file_read("decodes")

注:對於檔案讀寫,預設是unicode,所以需要加入

import sys

reload

(sys)

sys.setdefaultencoding

("utf-8")

來將編碼格式轉化為utf-8,否則,file_read時

doc = minidom.parse(file_dir + "/" + f)  

這句會報錯

原始語料庫

第一步 判斷資料中是否存在重複資料 建立python檔案 框架 author kzb time 2018 12 10 import pandas as pd import os,csv datapath os.path.join 音譯原始資料.csv def import data datapath...

單語種語料庫 平行語料庫 多語種語料庫 可比語料庫

單語種語料庫 monolingual 僅包含一種語言的文字。平行語料庫 parallel 包含兩個單語種語料庫,乙個語料庫是另乙個語料庫的翻譯。兩種語言都需要對齊,即相應的片段,通常是句子或段落需要匹配。多語種語料庫 multilingual 包含多種語言的文字,且都是相同文字的翻譯,存在與平行語料...

如何建語料庫 如何建立自己的語料庫?

謝邀。按照語料的語種,語料庫可以分成單語語料庫 雙語語料庫和多語語料庫。單語與雙語或多語語料庫之間的區別在於語料庫本身所包含的語言數量。凡語料僅為單一語言的語料庫屬於單語語料庫 語料為兩種語言的則稱為雙語語料庫 若兩種語言的文字互相是對方的譯文,則該語料庫屬於雙語平行語料庫 三種及三種以上的為多語語...