網頁和自然語言處理中的字符問題(半角和全角)
先來看一個截圖,爬蟲得到的結果,裏面99的字體貌似有點奇怪,剛開始以為是不同的字體,在Excel裏選中調整字體時發現沒有變化,後來經過大佬指點,才知道是全角數字(原諒我小白無知)。為了統一起見,把所有的全角字符轉換為半角字符,然後再做處理。既然是在爬蟲裏面,那可以直接用代碼轉換了,但是以前存起來的數據用代碼轉就有點繁瑣了,所以在Excel裏解決就好。下面介紹兩種方法,分別用Python和Excel。
首先介紹一下什麽是全角和半角:全角字符unicode編碼從65281~65374 (十六進制 0xFF01 ~ 0xFF5E),半角字符unicode編碼從33~126 (十六進制 0x21~ 0x7E),空格比較特殊,全角為 12288(0x3000),半角為 32(0x20)。除空格外,全角/半角按unicode編碼排序在順序上是對應的(半角 + 65248 = 全角)。那代碼就好寫了。
1. Python全角轉半角
1 def DBC2SBC(ustring): 2 n = [] 3 # python3現在已經將unichr和chr合並,所以網上的代碼已經不合適 4 for char in ustring: 5 num = ord(char) 6 if num == 0x3000: 7 num = 32 8 elif 0xFF01 <= num <= 0xFF5E: 9 num -= 0xfee0 10num = chr(num) 11 n.append(num) 12 return ‘‘.join(n) 13 14 if __name__ == ‘__main__‘: 15 a = ‘《中文》(213)‘ 16 print(a) 17 print(DBC2SBC(a))
由於所有中文占兩個字節,只能由全角表示,所以沒有變化,裏面的全角數字變為半角數字,但是中文括號也跟著變化了。要是想保留文本中的中文括號那就像空格一樣單獨處理,中文符號和英文符號的對應關系查不到的話沒關系,把所有的對應關系打印出來看就是。
1 for i in range(33,127): 2 print(i,chr(i),i+65248,chr(i+65248))
2. 在Excel裏轉換全角數字和半角數字
在想要轉化的一個單元格後面輸入=ASC()就可轉化一個單元格,然後點住黑色十字指針往下拉就可以將一列全部轉化。圖中的D8是想要轉化的那一個單元格編號。
最後說一句,win10默認的拼音輸入法沒有開啟全角輸入方式,所以先要去輸入法設置裏改一下。
網頁和自然語言處理中的字符問題(半角和全角)