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,然后将规则应用到 特定的语法变化中。
通常来说,词干提取的操作,实现起来更简单,处理时间也短。
相关资料
-
Snowball 提取器
https://snowballstem.org
http://snowball.tartarus.org -
wordnet
https://wordnet.princeton.edu