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的ORM框架SQLAlchemy入门教程
Apr 28 Python
Python中字典和JSON互转操作实例
Jan 19 Python
Python中几种操作字符串的方法的介绍
Apr 09 Python
python中pygame针对游戏窗口的显示方法实例分析(附源码)
Nov 11 Python
Python连接DB2数据库
Aug 27 Python
pandas string转dataframe的方法
Apr 11 Python
python PyQt5/Pyside2 按钮右击菜单实例代码
Aug 17 Python
PyCharm导入python项目并配置虚拟环境的教程详解
Oct 13 Python
安装2019Pycharm最新版本的教程详解
Oct 22 Python
python redis 批量设置过期key过程解析
Nov 26 Python
tensorflow实现读取模型中保存的值 tf.train.NewCheckpointReader
Feb 10 Python
教你用Python+selenium搭建自动化测试环境
Jun 18 Python
python 模拟在天空中放风筝的示例代码
如何使用Python对NetCDF数据做空间相关分析
python实现简单倒计时功能
python Polars库的使用简介
python基础之匿名函数详解
Apr 21 #Python
Python基础之字符串格式化详解
Apr 21 #Python
python 自动刷新网页的两种方法
You might like
php 解决旧系统 查出所有数据分页的类
2012/08/27 PHP
php类常量的使用详解
2013/06/08 PHP
PHP实现HTTP断点续传的方法
2015/06/17 PHP
Yii框架创建cronjob定时任务的方法分析
2017/05/23 PHP
PHP的new static和new self的区别与使用
2019/11/27 PHP
可拖动窗口,附带鼠标控制渐变透明,开启关闭功能
2006/06/26 Javascript
ppk谈JavaScript style属性
2008/10/10 Javascript
使用jQuery.fn自定义jQuery翻页插件
2013/01/20 Javascript
jQuery实现列表自动循环滚动鼠标悬停时停止滚动
2013/09/06 Javascript
基于Jquery实现焦点图淡出淡入效果
2015/11/30 Javascript
Angular指令封装jQuery日期时间插件datetimepicker实现双向绑定示例
2017/01/22 Javascript
详解通过JSON数据使用VUE.JS
2017/05/26 Javascript
慕课网题目之js实现抽奖系统功能
2017/09/19 Javascript
微信小程序实现提交input信息到后台的方法示例
2019/01/19 Javascript
[46:20]TFT vs Secret Supermajor小组赛C组 BO3 第二场 6.3
2018/06/04 DOTA
[00:09]DOTA2全国高校联赛 精彩活动引爆全场
2018/05/30 DOTA
Python操作MySQL数据库9个实用实例
2015/12/11 Python
详解Python map函数及Python map()函数的用法
2017/11/16 Python
用TensorFlow实现多类支持向量机的示例代码
2018/04/28 Python
python简单实现矩阵的乘,加,转置和逆运算示例
2019/07/10 Python
Django --Xadmin 判断登录者身份实例
2020/07/03 Python
python redis存入字典序列化存储教程
2020/07/16 Python
Python变量格式化输出实现原理解析
2020/08/06 Python
详解如何在pyqt中通过OpenCV实现对窗口的透视变换
2020/09/20 Python
Python爬虫教程知识点总结
2020/10/19 Python
html5指南-1.html5全局属性(html5 global attributes)深入理解
2013/01/07 HTML / CSS
介绍一下XMLHttpRequest对象
2012/02/12 面试题
语文教育专业推荐信范文
2013/11/25 职场文书
银行领导证婚词
2014/01/11 职场文书
会计演讲稿范文
2014/05/23 职场文书
学习十八届四中全会依法治国心得体会
2014/11/03 职场文书
2015年化工厂工作总结
2015/05/04 职场文书
六一亲子活动感想
2015/08/07 职场文书
2016年法制宣传月活动总结
2016/04/01 职场文书
python 中的@运算符使用
2021/05/26 Python
分享Python获取本机IP地址的几种方法
2022/03/17 Python