本文首發自 easyAI - 產品經理的 AI 知識庫算法
原文地址:《一文看懂詞幹提取Stemming和詞形還原Lemmatisation(概念、異同、算法)》數據庫
詞幹提取和詞形還原是英文語料預處理中的重要環節。雖然他們的目的一致,可是二者仍是存在一些差別。bash
本文將介紹他們的概念、異同、實現算法等。優化
詞幹提取是英文語料預處理的一個步驟(中文並不須要),而語料預處理是 NLP 的第一步,下面這張圖將讓你們知道詞幹提取在這個知識結構中的位置。ui
詞幹提取 - Stemmingspa
詞幹提取是去除單詞的先後綴獲得詞根的過程。code
你們常見的先後詞綴有「名詞的複數」、「進行式」、「過去分詞」...cdn
詞形還原 - Lemmatisationblog
詞形還原是基於詞典,將單詞的複雜形態轉變成最基礎的形態。開發
詞形還原不是簡單地將先後綴去掉,而是會根據詞典將單詞進行轉換。好比「drove」會轉換爲「drive」。
爲何要作詞幹提取和詞形還原?
好比當我搜索「play basketball」時,Bob is playing basketball 也符合個人要求,,可是 play 和 playing 對於計算機來講是 2 種徹底不一樣的東西,因此咱們須要將 playing 轉換成 play。
詞幹提取和詞形還原的目的就是將長相不一樣,可是含義相同的詞統一塊兒來,這樣方便後續的處理和分析。
Porter
這種詞幹算法比較舊。它是從20世紀80年代開始的,其主要關注點是刪除單詞的共同結尾,以便將它們解析爲通用形式。它不是太複雜,它的開發中止了。
一般狀況下,它是一個很好的起始基本詞幹分析器,但並不建議將它用於複雜的應用。相反,它在研究中做爲一種很好的基本詞幹算法,能夠保證重複性。與其餘算法相比,它也是一種很是溫和的詞幹算法。
「推薦」Snowball
種算法也稱爲 Porter2 詞幹算法。它幾乎被廣泛認爲比 Porter 更好,甚至發明 Porter 的開發者也這麼認爲。Snowball 在 Porter 的基礎上加了不少優化。Snowball 與 Porter 相比差別約爲5%。
Lancaster
Lancaster 的算法比較激進,有時候會處理成一些比較奇怪的單詞。若是在 NLTK 中使用詞幹分析器,則能夠很是輕鬆地將本身的自定義規則添加到此算法中。
詞形還原是基於詞典的,每種語言都須要通過語義分析、詞性標註來創建完整的詞庫,目前英文詞庫是很完善的。
Python 中的 NLTK 庫包含英語單詞的詞彙數據庫。這些單詞基於它們的語義關係連接在一塊兒。連接取決於單詞的含義。特別是,咱們能夠利用 WordNet。
import nltk
from nltk.stem import WordNetLemmatizer
lemmatizer = WordNetLemmatizer()
print(lemmatizer.lemmatize("blogs"))
#Returns blog
複製代碼
詞幹提取和詞形還原都是將長相不一樣,可是含義相同的詞統一塊兒來,這樣方便後續的處理和分析。
他們是英文語料預處理中的一個環節。
詞幹提取和詞形還原的 4 個類似點:
詞幹提取和詞形還原的 5 個不一樣點:
3 種詞幹提取的主流算法:
英文的詞形還原能夠直接使用 Python 中的 NLTK 庫,它包含英語單詞的詞彙數據庫。