解決遇到空白段落發生程式異常錯誤而執行中斷的問題

前陣子同事文字處理的程式遇到空白段落發生異常錯誤而中斷執行。TRIM 函數可以去除半形空白、換行字元、Tab 定位字元。但是看起來空白的字元,卻無法使用 TRIM 函數去除,可能是其他的空白字元。解決方式是偵測段落內有沒有包含英文、數字、漢字,再進行後續處理。


hot air balloon in the sky
Photo by Matt Bango on StockSnap

問題狀況

文章段落已經前處理 (preprocessing),將段落依照換行符號分成不同句子,再進行斷詞。但是處理過程中遇到空白段落,會發生異常導致整個程式中斷。雖然已經使用 TRIM 函數去除前後空白,但是仍然遇到同樣異常狀況。

解決方式

TRIM 函數可以去除半形空白、換行字元、Tab 定位字元。但是看起來空白的字元,卻無法使用 TRIM 函數去除,可能是其他的空白字元 (whitespace character),例如:

  1. 全型空白 (ideographic space)
  2. 不換行空白 (non-breaking space) 如果是透過網路爬蟲抓取的資料,很容易遇到這種類型空白
  3. 控制字元 (control character)
  4. 非列印字元 (non-printable characters)

因為無法很快使用 TRIM 函數去除,又無法快速找到處理方式,所以反過來思考什麼「什麼是非空白」?段落中包含:

  1. 包含英文字
  2. 包含數字
  3. 包含漢字
只要符合「什麼是非空白」以上其中一個條件,才進入斷詞程序,就可以忽略程式本身遇到看似空白就會異常中斷的問題。使用正則表示式的語法:
[a-zA-Z0-9\x{4e00}-\x{9fa5}]+
語法說明
  1. [ .. ]:符合中括號內任一字元
  2. [ .. ]+:符合中括號內任一字元至少一字
  3. 英文字:上方語法 a-zA-Z
  4. 數字:上方語法 0-9
  5. 漢字:上方語法 {4e00}-\x{9fa5}
綜合上方條件,符合英文字、數字、漢字等至少一字以上 (線上測試正則表示式語法)

相關資料


留言