当前位置:   article > 正文

【NLP】英文数据预处理___词干/词元处理_词元词干

词元词干

目录

简介

异同

相同点

不同点

代码

词形还原

词干提取

Gensim_词形还原

说明


简介

词形还原(Lemmatization):把一个任何形式的语言词汇还原为基本形式(能表达完整语义);

词干提取(Stemming):抽取词的词干或词根形式(不一定能够表达完整语义);

二者都是词形规范化的方式,都能够达到有效归并词形的目的,二者既有联系也有区别。

 

异同

相同点

  • 处理目标一致——将词的屈折形态或派生形态简化或归并为词干(stem)或原形的基础形式,都是一种对词的不同形态的统一归并的过程。
  • 主流实现方法类似——均是利用语言中存在的规则或词典映射提取词干或获得词的原形。
  • 结果部分交叉——词干提取和词形还原不是互斥关系,其结果有部分交叉。部分词利用这两类方法都能达到相同的词形转换效果。如“dogs”的词干为“dog”,其原形(词形还原)也为“dog”。
  • 应用领域相似——主要应用于信息检索和文本、自然语言处理等方面,二者均是这些应用的基本步骤。

不同点

  • 原理:词干提取主要是采用“缩减”的方法,将词转换为词干,如将“cats”处理为“cat”,将“effective”处理为“effect”。而词形还原主要采用“转变”的方法,将词转变为其原形,如将“drove”处理为“drive”,将“driving”处理为“drive”。
  • 实现方法:虽然词干提取和词形还原实现的主流方法类似,但二者在具体实现上各有侧重。词干提取的实现方法主要利用规则变化进行词缀的去除和缩减,从而达到词的简化效果。词形还原则相对较复杂,有复杂的形态变化,单纯依据规则无法很好地完成。词形还原更依赖于词典,进行词形变化和原形的映射,生成词典中的有效词。
  • 复杂性:词干提取方法相对简单,词形还原则需要返回词的原形,需要对词形进行分析,不仅要进行词缀的转化,还要进行词性识别,区分相同词形但原形不同的词的差别。词性标注的准确率也直接影响词形还原的准确率,即词形还原更为复杂
  • 结果:词干提取和词形还原也有部分区别。词干提取的结果可能并不是完整的、具有意义的词,而只是词的一部分,如“revival”词干提取的结果为“reviv”,“ailiner”词干提取的结果为“airlin”。而词形还原处理后获得的结果是具有意义的、完整的词,一般为词典中的有效词
  • 应用领域:同样各有侧重。虽然二者均被应用于信息检索和文本处理中,但侧重不同。词干提取更多被应用于信息检索领域,如Solr、Lucene等,用于扩展检索,粒度较粗。词形还原更主要被应用于文本挖掘、自然语言处理,用于更细粒度、更为准确的文本分析和表达。即词形还原更具有研究和应用价值。

 

代码

词形还原

  1. from nltk.stem import WordNetLemmatizer
  2. wnl = WordNetLemmatizer()
  3. #print(wnl.lemmatize('countries','apples'))
  4. ff=open("xxx.txt",'a',encoding='UTF-8')
  5. list=[];
  6. with open("xxx.txt",'r',encoding='utf-8')as f:
  7. for line in f:
  8. LineList=[];
  9. for word in line.split():
  10. a=wnl.lemmatize(word)
  11. LineList.append(a);
  12. list.append(LineList);
  13. for line in list:
  14. print(line,file=ff);

 

词干提取

  1. from nltk.corpus import wordnet as wn
  2. import jieba
  3. import sys
  4. from nltk.stem import WordNetLemmatizer
  5. wnl = WordNetLemmatizer()
  6. #print(wnl.lemmatize('countries','apples'))
  7. ff=open("xxx.txt",'a')
  8. list=[];
  9. with open("xxx.txt",'r',encoding='utf-8')as f:
  10. for line in f:
  11. LineList=[];
  12. for word in line.split():
  13. a=wnl.lemmatize(word)
  14. LineList.append(a);
  15. list.append(LineList);
  16. for line in list:
  17. print(line,file=ff);

 

Gensim_词形还原

  1. # -*- coding: utf8 -*-
  2. import spacy
  3. nlp = spacy.load('en', disable=['parser', 'ner'])
  4. texts=[["x"],["xx"]]
  5. def lemmatization(texts, allowed_postags=['NOUN', 'ADJ', 'VERB', 'ADV']):
  6. """https://spacy.io/api/annotation"""
  7. texts_out = []
  8. for sent in texts:
  9. doc = nlp(" ".join(sent))
  10. texts_out.append([token.lemma_ for token in doc if token.pos_ in allowed_postags])
  11. return texts_out
  12. # Do lemmatization keeping only noun, adj, vb, adv
  13. data_lemmatized = lemmatization(texts, allowed_postags=['NOUN', 'ADJ', 'VERB', 'ADV'])
  14. data=str(data_lemmatized)
  15. f=open('xxx.txt','w',encoding='utf-8')
  16. f.writelines(data)
  17. f.close()

 

说明

 

 

本文内容由网友自发贡献,转载请注明出处:【wpsshop博客】
推荐阅读
相关标签
  

闽ICP备14008679号