搜狗實驗室新聞數據能夠用於文本分類、新詞發現、命名實體識別、自動摘要等。在解碼和分詞時遇到了幾個問題,這裏總結一下。git
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的話,句尾的格式符號去不掉
複製代碼
分詞用了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