本文首发自 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 库,它包含英语单词的词汇数据库。