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实现ip查询示例
Mar 26 Python
Python求解平方根的方法
Mar 11 Python
python读取word文档的方法
May 09 Python
在Python中使用zlib模块进行数据压缩的教程
Jun 26 Python
python 上下文管理器使用方法小结
Oct 10 Python
python 信息同时输出到控制台与文件的实例讲解
May 11 Python
对Python 除法负数取商的取整方式详解
Dec 12 Python
TensorFlow卷积神经网络之使用训练好的模型识别猫狗图片
Mar 14 Python
Python minidom模块用法示例【DOM写入和解析XML】
Mar 25 Python
python实现H2O中的随机森林算法介绍及其项目实战
Aug 29 Python
django实现web接口 python3模拟Post请求方式
Nov 19 Python
利用python3筛选excel中特定的行(行值满足某个条件/行值属于某个集合)
Sep 04 Python
python 模拟在天空中放风筝的示例代码
如何使用Python对NetCDF数据做空间相关分析
python实现简单倒计时功能
python Polars库的使用简介
python基础之匿名函数详解
Apr 21 #Python
Python基础之字符串格式化详解
Apr 21 #Python
python 自动刷新网页的两种方法
You might like
解析PHP SPL标准库的用法(遍历目录,查找固定条件的文件)
2013/06/18 PHP
PHP使用strtotime获取上个月、下个月、本月的日期
2015/12/30 PHP
常用PHP数组排序函数归纳
2016/08/08 PHP
PHP反射API示例分享
2016/10/08 PHP
php判断是否为ajax请求的方法
2016/11/29 PHP
Yii框架实现的验证码、登录及退出功能示例
2017/05/20 PHP
PHP实现网站应用微信登录功能详解
2019/04/11 PHP
javascript nextSibling 与 getNextElement(node) 使用介绍
2011/10/13 Javascript
在线一元二次方程计算器实例(方程计算器在线计算)
2013/12/22 Javascript
jquery常用操作小结
2014/07/21 Javascript
javascript学习笔记(六)数据类型和JSON格式
2014/10/08 Javascript
JavaScript检测上传文件大小的方法
2015/07/22 Javascript
angular2使用简单介绍
2016/03/01 Javascript
JavaScript 判断一个对象{}是否为空对象的简单方法
2016/10/09 Javascript
轻松搞定js表单验证
2016/10/13 Javascript
基于JS快速实现导航下拉菜单动画效果附源码下载
2016/10/27 Javascript
react native仿微信PopupWindow效果的实例代码
2017/08/07 Javascript
微信小程序 input输入及动态设置按钮的实现
2017/10/27 Javascript
360提示[高危]使用存在漏洞的JQuery版本的解决方法
2017/10/27 jQuery
vue里面v-bind和Props 利用props绑定动态数据的方法
2018/08/27 Javascript
微信小程序云开发实现云数据库读写权限
2019/05/17 Javascript
解决vue+webpack项目接口跨域出现的问题
2020/08/10 Javascript
python字典序问题实例
2014/09/26 Python
python多线程操作实例
2014/11/21 Python
python提取字典key列表的方法
2015/07/11 Python
详解python并发获取snmp信息及性能测试
2017/03/27 Python
Caffe均值文件mean.binaryproto转mean.npy的方法
2018/07/09 Python
Python requests库用法实例详解
2018/08/14 Python
在Python中定义一个常量的方法
2018/11/10 Python
基于python tkinter的点名小程序功能的实例代码
2020/08/22 Python
基于python实现操作redis及消息队列
2020/08/27 Python
Python 制作查询商品历史价格的小工具
2020/10/20 Python
用Python自动清理电脑内重复文件,只要10行代码(自动脚本)
2021/01/09 Python
巾帼志愿者活动方案
2014/08/17 职场文书
建议书格式
2015/02/04 职场文书
Python尝试实现蒙特卡罗模拟期权定价
2022/04/21 Python