搜狗實驗室新聞數據-分詞

搜狗實驗室新聞數據能夠用於文本分類、新詞發現、命名實體識別、自動摘要等。在解碼和分詞時遇到了幾個問題,這裏總結一下。git

解碼GB18030

import chardet
file = open('.../....','r').read()
chardet.detect(data)  
#{'encoding': 'GB2312', 'confidence': 0.99, 'language': 'Chinese'}
複製代碼

雖然解析爲GB2312,可是用GB2312和GBK解碼都存在亂碼問題,須要用GB18030解碼。關係是GB18030兼容GBK,GBK兼容GB2312,GB2312兼容ASCII。GB18030和GBK都是四個字節,GB2312兩個字節,ASCII一個字節。能夠兼容的緣由是前兩字節沒有重疊,具體編碼能夠不用理會。GBK不兼容的字符是。github

file = open(path,'r',encoding='gb18030')
複製代碼

提取標題和內容

由於內容是中文且格式比較固定,去掉標題內容行頭尾的格式的字符就能夠。用的簡單的方法strip,以下bash

line = line.strip('</contenttitle>\n')+'\n'  #句子以\n結尾,不加\n用strip的話,句尾的格式符號去不掉
複製代碼

全角數字字母jieba分詞

分詞用了StanfordCoreNLP和jieba分詞,jieba分詞中數字及英文詞分錯。發現其中的數字英文字母及標點都是全角形式,所以若是想用jieba繼續處理的話須要轉爲半角。ide

ord('1')  # 49
ord('1') # 65297
def Q2B_09az(char):  #這個只轉換0-9 a-z A-Z
	if (char >= u'\uff10' and char <= u'\uff19') or (char >= u'\uff21' and char <= u'\uff3a') or (char >= u'\uff41' and char <= u'\uff5a'):
	    char = ord(char)
	    char -=0xfee0
	    char = chr(char)
	return char
def Q2B(uchar):  #網上查到的方法,標點符號有英文表示的也轉換了,例如,到, 另外。《等沒有變化
    inside_code = ord(uchar)
    if inside_code == 0x3000:
        inside_code = 0x0020
    else:
        inside_code -= 0xfee0
    if inside_code < 0x0020 or inside_code > 0x7e:
        return uchar
    return chr(inside_code)
複製代碼

具體細節再也不描述,完整代碼見 githubui

相關文章
相關標籤/搜索