python基础之停用词过滤详解


Posted in Python onApril 21, 2021

一、什么是停用词

在汉语中,有一类没有多少意义的词语,比如组词“的”,连词“以及”、副词“甚至”,语气词“吧”,被称为停用词。一个句子去掉这些停用词,并不影响理解。所以,进行自然语言处理时,我们一般将停用词过滤掉。

而HanLP库提供了一个小巧的停用词字典,它位于Lib\site-packages\pyhanlp\static\data\dictionary目录中,名字为:stopwords.txt。该文本收录了常见的中英文无意义的词汇,每行一个词语。示例如下:

python基础之停用词过滤详解

我们在进行自然语言处理时,可以用BinTrie、DoubleArrayTrie和AhoCorasickDoubleArrayTrie中的任意一个来存储词典。考虑到该词典中都是短语且比较多,用双数组字典树更划算,处理时间更快。

二、加载停用词字典

通过前文的介绍,我们知道了使用双数组字典树加载停用词字典更划算。下面,我们来加载其停用词,并返回键值对结构。代码如下:

def load_dictionary(path):
    map=JClass('java.util.TreeMap')()
    with open(path,encoding='utf-8') as src:
        for word in src:
            word=word.strip()
            map[word]=word
    return JClass('com.hankcs.hanlp.collection.trie.DoubleArrayTrie')(map)

三、删除停用词

通过上面的停用词加载,我们获取了DoubleArrayTrie树结构的词汇。如果要删除停用词,可以直接使用分词后的结果剔除停用词即可。剔除的方法如下:

def remove_stopwords(termlist,trie):
    return [term.word for term in termlist if not trie.containsKey(term.word)]

四、分词以及删除停用词

在前面的博文中,我们已经学会了如何分词,现在我们又学会了如何剔除停用词。这里,我们将两者结合起来,实现分词效果。代码如下:

if __name__ == "__main__":
    HanLP.Config.ShowTermNature=False
    trie=load_dictionary(HanLP.Config.CoreStopWordDictionaryPath)
    text="今天就这样吧!明天我们在说可以吗?"
    segment=DoubleArrayTrieSegment()
    termlist=segment.seg(text)
    print("分词结果",termlist)
    print("去掉停用词",remove_stopwords(termlist,trie))

运行之后,得到如下结果:

python基础之停用词过滤详解

五、直接删除停用词(不分词)

对应上面的结果,我们先分词在删除停用词。但是,有时候我们也喜欢先删除停用词在进行分词。下面,我们来实现直接删除停用词。

代码如下:

#直接过滤方法
def direct_remove_stopwords(text,replacement,trie):
    JString=JClass('java.lang.String')
    searcher=trie.getLongestSearcher(JString(text),0)
    offset=0
    result=''
    while searcher.next():
        begin=searcher.begin
        end=begin+searcher.length
        if begin>offset:
            result+=text[offset:begin]
            result+=replacement
            offset=end
    if offset<len(text):
        result+=text[offset:]
    return result


if __name__ == "__main__":
    HanLP.Config.ShowTermNature = False
    trie = load_dictionary(HanLP.Config.CoreStopWordDictionaryPath)
    text = "今天就这样吧!明天我们在说可以吗?"
    segment = DoubleArrayTrieSegment()
    termlist = segment.seg(text)
    print("分词结果", termlist)
    print("去掉停用词", remove_stopwords(termlist, trie))
    print("不分词去掉停用词", direct_remove_stopwords(text, "**", trie))

运行之后,效果如下:

python基础之停用词过滤详解

到此这篇关于python基础之停用词过滤详解的文章就介绍到这了,更多相关python停用词过滤内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Python 相关文章推荐
利用Python的Twisted框架实现webshell密码扫描器的教程
Apr 16 Python
Python构造自定义方法来美化字典结构输出的示例
Jun 16 Python
听歌识曲--用python实现一个音乐检索器的功能
Nov 15 Python
python中lambda()的用法
Nov 16 Python
对python数据切割归并算法的实例讲解
Dec 12 Python
解决pycharm 远程调试 上传 helpers 卡住的问题
Jun 27 Python
解决pycharm编辑区显示yaml文件层级结构遇中文乱码问题
Apr 27 Python
如何使用PyCharm将代码上传到GitHub上(图文详解)
Apr 27 Python
Pyecharts地图显示不完成问题解决方案
May 11 Python
基于PyTorch的permute和reshape/view的区别介绍
Jun 18 Python
python3判断IP地址的方法
Mar 04 Python
python小程序之飘落的银杏
Apr 17 Python
python 模拟在天空中放风筝的示例代码
如何使用Python对NetCDF数据做空间相关分析
python实现简单倒计时功能
python Polars库的使用简介
python基础之匿名函数详解
Apr 21 #Python
Python基础之字符串格式化详解
Apr 21 #Python
python 自动刷新网页的两种方法
You might like
php 之 没有mysql支持时的替代方案
2006/10/09 PHP
PHP 如何利用phpexcel导入数据库
2013/08/24 PHP
PHP消息队列实现及应用详解【队列处理订单系统和配送系统】
2019/05/20 PHP
一款js和css代码压缩工具[附JAVA环境配置方法]
2010/04/16 Javascript
div模拟选择框示例代码
2013/11/03 Javascript
css配合jquery美化 select
2013/11/29 Javascript
js实现div拖动动画运行轨迹效果代码分享
2015/08/27 Javascript
五种js判断是否为整数类型方式
2015/12/03 Javascript
关于cookie的初识和运用(js和jq)
2016/04/07 Javascript
输入法的回车与消息发送快捷键回车的冲突解决方法
2016/08/09 Javascript
JS继承之借用构造函数继承和组合继承
2016/09/07 Javascript
jQuery在ie6下无法设置select选中的解决方法详解
2016/09/20 Javascript
jQuery File Upload文件上传插件使用详解
2016/12/06 Javascript
详解handlebars+require基本使用方法
2016/12/21 Javascript
详解NodeJS框架express的路径映射(路由)功能及控制
2017/03/24 NodeJs
在Vue组件上动态添加和删除属性方法
2018/02/23 Javascript
JavaScript设计模式之原型模式分析【ES5与ES6】
2018/07/26 Javascript
layui动态渲染生成select的option值方法
2019/09/23 Javascript
IntelliJ IDEA编辑器配置vue高亮显示
2019/09/26 Javascript
Vue 解决多级动态面包屑导航的问题
2019/11/04 Javascript
微信小程序文章详情功能完整实例
2020/06/03 Javascript
[06:45]DOTA2-DPC中国联赛 正赛 Magma vs LBZS 选手采访
2021/03/11 DOTA
用Python中的字典来处理索引统计的方法
2015/05/05 Python
Python3.4 splinter(模拟填写表单)使用方法
2018/10/13 Python
解决Python安装时报缺少DLL问题【两种解决方法】
2019/07/15 Python
Pycharm操作Git及GitHub的步骤详解
2020/10/27 Python
豆腐の盛田屋官网:日本自然派的豆乳面膜、肥皂、化妆水、乳液等
2016/10/08 全球购物
英国现代家具和装饰网站:PN Home
2018/08/16 全球购物
汽车专业毕业生推荐信
2013/11/12 职场文书
汽车运用工程专业毕业生推荐信
2013/12/25 职场文书
2014年秋季新学期寄语
2014/08/02 职场文书
基层党员对照检查材料
2014/08/25 职场文书
2014党的群众路线教育实践活动总结报告
2014/10/31 职场文书
自书遗嘱范文
2015/08/07 职场文书
原生JS中应该禁止出现的写法
2021/05/05 Javascript
Redis模仿手机验证码发送的实现示例
2021/11/02 Redis