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迭代器的使用方法实例
Nov 21 Python
Python编程实现的图片识别功能示例
Aug 03 Python
详解Python中where()函数的用法
Mar 27 Python
可能是最全面的 Python 字符串拼接总结【收藏】
Jul 09 Python
解决python3运行selenium下HTMLTestRunner报错的问题
Dec 27 Python
梅尔倒谱系数(MFCC)实现
Jun 19 Python
python 绘制拟合曲线并加指定点标识的实现
Jul 10 Python
python opencv 实现对图像边缘扩充
Jan 19 Python
在django中使用post方法时,需要增加csrftoken的例子
Mar 13 Python
Pytorch高阶OP操作where,gather原理
Apr 30 Python
Python如何转换字符串大小写
Jun 04 Python
python BeautifulSoup库的安装与使用
Dec 17 Python
python 模拟在天空中放风筝的示例代码
如何使用Python对NetCDF数据做空间相关分析
python实现简单倒计时功能
python Polars库的使用简介
python基础之匿名函数详解
Apr 21 #Python
Python基础之字符串格式化详解
Apr 21 #Python
python 自动刷新网页的两种方法
You might like
先进的自动咖啡技术,真的可以取代咖啡师吗?
2021/03/06 冲泡冲煮
目录,文件操作详谈―PHP
2006/11/25 PHP
解析php中curl_multi的应用
2013/07/17 PHP
linux使用crontab实现PHP执行计划定时任务
2014/05/10 PHP
PHP水印类,支持添加图片、文字、填充颜色区域的实现
2017/02/04 PHP
php安全配置记录和常见错误梳理(总结)
2017/03/28 PHP
thinkPHP3.2.3实现阿里大于短信验证的方法
2018/06/06 PHP
thinkphp框架实现路由重定义简化url访问地址的方法分析
2020/04/04 PHP
Domino中运用jQuery读取视图内容的方法
2009/10/21 Javascript
Firebug 字幕文件JSON地址获取代码
2009/10/28 Javascript
基于Jquery的跨域传输数据(JSONP)
2011/03/10 Javascript
js脚本实现数据去重
2014/11/27 Javascript
jQuery+slidereveal实现的面板滑动侧边展出效果
2015/03/14 Javascript
js判断日期时间有效性的方法
2015/10/24 Javascript
jQuery实现图像旋转动画效果
2016/05/29 Javascript
js 定位到某个锚点的方法
2016/11/19 Javascript
简单的三步vuex入门
2018/05/20 Javascript
jQuery实现常见的隐藏与展示列表效果示例
2018/06/04 jQuery
Vue实现回到顶部和底部动画效果
2019/07/31 Javascript
[06:43]2018DOTA2国际邀请赛寻真——VGJ.Thunder
2018/08/11 DOTA
python通过装饰器检查函数参数数据类型的方法
2015/03/13 Python
对python字典元素的添加与修改方法详解
2018/07/06 Python
python读取tif图片时保留其16bit的编码格式实例
2020/01/13 Python
解决pycharm中opencv-python导入cv2后无法自动补全的问题(不用作任何文件上的修改)
2020/03/05 Python
python使用re模块爬取豆瓣Top250电影
2020/10/20 Python
PyQt5通过信号实现MVC的示例
2021/02/06 Python
不用游标的SQL语句有哪些
2012/09/07 面试题
如何将无状态会话Bean发布为WEB服务,只有无状态会话Bean可以发布为WEB服务?
2015/12/03 面试题
幼儿教育感言
2014/02/05 职场文书
网络编辑职责
2014/03/01 职场文书
小学生期末评语大全
2014/04/21 职场文书
法人委托书范本
2014/09/15 职场文书
婚礼庆典答谢词
2015/01/20 职场文书
大学生求职简历自我评价
2015/03/02 职场文书
2015年大学社团工作总结
2015/04/09 职场文书
Nginx 反向代理解决跨域问题多种情况分析
2022/01/18 Servers