停用词的过滤

在自然语言处理中,我们通常把停用词、出现频率很低的词汇过滤掉。这个过程其实类似于特征筛选的过程。当然停用词过滤,是文本分析中一个预处理方法。它的功能是过滤分词结果中的噪声。比如:的、是、啊等。在英文里,我们经常会遇到比如“the”,“an”,“their”等这些都可以作为停用词来处理,但是也考虑自己的应用场景。当然如果出现一种出现频率特别低的词汇对分析作用不大,所以一般般也会去掉。把停用词、出现频率低的词过滤之后,即可以得到一个我们的词典库。以下我们用python实现停用词过滤的实现:

from collections import Counter

import jieba

# jieba.load_userdict('userdict.txt')

# 创建停用词list

def stopwordslist(filepath):

stopwords = [line.strip() for line in open(filepath, 'r').readlines()]

return stopwords

# 对句子进行分词

def seg_sentence(sentence):

sentence_seged = jieba.cut(sentence.strip())

stopwords = stopwordslist('filename') # 这里加载停用词的路径

outstr = ''

for word in sentence_seged:

if word not in stopwords:

if word != '\t':

outstr += word

outstr += " "

return outstr

inputs = open('filename', 'r') #加载要处理的文件的路径

outputs = open('filename', 'w') #加载处理后的文件路径

for line in inputs:

line_seg = seg_sentence(line) # 这里的返回值是字符串

outputs.write(line_seg)

outputs.close()

inputs.close()

# WordCount

with open('filename', 'r') as fr: #读入已经去除停用词的文件

data = jieba.cut(fr.read())

data = dict(Counter(data))

with open('filename', 'w') as fw: #读入存储wordcount的文件路径

for k,v in data.items():

fw.write('%s,%d\n' % (k, v))

这里是处理之前的文件:

处理前文件

经过去停用词后所得到的文件:

处理后文件

最后所得到的wordcount文件,格式是(词,出现的频数):

停顿词次数

词汇的正则化

词干提取(Stemming)和词形还原(Lemmatization)

词形还原Lemmatization),是把一个任何形式的语言词汇还原为一般形式(能表达完整语义),而词干提取(Stemming)是抽取词的词干或词根形式(不一定能够表达完整语义)。词形还原和词干提取是词形规范化的两类重要方式,都能够达到有效归并词形的目的,二者既有联系也有区别。

首先让我们看一下联系:

1、目标一致。词干提取和词形还原的目标均为将词的屈折形态或派生形态简化或归并为词干(stem)或原形的基础形式,都是一种对词的不同形态的统一归并的过程。

2、结果部分交叉。词干提取和词形还原不是互斥关系,其结果是有部分交叉的。一部分词利用这两类方法都能达到相同的词形转换效果。如“dogs”的词干为“dog”,其原形也为“dog”。

3、主流实现方法类似。目前实现词干提取和词形还原的主流实现方法均是利用语言中存在的规则或利用词典映射提取词干或获得词的原形。

4、应用领域相似。主要应用于信息检索和文本、自然语言处理等方面,二者均是这些应用的基本步骤。

接下来我们看看区别:

a、在原理上,词干提取主要是采用“缩减”的方法,将词转换为词干,如将“cats”处理为“cat”,将“effective”处理为“effect”。而词形还原主要采用“转变”的方法,将词转变为其原形,如将“drove”处理为“drive”,将“driving”处理为“drive”。

b、在复杂性上,词干提取方法相对简单,词形还原则需要返回词的原形,需要对词形进行分析,不仅要进行词缀的转化,还要进行词性识别,区分相同词形但原形不同的词的差别。词性标注的准确率也直接影响词形还原的准确率,因此,词形还原更为复杂。

c、在实现方法上,虽然词干提取和词形还原实现的主流方法类似,但二者在具体实现上各有侧重。词干提取的实现方法主要利用规则变化进行词缀的去除和缩减,从而达到词的简化效果。词形还原则相对较复杂,有复杂的形态变化,单纯依据规则无法很好地完成。其更依赖于词典,进行词形变化和原形的映射,生成词典中的有效词。

d、在结果上,词干提取和词形还原也有部分区别。词干提取的结果可能并不是完整的、具有意义的词,而只是词的一部分,如“revival”词干提取的结果为“reviv”,“ailiner”词干提取的结果为“airlin”。而经词形还原处理后获得的结果是具有一定意义的、完整的词,一般为词典中的有效词。

e、在应用领域上,同样各有侧重。虽然二者均被应用于信息检索和文本处理中,但侧重不同。词干提取更多被应用于信息检索领域,如Solr、Lucene等,用于扩展检索,粒度较粗。词形还原更主要被应用于文本挖掘、自然语言处理,用于更细粒度、更为准确的文本分析和表达。

接下来我们用python分别实现stemming、lemmatization。不过在实现之前我们应该首先装nltk库。

首先用win+R快捷键打开cmd终端,并在cmd终端中输入如下命令,为了节约时间我们可以用豆瓣的下载源。

首先用win+R快捷键打开cmd终端,并在cmd终端中输入如下命令,为了节约时间我们可以用豆瓣的下载源。

pip install nltk --upgrade pip -i https://pypi.douban.com/simple

如图所示:

安装NLTK库

接下来在CMD中输入python,进入python解析器,具体操作如下:

python

import nltk

nltk.download()

进入python环境

输入命令

成功执行后,将弹出如下窗口

NLTK库需要安装的子库

在这里可以浏览和安装NLTK库中所有的可用软件包,选中all,然后单击download即可一键安装,当然,也可以挑选自己需要的包,在All Packages里更是可以高度自定义,在这里我们挑选book包进行安装。当然很有可能因为网速原因会下载不下来,我们只需要将离线包(提取码:2gex)下载到本地,并且在C:\Users\Administrator\AppData\Roaming路径下创建一个nltk_data文件夹,将离线的文件解压后放入该目录即可使用。具体过程如下图所示:

nltk离线包

nltk库安装路径

这里需要注意的是我们的安装包的位置和名字一定是上面提到的,不可改变。这些做完了,我们就nltk安装基本完成了,最后在检查一遍nltk是否安装成功。通过在CMD终端输入python进入解释器后,输入以下命令:

from nltk.book import *

如果操作无误,将显示如下信息:

nltk库安装成功示意图

事已至此我们的nltk已经安装完成,可以直接使用。然后,接下来我们用python3.7的nltk库来实现Stemming和Lemmatization。

1、首先用python3.7实现Stemming,具体代码如下:

from nltk.stem.porter import PorterStemmer

from nltk.stem.lancaster import LancasterStemmer

from nltk.stem.snowball import SnowballStemmer

input_text=['writing','calves','be','brand','horse','randomize',

'possibly','provision','hospital','kept','scratchy','code']

porter =PorterStemmer()

lancaster = LancasterStemmer()

snowball= SnowballStemmer('english')

stemmer_names= ['PORTER','LANCASTER','SNOWBALL']

formatted_text = '{:>16}'*(len(stemmer_names)+1)

print('\n',formatted_text.format('INPUT WORD',*stemmer_names),'\n','='*68)

for word in input_text:

output = [word,porter.stem(word),lancaster.stem(word),snowball.stem(word)]

print(formatted_text.format(*output))

输出结果如下:

Stemming输出结果图

2、接下来我们实现Lemmatization,具体代码如下:

from nltk import word_tokenize, pos_tag

from nltk.corpus import wordnet

from nltk.stem import WordNetLemmatizer

def get_wordnet_pos(tag):

if tag.startswith('J'):

return wordnet.ADJ

elif tag.startswith('V'):

return wordnet.VERB

elif tag.startswith('N'):

return wordnet.NOUN

elif tag.startswith('R'):

return wordnet.ADV

else:

return None

sentence = 'football is a family of team sports that involve, to varying degrees, kicking a ball to score a goal.'

tokens = word_tokenize(sentence)

tagged_sent = pos_tag(tokens)

wnl = WordNetLemmatizer()

lemmas_sent = []

for tag in tagged_sent:

wordnet_pos = get_wordnet_pos(tag[1]) or wordnet.NOUN

lemmas_sent.append(wnl.lemmatize(tag[0], pos=wordnet_pos))

print(lemmas_sent)

实现结果如下:

Lemmatization实现结果如下

总结

我们在本文介绍了文本处理流程中的停用词的过滤、正则化操作,从停用词的概念入手到最后的python实现其停用词的过滤。紧接着我们有介绍了两种词汇的正则化操作,即词形还原和还原词汇,也是介绍了其概念以及相关的区别和联系。并且用python分别将其实现。在其中由于在实现正则化操作需要用到python中nltk库,因此,本文又给大家讲解了nltk库的安装以及可能遇到的问题。接下来我们将会介绍文本处理流程中的文本表示。希望我们一起学习,共同努力。

参考文献

[1] 词干提取(Stemming)和词形还原(Lemmatization)

[2] 人工智能:python 实现 第十章,NLP 第一天 入门介绍及使用Stemming还原词汇

[3] NLP入门(三)词形还原(Lemmatization)

[4] PYTHON3.6对中文文本分词、去停用词以及词频统计

[5] 【Python】NLTK库安装及常见问题指南

python怎么过滤停用词_第6天:文本处理流程——停用词的过滤、正则化操作相关推荐

  1. python红楼梦人物词频统计_用R进行文本分析初探——以《红楼梦》为例

    刚刚接触R语言和文本分析,为了将二者结合,试着对<红楼梦>进行分析,首先对<红楼梦>进行分词处理,并统计词频,同时画出标签云. 其实文本分析还可以分析其它很多东西,我的下一步打 ...

  2. 运维python要掌握到什么程度_《运》字意思读音、组词解释及笔画数 - 新华字典 - 911查询...

    基本词义 ◎ 运 運 yùn 〈动〉 (1) (会意.从辵( chuò),军声.本义:运行:运转:转动) (2) 同本义 [revolve] 運,移徙也.--<说文> 日.月运行.--&l ...

  3. k1658停运到什么时候_最近网传的春节快递停运时间表,是假的!

    "我有货,你有钱,其间没有快递员."最近,杭州市民梁先生的朋友圈里,突然火了一张图片.标记为2019年日历的这张图片上,1月25日和2月12日之间的日期都被白线框定,并打出了&qu ...

  4. python黑空间私密相册_手机私密相册,保护个人隐私不外泄!这样操作!

    原标题:手机私密相册,保护个人隐私不外泄!这样操作! 如何保护好个人私密照片和视频?数据安全是互联网时代一个永恒的话题,如何保护好自己的个人隐私至关重要.在日常生活工作中,我们经常会拍摄一些私密照片和 ...

  5. python停用词表_多版本中文停用词词表 + 多版本英文停用词词表 + python词表合并程序...

    文章简介与更新记录 如果你只想获取中文停用词此表,请直接到文章结尾下载项目文件,其中包括三个中文停用词词表,一个英文停用词词表和一个合并词表的.py文件2017/07/04 创建文章,上传文件 201 ...

  6. python协同过滤可以预测吗_基于用户的协同过滤推荐算法原理-附python代码实现...

    在推荐系统众多方法中,基于用户的协同过滤推荐算法是最早诞生的,原理也较为简单.该算法1992年提出并用于邮件过滤系统,两年后1994年被 GroupLens 用于新闻过滤.一直到2000年,该算法都是 ...

  7. python生成文章标题_利用简书首页文章标题数据生成词云

    原标题:利用简书首页文章标题数据生成词云 感谢关注天善智能,走好数据之路↑↑↑ 欢迎关注天善智能,我们是专注于商业智能BI,人工智能AI,大数据分析与挖掘领域的垂直社区,学习,问答.求职一站式搞定! ...

  8. python实现dfa过滤算法_Python实现DFA算法,完成实体词匹配和敏感词过滤等功能

    一.什么是DFA算法 DFA 全称为:Deterministic Finite Automaton,即确定有穷自动机.其特征为:有一个有限状态集合和一些从一个状态通向另一个状态的边,每条边上标记有一个 ...

  9. ansj 自定义 停用词_构造自定义停用词列表的快速提示

    ansj 自定义 停用词 by Kavita Ganesan 通过Kavita Ganesan 构造自定义停用词列表的快速提示 (Quick tips for constructing custom ...

  10. 浙大python判断两个字符串是否为变位词_算法2----------变位词

    1.背景: 变位词指的是一个单词可以通过改变其他单词中字母的顺序来得到,也叫做兄弟单词,如army->mary. 题1:判断两个字符串s1和s2是否为变位词. 经典的字符串变位词检测问题是比较不 ...

最新文章

  1. asp.net的cms 核心代码篇
  2. [云炬创业管理笔记]第五章打磨最有效的商业模式测试2
  3. mitmproxy 中间人代理工具,抓包工具,linux抓包工具 mitmproxy 使用
  4. Magento 获取当前货币和货币符How to get current currency in Magento
  5. JAVA实现求五个数阶乘之和 小实例
  6. firewalld 极速上手指南
  7. Python爬虫技巧!网站有反爬?我们有selenium!
  8. 配置web监控及报警
  9. php 函数内临时变量,在PHP中调用函数时使用临时变量
  10. 《系统集成项目管理》第一章 信息化知识
  11. 计算机无法访问inter,电脑网络提示无Internet访问权限解决办法
  12. 如何更改linux文件的拥有者及用户组 chown和chgrp
  13. 360插件化RePlugin踩坑
  14. ubuntu手动设置ip地址和网关
  15. 使用MV制作最简单的游戏:我要做游戏(4)
  16. 不给别人添麻烦是一种教养还是性格缺陷?
  17. 用c语言写一个求和的程序,C语言实现两数求和
  18. 2017 Material design 第三章第三节《图像》
  19. wsl2 设置端口映射
  20. Symbian模拟器“Cannot start ECMT Manager”错误提示解决方案

热门文章

  1. 推荐一款数据恢复软件(迅龙数据恢复)
  2. RedHatLinux新手入门教程(4)(转)
  3. MySQL 数据库崩溃(crash)的常见原因和解决办法---发表到 《数据和云》 公众号
  4. 笔记《Hbase 权威指南》
  5. Unity3D 游戏资源提取工具
  6. Proteus仿真:行列式键盘
  7. 五子课堂---第一课(连珠基础一)
  8. 第四课曲面与曲线方程
  9. 34个省域统计年鉴合集(32省更新至2020年)
  10. 一键下载大学慕课等课程视频