1. 程式人生 > >網頁和自然語言處理中的字元問題(半形和全形)

網頁和自然語言處理中的字元問題(半形和全形)

  先來看一個截圖,爬蟲得到的結果,裡面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
  10
num = 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預設的拼音輸入法沒有開啟全形輸入方式,所以先要去輸入法設定裡改一下。