NLP數據預處理


  0.當前最火熱的項目之一就是機器學習了,而機器學習中有一座大山,就是NLP(自然語言處理)自然語言處理處理的是非結構化的數據,而且是字符串

,我們知道計算機擅長處理的是數字,最好是0 1,十六進制什么的,實在不行10進制也湊合用,所以,要進行NLP第一關就是數據預處理。在此我只講解過

程和簡要代碼,具體代碼可以去https://github.com/Ericgoodboy/NLP查看,這個庫持續更新,有興趣的給個星星。話不多說開整。

  1.處理標點符號,這個標點其實很搞的,有一個庫叫zhon里面有中文的符號,但中文符號太多了,那個庫好像處理不太干凈,可以嘗試用正則的方式判定

中文字符的范圍,因為中文字符的unicode范圍是一定的。可以嘗試如下正則:

deleteChar = re.compile(u"[^a-zA-Z0-9\u4e00-\u9fa5]")

  2.分詞。英文直接用空格符等分詞就行了,但中文比較復雜,在中文分詞上,結巴分詞做的還是挺好的,用了隱馬爾可夫,很方便。用起來也很簡單。代碼如下:

import jieba
jieba.cut(sentence)

   3.統計詞頻,因為我們不可能吧所有的詞都用上。因為有些詞的頻率真的很小。對模型的影響很小,還會被當做噪聲。所以我們只統計頻率比較大的詞代碼也很簡單

如下:

resDic = {}
    for line in data:
        for word in line:
            if word in resDic:
                resDic[word]+=1
            else:
                resDic[word]=1

  4.給每一個單詞一個id,並將原來的句子替換成id的表現形式,方法很簡單,就不貼代碼了直接去github里面有詳細代碼,在文件/src/preprocess/dataprocess.py中

 

  -1.做完以上4步,預處理算是完成了,但這種數據還是不能放到神經網絡中訓練,還要選擇相應的模型,如one-hot,或者word2vec之類的,將每一個詞轉化為id才算可以用的數據


免責聲明!

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



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