1. 程式人生 > >中文文字預處理--主題模型

中文文字預處理--主題模型

去掉低頻詞、分詞、繁簡轉化、替換奇異詞等是中文文字資料處理中的重要步驟。

低頻詞

如在主題模型中,資料預處理的要求很簡單,只需要去掉低頻詞,大多數文章設定的門限都是5或者6.

分詞

中文文字相比於英文,需要首先進行分詞處理。類似地還有日文、韓文等。因而自然預言處理中一個重要的研究問題就是文字分詞技術。

國內常用的分詞工具有北理工張華平老師的NLPIR分詞包和百度工程師開發的jieba分詞,名字很有意思。

兩者都有Python版本,下面以jieba分詞為例:

    import jieba
    seg_list = jieba.cut("我來到北京清華大學"
, cut_all=True)

需要注意的是,分詞模型中比較重要的兩個點,是上下文和詞典。兩者都能極大地影響分詞效果,簡單來講,就是需要輸入文字內容較長,和詞典較全面。上例中的文字輸入對於初學者具有較強的誤導性,就是對一篇文章,可以分成一句一句來分詞,這是錯誤的。最好的情況是把所有需要被分詞的文字都拼接成一個長文字,然後輸入。如果有段落分隔需要的,可以用’\n’等特殊字元進行分割,在得到輸出的時候直接用str.split(‘\n’)分開就好。詞典就不用說了,我整理了一個比較全面的超大詞典,共享在github上,歡迎選用。只是詞的詞頻賦權還不夠全面,不過影響不大。連結:out link

詞幹化

英文論文中,常見到會對文字進行詞幹化處理(stemming), 就是吧把具有相同詞幹的單詞整理成一個單詞,也有點去掉低頻詞的意味,可以明顯改善詞頻較低的問題。主要原因還是因為在自然預言理解的時候,一個詞被替換成其詞幹不會影響理解,而能夠改善詞頻較低的問題。是統計建模前的必要處理過程。如:

tall, taller, tallest
good, better, best

分別具有相同的詞幹。python中有package可以處理這個問題,如stemming等,實現了若干知名演算法。具體的包演算法沒看,但是最簡單的一個方法是利用英文百科詞典,如word net這個語法資料庫,直接mapping就好了。

提取中文

當然了,中文資料集中包括很多數字、英文單詞、表情符號等。因而需要用正則表示式將他們全部提取出來。有很多文章研究了中文字元、中亞字元等的unicode範圍,下面是一個自測滿足中文字元提取的程式碼,直接copy用就好了。

    def Chinese_word_extraction(content_raw):
        chinese_pattern = u"([\u4e00-\u9fa5]+)"
        re_data = chi_pattern.findall(content_raw)
        content_clean  = ' '.join(re_data)

混淆對映

我處理的網易新聞資料集中有一個問題,就是網民在提到自認為的敏感詞的時候,會採用同音字、典故等方法進行替換。或者在敏感詞中加入一些特殊符號進行間隔。這些方法都太naive了,利用同音字對映、聯絡上下文和正則提取等方法就能解決這些問題。以後有時間了可以研究一下,挺有意思,而且已有的頂會論文好像就專門研究了這個問題。下面是我根據觀察發現的若干常用替換:

    replace_dict = {
    u'吻腚':u'穩定',
    u'弓雖':u'強',
    u'女幹':u'奸',
    u'示土':u'社',
    u'禾口':u'和',
    u'言皆':u'諧',
    u'釋永性':u'釋永信',
    u'大菊觀':u'大局觀',
    u'yl':u'一樓',
    u'cnm':u'草泥馬',
    u'CCTV':u'中央電視臺',
    u'CCAV':u'中央電視臺',
    u'ccav':u'中央電視臺',
    u'cctv':u'中央電視臺',
    u'qq':u'騰訊聊天賬號',
    u'QQ':u'騰訊聊天賬號',
    u'cctv':u'中央電視臺',
    u'CEO':u'執行長',
    u'克宮':u'克里姆林宮',
    u'PM2.5':u'細顆粒物',
    u'pm2.5':u'細顆粒物',
    u'SDR':u'特別提款權',
    u'裝13':u'裝逼',
    u'213':u'二逼',
    u'13億':u'十三億',
    u'巭':u'功夫',
    u'孬':u'不好',
    u'嫑':u'不要',
    u'夯':u'大力',
    u'芘':u'操逼',
    u'烎':u'開火',
    u'菌堆':u'軍隊',
    u'sb':u'傻逼',
    u'SB':u'傻逼',
    u'Sb':u'傻逼',
    u'sB':u'傻逼',
    u'is':u'伊斯蘭國',
    u'isis':u'伊斯蘭國',
    u'ISIS':u'伊斯蘭國',
    u'ko':u'打暈',
    u'你M':u'你妹',
    u'你m':u'你妹',
    u'震精':u'震驚',
    u'返工分子':u'反共',
    u'黃皮鵝狗':u'黃面板俄羅斯狗腿',
    u'蘇禍姨':u'蘇霍伊',
    u'混球屎報':u'環球時報',
    u'屎報':u'時報',
    u'jb':u'雞巴',
    u'j巴':u'雞巴',
    u'j8':u'雞巴',
    u'J8':u'雞巴',
    u'JB':u'雞巴',
    u'瞎BB':u'瞎說',
    u'nb':u'牛逼',
    u'牛b':u'牛逼',
    u'牛B':u'牛逼',
    u'牛bi':u'牛逼',
    u'牛掰':u'牛逼',
    u'蘇24':u'蘇兩四',
    u'蘇27':u'蘇兩七',
    u'痰腐集團':u'貪腐集團',
    u'痰腐':u'貪腐',
    u'反hua':u'反華',
    u'<br>':u' ',
    u'屋貓':u'五毛',
    u'5毛':u'五毛',
    u'傻大姆':u'薩達姆',
    u'黴狗':u'美狗',
    u'TMD':u'他媽的',
    u'tmd':u'他媽的',
    u'japan':u'日本',
    u'P民':u'屁民',
    u'八離開燴':u'巴黎開會',
    u'傻比':u'傻逼',
    u'潶鬼':u'黑鬼',
    u'cao':u'操',
    u'愛龜':u'愛國',
    u'天草':u'天朝',
    u'灰機':u'飛機',
    u'張將軍':u'張召忠',
    u'大褲衩':u'中央電視臺總部大樓',
    u'槍畢':u'槍斃',
    u'環球屎報':u'環球時報',
    u'環球屎包':u'環球時報',
    u'混球報':u'環球時報',
    u'還球時報':u'環球時報',
    u'人X日報':u'人民日報',
    u'人x日報':u'人民日報',
    u'清只縣':u'清知縣',
    u'PM值':u'顆粒物值',
    u'TM':u'他媽',
    u'首毒':u'首都',
    u'gdp':u'國內生產總值',
    u'GDP':u'國內生產總值',
    u'雞的屁':u'國內生產總值',
    u'999':u'紅十字會',
    u'黴裡賤':u'美利堅',
    u'毛子':u'俄羅斯人',
    u'ZF':u'政府',
    u'zf':u'政府',
    u'蒸腐':u'政府',
    u'黴國':u'美國',
    u'狗熊':u'俄羅斯',
    u'惡羅斯':u'俄羅斯',
    u'我x':u'我操',
    u'x你媽':u'操你媽',
    u'p用':u'屁用',
    u'胎毒':u'臺獨',
    u'DT':u'蛋疼',
    u'dt':u'蛋疼',
    u'IT':u'資訊科技',
    u'1樓':u'一樓',
    u'2樓':u'二樓',
    u'2逼':u'二逼',
    u'二b':u'二逼',
    u'二B':u'二逼',
    u'晚9':u'晚九',
    u'朝5':u'朝五',
    u'黃易':u'黃色網易',
    u'艹':u'操',
    u'滾下擡':u'滾下臺',
    u'靈道':u'領導',
    u'煳':u'糊',
    u'跟貼被火星網友帶走啦':u'',
    u'猿們':u'公務員們',
    u'棺猿':u'官員',
    u'貫猿':u'官員',
    u'每隻猿':u'每個公務員',
    u'巢縣':u'朝鮮',
    u'死大林':u'斯大林',
    u'無毛們':u'五毛們',
    u'天巢':u'天朝',
    u'普特勒':u'普京',
    u'依拉克':u'伊拉克',
    u'殲20':u'殲二零',
    u'殲10':u'殲十',
    u'殲8':u'殲八',
    u'f22':u'猛禽',
    u'p民':u'屁民',
    u'鍾殃':u'中央'
}

還非常不全面,也不是長久之計,下面搞一搞這個問題說不定還能水一篇論文,哈哈。