正則表達式:去除Unicode


背景:最近在做中文分詞的時候,發現分詞后的數據中出現很多特殊字符,即使進行了去停用詞操作,但是特殊字符太多,也不可能都加到停用詞里,所以就准備用正則去掉,正則很簡單,直接上代碼:

    /**
     * 正則去掉unicode等特殊字符
     * */
    private static String regularFilter(String text) {
        /**
         * \p{L}或\p{Letter}:來自任何語言的任何形式的字母。
         *      \p{Ll}或\p{Lowercase_Letter}:小寫字母,帶有大寫字母。
         *      \p{Lu}或\p{Uppercase_Letter}:具有小寫字母變體的大寫字母。
         *      \p{Lt}或\p{Titlecase_Letter}:僅當單詞的第一個字母大寫時,出現在單詞開頭的字母。
         *      \p{L&}或\p{Cased_Letter}:存在小寫和大寫變體(Ll,Lu和Lt的組合)的字母。
         *      \p{Lm}或\p{Modifier_Letter}:一個特殊字符,用作字母。
         *      \p{Lo}或\p{Other_Letter}:沒有小寫和大寫變體的字母或表意文字。
         * \p{M}或\p{Mark}:打算與另一個字符組合的字符(例如重音符號,變音符,封閉框等)。
         *      \p{Mn}或\p{Non_Spacing_Mark}:旨在與另一個字符組合而又不占用多余空間(例如重音符號,變音符號等)的字符。
         *      \p{Mc}或\p{Spacing_Combining_Mark}:一個字符,旨在與另一個占用額外空間的字符組合(許多東方語言中的元音符號)。
         *      \p{Me}或\p{Enclosing_Mark}:一個字符,它將與之組合的字符括起來(圓形,正方形,鍵帽等)。
         * \p{Z}或\p{Separator}:任何類型的空格或不可見的分隔符。
         *      \p{Zs}或\p{Space_Separator}:一個不可見但占用空間的空白字符。
         *      \p{Zl}或\p{Line_Separator}:行分隔符U + 2028。
         *      \p{Zp}或\p{Paragraph_Separator}:段落分隔符U + 2029。
         * \p{S}或\p{Symbol}:數學符號,貨幣符號,裝飾符號,畫框的字符等。
         *      \p{Sm}或\p{Math_Symbol}:任何數學符號。
         *      \p{Sc}或\p{Currency_Symbol}:任何貨幣符號。
         *      \p{Sk}或\p{Modifier_Symbol}:組合字符(標記)本身就是完整字符。
         *      \p{So}或\p{Other_Symbol}:不是數學符號,貨幣符號或組合字符的各種符號。
         * \p{N}或\p{Number}:任何腳本中的任何數字字符。
         *      \p{Nd}或\p{Decimal_Digit_Number}:除表意文字外,任何文字中的數字從零到九。
         *      \p{Nl}或\p{Letter_Number}:看起來像字母的數字,例如羅馬數字。
         *      \p{No}或\p{Other_Number}:上標或下標數字,或者不是0到9的數字(表意文字中的數字除外)。
         * \p{P}或\p{Punctuation}:任何一種標點符號。
         *      \p{Pd}或\p{Dash_Punctuation}:任何類型的連字符或破折號。
         *      \p{Ps}或\p{Open_Punctuation}:任何類型的左括號。
         *      \p{Pe}或\p{Close_Punctuation}:任何類型的右括號。
         *      \p{Pi}或\p{Initial_Punctuation}:任何形式的開頭引號。
         *      \p{Pf}或\p{Final_Punctuation}:任何形式的結束語。
         *      \p{Pc}或\p{Connector_Punctuation}:標點符號,例如連接單詞的下划線。
         *      \p{Po}或\p{Other_Punctuation}:不是破折號,方括號,引號或連接符的任何一種標點符號。
         * \p{C}或\p{Other}:不可見的控制字符和未使用的代碼點。
         *      \p{Cc}或\p{Control}:ASCII或Latin-1控制字符:0x00–0x1F和0x7F–0x9F。
         *      \p{Cf}或\p{Format}:不可見的格式指示符。
         *      \p{Co}或\p{Private_Use}:保留供私人使用的任何代碼點。
         *      \p{Cs}或\p{Surrogate}:采用UTF-16編碼的一對代理對的一半。
         *      \p{Cn}或\p{Unassigned}:未分配任何字符的任何代碼點。
         * */
        // 替換成",",防止本來不是一起的詞被分配到一起影響分詞結果,同時","會被停用詞去掉
        return text.replaceAll("[\\pM\\pZ\\pS\\pN\\pP\\pC]+", ",");
    }

如代碼中注釋所示,通過使用正則來匹配Unicode所屬類別,直接過濾掉了Unicode,非常方便!

注意的是,正則中沒有使用“\p{L}”,這是因為“\p{L}”也會過濾掉中文字符,需要注意,其它的自己看說明並嘗試下,就比較清楚了!

參考資料:http://www.regular-expressions.info/unicode.html

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM