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才算可以用的數據