本文主要參考Coursera上國立高等經濟大學的天然語言處理課程。git
在天然語言處理問題中,咱們能夠講文本當成是下述成分組成的序列(sequence
):github
本文主要以 詞語 來舉例。bash
什麼是 token 呢?機器學習
天然語言處理的第一步一般是 tokenization,即將 輸入的文本(sequence
)轉換爲 token 的過程。學習
因爲中文的表示與英文不一樣,英文中一般有空格來標識每個單詞,中文沒有明確的標識,因此中文的分詞比較複雜;ui
一般使用而言,一些經常使用的分詞庫已經能夠知足大部分需求。spa
eg. 使用 jieba 將一段文本分詞。code
import jieba
seg_list = jieba.cut("我來到北京清華大學", cut_all=False)
print("Default Mode: " + "/ ".join(seg_list))
''' 我/ 來到/ 北京/ 清華大學 '''
複製代碼
上述例子中的過程就是 tokenization 過程。orm
僅關注中文處理能夠僅看概念blog
英文預處理過程當中的第二步叫作 tokenization normalization
這個過程是指 將相同含義可是不一樣形式的詞轉換成同一個詞(token
)
eg.
一般有兩種方式來實現這個過程:
由於我想主要集中在中文預處理,因此這兩個過程就不敘述了,能夠經過
nltk.stem.PorterStemmer
和nltk.stem.WordNetLemmatizer
來實現這兩種方式。
在將文本轉化爲 token 的過程當中,標點符號 僅對閱讀有用,而對 語義理解 沒有太大做用。
eg.
上述兩個句子的語義徹底相同,而在 tokenization 過程當中卻獲得兩種不一樣的結果。因此在文本預處理過程當中須要 去除標點符號。
和標點符號類似,在文本預處理過程當中還須要去除之如「着」,「和」等一些 對語義理解幫助不大 的詞,這些詞就被稱爲 停用詞。
經常使用 中文停用詞下載地址 見文章末尾。
英文停用詞能夠直接用 nltk
提供的
import nltk
nltk.download('stopwords')
from nltk.corpus import stopwords
複製代碼
能夠在停用詞中加入標點符號,這樣就能夠統一兩個過程。
本文主要將了文本預處理中的幾個概念:
下一篇文章將繼續講解 文本向量化表示的方式(傳統機器學習):