NLTK 词干提取、词形还原


词干提取 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,然后将规则应用到 特定的语法变化中。
通常来说,词干提取的操作,实现起来更简单,处理时间也短。


相关资料


原文地址:https://www.cnblogs.com/fldev/p/14370967.html