天然語言處理之文本預處理(一)

本文主要參考Coursera上國立高等經濟大學的天然語言處理課程。git

文本是什麼?

在天然語言處理問題中,咱們能夠講文本當成是下述成分組成的序列(sequence):github

  • 詞語
  • 句子
  • 段落
  • 文章
  • ...

本文主要以 詞語 來舉例。bash

token

什麼是 token 呢?機器學習

  • 能夠將 token 認爲是語義處理過程當中的一個 有意義的單元
  • token 能夠是 , , 段落 等等。

tokenization

天然語言處理的第一步一般是 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

tokenization normalization

僅關注中文處理能夠僅看概念blog

英文預處理過程當中的第二步叫作 tokenization normalization

這個過程是指 將相同含義可是不一樣形式的詞轉換成同一個詞(token

eg.

  • wolf, wolves -> wolf
  • talk, talks -> talk

一般有兩種方式來實現這個過程:

  • 詞幹提取(stemming)
  • 詞性還原(lemmatization)

由於我想主要集中在中文預處理,因此這兩個過程就不敘述了,能夠經過 nltk.stem.PorterStemmernltk.stem.WordNetLemmatizer 來實現這兩種方式。

標點符號

在將文本轉化爲 token 的過程當中,標點符號 僅對閱讀有用,而對 語義理解 沒有太大做用。

eg.

  • 我來到北京清華大學
  • 我來到,北京清華大學。

上述兩個句子的語義徹底相同,而在 tokenization 過程當中卻獲得兩種不一樣的結果。因此在文本預處理過程當中須要 去除標點符號

停用詞

和標點符號類似,在文本預處理過程當中還須要去除之如「着」,「和」等一些 對語義理解幫助不大 的詞,這些詞就被稱爲 停用詞

經常使用 中文停用詞下載地址 見文章末尾。

英文停用詞能夠直接用 nltk 提供的

import nltk
nltk.download('stopwords')
from nltk.corpus import stopwords
複製代碼

能夠在停用詞中加入標點符號,這樣就能夠統一兩個過程。

總結

本文主要將了文本預處理中的幾個概念:

  • 文本的組成
  • tokenization
  • 標點符號和停用詞

下一篇文章將繼續講解 文本向量化表示的方式(傳統機器學習)

  • BoW
  • BoW + n-gram
  • tf-idf
  • word2vec

參考文獻

www.coursera.org/learn/langu…

github.com/fxsjy/jieba

中文經常使用停用詞下載地址

相關文章
相關標籤/搜索