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

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

字符轉換 處理 unicode 指點 介紹 合並 圖片 十六進制 文本

  先來看一個截圖,爬蟲得到的結果,裏面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默認的拼音輸入法沒有開啟全角輸入方式,所以先要去輸入法設置裏改一下。

                  技術分享圖片          

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