形态学可以定义为使用语素对单词的构成进行研究,语素是具有意义的最小语言单位。
1、形态学简介
语素有两种类型:词根和词缀(后缀、前缀、中缀和环缀)。词根可以独立存在,词缀不能以自由的形式存在。
2、理解词干提取器
通过去除单词中的词缀以获取词干的过程。为了提高信息检索的准确性,搜索引擎大多会使用词干提取来获取词干并将器存储为索引词。搜索引擎使用具有相同含义的同义词,这可能是一种被称为异文合并的查询扩展。
>>> from nltk.stem import PorterStemmer
>>> stemmerporter = PorterStemmer()
>>> stemmerporter.stem('working')
u'work'
>>> stemmerporter.stem('happiness')
u'happi'
Lancaster的词干提取算法
>>> from nltk.stem import LancasterStemmer
>>> stemmerlan = LancasterStemmer()
>>> stemmerlan.stem('working')
'work'
>>> stemmerlan.stem('happiness')
u'happy'
RegexpStemmer词干提取
>>> from nltk.stem import RegexpStemmer
>>> stemmerregexp = RegexpStemmer('ing')
>>> stemmerregexp.stem('working')
u'work'
3、理解词性还原
是一个用不同的词类将一个单词转换为某种形式的过程。
>>> from nltk.stem import WordNetLemmatizer
>>> lemmatizer_output = WordNetLemmatizer()
>>> lemmatizer_output.lemmatize('working')
'working'
>>> lemmatizer_output.lemmatize('working',pos='v')
u'work'
>>> lemmatizer_output.lemmatize('works')
u'work'
词干提取和词形还原之间的区别:
>>> from nltk.stem import PorterStemmer
>>> stemmer_output=PorterStemmer()
>>> stemmer_output.stem('happiness')
u'happi'
>>> from nltk.stem import WordNetLemmatizer
>>> lemmatizer_output=WordNetLemmatizer()
>>> lemmatizer_output.lemmatize('happiness')
'happiness'
4、为非英文语言开发词干提取器
Polyglot是一个用于提供被称作morfessor模型的软件
5、形态分析器
在给定标识符后缀信息的前提下,形态分析可以认为是一个从标识符中获取语法信息的过程。形态分析器可以认为是一个程序,负责对给定的输入标识符进行形态学分析。它分析给定的标识符并生成诸如性别、数、词类等形态信息作为输出。代码有点问题
# -*- coding: utf-8
import nltk
import enchant
s = enchant.Dict("en_US")
tok = []
def tokenize(st1):
if not st1:return
for j in xrange(len(st1), -1, -1):
if s.check(st1[0:j]):
tok.append(st1[0:j])
st1 = st1[j:]
tokenize(st1)
break
tokenize("itismyfavouritebook")
print(tok)
6、形态生成器
是执行形态生成任务的程序。可以认为形态生成是与形态分析相反的任务。这里,如果给出单词在数、类别、词干等方面的描述,就可检索出原始的单词。例如,如果词根为go,词性为动词,时态为现在时,并且如果它与第三人称和单数主语一起出现。
https://github.com/kmike/pymorphy2
7、搜索引擎
PyStemmer 1.0.1由可用于执行信息检索任务和构建搜索引擎的Snowball词干提取算法组成。