1. 程式人生 > >Python文字處理——中文標點符號處理

Python文字處理——中文標點符號處理

中文文字中可能出現的標點符號來源比較複雜,通過匹配等手段對他們處理的時候需要格外小心,防止遺漏。以下為在下處理中文標點的時候採用的兩種方法,如有更好的工具,請推薦補充。

  1. 中文標點集合
    比較常見標點有這些:
    !?。"#$%&'()*+,-/:;<=>@[\]^_`{|}~⦅⦆「」、、〃》「」『』【】〔〕〖〗〘〙〚〛〜〝〞〟〰〾〿–—‘’‛“”„‟…‧﹏.
    呼叫zhon包zhon.hanzi.punctuation函式即可得到這些中文標點。
    如果想用英文的標點,則可呼叫string包的string.punctuation函式可得到: !"#$%&\'()*+,-./:;<=>
    [email protected]
    [\\]^_`{|}~

    因此,比如需要將所有標點符號去除,可以進行以下操作:
>>> import re
>>> from zhon.hanzo import punctuation
>>> line = "測試。。去除標點。。"
>>> print re.sub(ur"[%s]+" %punctuation, "", line.decode("utf-8")) # 需要將str轉換為unicode
測試去除標點
>>> print re.sub(ur"[%s]+" %punctuation, "", line) #將不會發生替換
測試。。去除標點。。

當然,如果想去除重複的符號而只保留一個,那麼可以用\1指明:比如

>>> re.sub(ur"([%s])+" %punctuation, r"\1", line.decode("utf-8"))

如果不是用的zhon包提供的已經是unicode碼的標點集,而是自己定義,那麼請不要忘了轉換成unicode碼:

punc = "!?。"#$%&'()*+,-/:;<=>@[\]^_`{|}~⦅⦆「」、、〃》「」『』【】〔〕〖〗〘〙〚〛〜〝〞〟〰〾〿–—‘’‛“”„‟…‧﹏."
punc = punc.decode("utf-8")
  1. 直接指明標點的unicode碼範圍
    所有字元的unicode編碼可以參考
    這裡

    大部分標點分佈在以下幾個範圍:
Basic Latin: u'\u0020' - u'\007f'
general punctuation: u'\u2000' - u'\u206f'
CJK Symbols and Punctuation: u'\u3000' - u'\u303f'
halfwidth and fulllwidth forms: u'\uff00' - u'\uffef'

在用u'\u0020-\u007f\u2000-\u206f\u3000-\u303f\uff00-uffef'替換punctuation就能實現上述操作。
PS:中文常用字元的範圍是u'\u4e00' - u'\u9fff'匹配所以中文可以這樣:

re.findall(ur"\u4e00-\u9fff", line)

小結:

  1. 基本標點符號的處理和上中文的文字處理一樣需要轉換成unicode碼,而且需要注意的是中文的格式比較多,每種格式對應的unicode碼都是不同的,比如半形和全形的符號就是不同的unicode碼。
  2. 由於標點符號在斷句以及情感語氣判斷時比較重要,尤其是在網路短文字上尤其如此。在斷句的時候可以在固定的full stop符號(!?。)基礎上自己新增諸如~和,等獲得自己想要的分句;而在情感分析的時候獲取諸如!?...等符號的連續出現的長度可用於判斷當前的語氣強度。

參考:

  1. http://stackoverflow.com/questions/2718196/find-all-chinese-text-in-a-string-using-python-and-regex
  2. http://stackoverflow.com/questions/1366068/whats-the-complete-range-for-chinese-characters-in-unicode
  3. http://zhon.readthedocs.io/en/latest/#

相關推薦

Python文字處理——中文標點符號處理

中文文字中可能出現的標點符號來源比較複雜,通過匹配等手段對他們處理的時候需要格外小心,防止遺漏。以下為在下處理中文標點的時候採用的兩種方法,如有更好的工具,請推薦補充。 中文標點集合 比較常見標點有這些:!?。"#$%&'()*+,-/:;<=>@[\]^_`{|

中文編碼】使用Python處理中文時的文字編碼問題

0x00 正文 最近,在處理中文編碼的資料的時候,遇到了一些還是令人頭疼的問題。 亂碼! 亂碼!! 亂碼!!! 稍微整理一下處理過程,順帶著記錄一下解決方案啥的…… 0x01 文字轉碼 最初,拿到很多GB2312(Simplify)編碼的HTM

Python處理中文文字字元時提取某個漢字或字元的方法

最近學了python扒取網頁論壇資訊,其實python在處理字串和文字時,其封裝好的函式功能很強悍的,何以很方便的呼叫處理資訊。廢話不多說,我在爬取論壇資訊時遇到一個回帖資訊,上邊二樓及以下樓層回帖資訊上標註比如“2樓網友回覆”“3樓網友回覆”等等,我要獲取樓層數,說白了就睡獲取第一個字元,然後轉換為int型

Python爬蟲中文小說網點查找小說並且保存到txt(含中文亂碼處理方法)

nbsp nor png erro 請求方式 輸出結果 下載 ros mozilla 從某些網站看小說的時候經常出現垃圾廣告,一氣之下寫個爬蟲,把小說鏈接抓取下來保存到txt,用requests_html全部搞定,代碼簡單,容易上手. 中間遇到最大的問題就是編碼問題,第一抓

8種Python文字處理工具集

文字處理一般包括詞性標註,句法分析,關鍵詞提取,文字分類,情感分析等等,這是針對中文的,如果是對於英文來說,只需要基本的tokenize。本文為大家提供了以下這些工具包。 1.Jieba 【結巴中文分詞】做最好的 Python 中文分片語件 其功能包括支援三種分詞模式(精確模式、全模式、搜尋

python gensim使用】word2vec詞向量處理中文語料

word2vec介紹 word2vec官網:https://code.google.com/p/word2vec/ word2vec是google的一個開源工具,能夠根據輸入的詞的集合計算出詞與詞之間的距離。 它將term轉換成向量形式,可以把對文字內容的處理簡化為向量空間中的向量運算,計算出向

[Python工具]FoolNLTK 中文處理工具包使用教程

FoolNLTK 中文處理工具包 近日 GitHub 使用者 wu.zheng 開源了一個使用雙向 LSTM 構建的中文處理工具包,該工具不僅可以實現分詞、詞性標註和命名實體識別,同時還能使用使用者自定義字典加強分詞的效果。 特點 可能不是最快的開源中文分詞,但很可能

python MySQL database 訪問處理(含中文字元處理)例項

直接上程式碼: #!/usr/bin/env python # encoding: utf-8

Python中一般如何處理中文

Python中的中文是個很頭痛的問題,Python2和Python3都會出現,而且py2中出現的概率要大些。 有一道面試題: Python中如何處理中文問題,能想到的就是以下幾方面來規避: 1. 首行新增 # coding = utf-8 # coding = utf-8 #

Python文字處理幾種方法

Python文字處理幾種方法 方法一:readline函式 #-*- coding: UTF-8 -*- f = open("D:\pythontest\splm_ugslmd.log")    &nbs

SnowNLP:處理中文文字內容

這是一個比yaha更加強大的中文分詞工具。yaha簡單來說只是使用最短路徑演算法(Dijstra)實現了中文分詞,而SnowNLP則實現了詞性標標準,情感分析,文字分類,轉換成拼音,繁體轉簡體,文字關鍵詞提取,文字摘要提取,tf,idf,Tokenization(分割成句子

Python文字資料處理

1、文字基本操作 text1 = 'Python is a widely used high-level programming language for general-purpose programming, created by Guido van Ro

spring boot 頂層filter處理GBK文字中文亂碼

import org.springframework.boot.web.servlet.FilterRegistrationBean; import org.springframework.context.annotation.Bean; import org.springframework.c

python與sqlite處理中文字元時出現的編碼錯誤問題解決

   python編碼如果把中文資料儲存至sqlite資料庫某一欄位中,再通過查詢語句取出並進行相關的字串操作時,經常會出現錯誤提示,類似於UnicodeDecodeError,提示某一型別編碼不能轉換。     出現這個問題的原因是因為python預設使用unicod

R語言機器學習與大資料視覺化暨Python文字挖掘與自然語言處理核心技術研修

中國通訊工業協會通訊和資訊科技創新人才培養工程專案辦公室通人辦〔2017〕 第45號“R語言機器

Python CGi URL 中文以及特殊轉義字元的處理

搜尋了網上的介紹,發現python升級後,需要 修正一下,因此,重新記錄一下! urlencode:urllib中的quote方法 >>>from six.moves.urllib.parse import quote >>> quote

Python文字處理筆記(readlines去掉回車+string list to int list)

readlines()去掉回車: f.read().splitlines() string list –> int list results = [int(i) for i in results] char, int 相互轉換: char = c

Python 文字資料處理

1 基本特徵提取 import pandas as pd train=pd.read_csv(".../train_E6oV3lV.csv") print(train.head(10)) 1.1 詞彙數量 我們可以簡單地呼叫split函式,將句子切

使用python處理中文csv檔案,並讓excel正確顯示中文(避免亂碼)

使用python2處理中文時,經常會出現亂碼問題,之前使用python處理中文csv檔案時,處理過程程式輸出出現了亂碼,最後在程式中能夠正常顯示出中文,但是匯出檔案時,使用excel打開出現了中文亂碼問

python中json處理中文問題

Json處理中文問題:     關於python字串的處理問題,如果深入的研究下去,我覺得可以寫2篇文章了(實際上自己還沒整很明白),在這裡主要還是總結下使用python2.7.11處理json資料的問題。前期做介面測試,處理最多的事情就是,把資料組裝成各種協議的報文,