詞干提取 stemming
實現功能:如 eating, eaten, ate, eats ---> eat
一般詞干提取器,移除 -s/es, -ing, -ed 這類事的准確度可以達到 70%;
- Porter 詞干提取器,使用更多規則,精確度更高;
- Snowball 提取器,是一個提取家族,可以分別處理多國語言。
注意:
如果要用到 詞性標注(POS)、NER 或某種依賴性解析器中的某些部分,應避免詞干提取操作;因為詞干提取會對相關分詞進行修改,這可能導致不同的結果。
from nltk.stem import PorterStemmer
from nltk.stem.lancaster import LancasterStemmer
from nltk.stem.snowball import SnowballStemmer
pst = PorterStemmer()
lst = LancasterStemmer()
lst.stem('eating')
# 'eat'
pst.stem('eating')
# 'eat'
自己設計 Porter 詞干提取器
http://snowball.tartarus.org/algorithms/english/stemmer.html
詞形還原(lemmatization)
相比詞干提取 更健全、更條理化;會利用上下文語境推斷相關單詞的變化形式,並運用不同的標准化規則,根據詞性來獲取相關的詞根
(lemma)。
from nltk.stem import WordNetLemmatizer
wlem = WordNetLemmatizer()
wlem.lemmatize('eating')
wlem.lemmatize('ate')
wordnet 是一個語義詞典;
WordNetLemmatizer 會針對某個單詞去搜索 wordnet;另外,它還是用了變形分析,以便直切詞根並搜索到特殊的詞形
(即這個單詞的相關變化)。
詞干提取 & 詞形還原
詞干提取操作更多時候是一套 用於獲取詞干一般形式的規則方法;
詞形還原主要考慮當前的上下文語境 以及 相關單詞的 POS,然后將規則應用到 特定的語法變化中。
通常來說,詞干提取的操作,實現起來更簡單,處理時間也短。
相關資料
-
Snowball 提取器
https://snowballstem.org
http://snowball.tartarus.org -
wordnet
https://wordnet.princeton.edu