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多线程编程简单介绍
Apr 13 Python
Python实现Sqlite将字段当做索引进行查询的方法
Jul 21 Python
Python实现SMTP发送邮件详细教程
Mar 02 Python
使用Numpy读取CSV文件,并进行行列删除的操作方法
Jul 04 Python
Python Web编程之WSGI协议简介
Jul 18 Python
python reverse反转部分数组的实例
Dec 13 Python
python3 selenium自动化 frame表单嵌套的切换方法
Aug 23 Python
python 两个数据库postgresql对比
Oct 21 Python
keras的load_model实现加载含有参数的自定义模型
Jun 22 Python
OpenCV4.1.0+VS2017环境配置的方法步骤
Jul 09 Python
python3+PyQt5+Qt Designer实现界面可视化
Jun 10 Python
深入理解python协程
Jun 15 Python
python 模拟在天空中放风筝的示例代码
如何使用Python对NetCDF数据做空间相关分析
python实现简单倒计时功能
python Polars库的使用简介
python基础之匿名函数详解
Apr 21 #Python
Python基础之字符串格式化详解
Apr 21 #Python
python 自动刷新网页的两种方法
You might like
phpMyAdmin下载、安装和使用入门教程
2007/05/31 PHP
php面向对象全攻略 (一) 面向对象基础知识
2009/09/30 PHP
php数据库连接时容易出错的特殊符号问题
2010/09/01 PHP
php数组函数序列之krsort()- 对数组的元素键名进行降序排序,保持索引关系
2011/11/02 PHP
php CI框架插入一条或多条sql记录示例
2014/07/29 PHP
php实现递归的三种基本方式
2020/07/04 PHP
详解PHP序列化反序列化的方法
2015/10/27 PHP
PHP实现执行外部程序的方法详解
2017/08/17 PHP
实例分析PHP中PHPMailer发邮件
2017/12/13 PHP
jQuery实现表单input中提示文字value随鼠标焦点移进移出而显示或隐藏的代码
2010/03/21 Javascript
jQuery弹性滑动导航菜单实现思路及代码
2013/05/02 Javascript
jQuery实现仿QQ空间装扮预览图片的鼠标提示效果代码
2015/10/30 Javascript
理解JavaScript表单的基础知识
2016/01/25 Javascript
javascript实现一个简单的弹出窗
2016/02/22 Javascript
利用CSS、JavaScript及Ajax实现图片预加载的方法
2016/11/29 Javascript
js实现楼层导航功能
2017/02/23 Javascript
利用angularjs1.4制作的简易滑动门效果
2017/02/28 Javascript
jquery仿京东商品放大浏览页面
2017/06/06 jQuery
微信小程序中吸底按钮适配iPhone X方案
2017/11/29 Javascript
vuex如何重置所有state(可定制)
2019/01/17 Javascript
vue父子组件的通信方法(实例详解)
2019/11/10 Javascript
从零学python系列之数据处理编程实例(一)
2014/05/22 Python
python学习数据结构实例代码
2015/05/11 Python
pytorch索引查找 index_select的例子
2019/08/18 Python
Django 实现Admin自动填充当前用户的示例代码
2019/11/18 Python
使用 Python 合并多个格式一致的 Excel 文件(推荐)
2019/12/09 Python
基于plt.title无法显示中文的快速解决
2020/05/16 Python
python和go语言的区别是什么
2020/07/20 Python
python 实现ping测试延迟的两种方法
2020/12/10 Python
汽车运用工程系毕业生自荐信
2013/12/27 职场文书
学习十八大报告感言
2014/02/04 职场文书
宿舍保安职务说明书
2014/02/25 职场文书
安全生产感想
2015/08/07 职场文书
Python卷积神经网络图片分类框架详解分析
2021/11/07 Python
CentOS7环境下MySQL8常用命令小结
2022/06/10 Servers
css清除浮动clearfix:after的用法详解(附完整代码)
2023/05/21 HTML / CSS