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程序帮大家清理windows垃圾
Jan 15 Python
Python编程判断一个正整数是否为素数的方法
Apr 14 Python
Python3中简单的文件操作及两个简单小实例分享
Jun 18 Python
Python进阶学习之特殊方法实例详析
Dec 01 Python
python3 发送任意文件邮件的实例
Jan 23 Python
Tensorflow实现神经网络拟合线性回归
Jul 19 Python
python基于socket进行端口转发实现后门隐藏的示例
Jul 25 Python
python写一个随机点名软件的实例
Nov 28 Python
python3.6环境下安装freetype库和基本使用方法(推荐)
May 10 Python
Django中的模型类设计及展示示例详解
May 29 Python
python 简单的调用有道翻译
Nov 25 Python
Python可视化神器pyecharts之绘制箱形图
Jul 07 Python
python 模拟在天空中放风筝的示例代码
如何使用Python对NetCDF数据做空间相关分析
python实现简单倒计时功能
python Polars库的使用简介
python基础之匿名函数详解
Apr 21 #Python
Python基础之字符串格式化详解
Apr 21 #Python
python 自动刷新网页的两种方法
You might like
IIS环境下快速安装、配置和调试PHP5.2.0
2006/12/17 PHP
简单的过滤字符串中的HTML标记
2006/12/25 PHP
Linux操作系统安装LAMP环境
2015/06/26 PHP
PHP读取XML格式文件的方法总结
2017/02/27 PHP
PHP使用POP3读取邮箱接收邮件的示例代码
2020/07/08 PHP
Jquery中CSS选择器用法分析
2015/02/10 Javascript
浅谈js之字面量、对象字面量的访问、关键字in的用法
2016/11/20 Javascript
JS实现物体带缓冲的间歇运动效果示例
2016/12/22 Javascript
JS正则截取两个字符串之间及字符串前后内容的方法
2017/01/06 Javascript
vue2.0开发入门笔记之.vue文件的生成和使用
2017/09/19 Javascript
jquery+ajaxform+springboot控件实现数据更新功能
2018/01/22 jQuery
Vue中插入HTML代码的方法
2018/09/21 Javascript
使用 electron 实现类似新版 QQ 的登录界面效果(阴影、背景动画、窗体3D翻转)
2018/10/23 Javascript
Vue加载json文件的方法简单示例
2019/01/28 Javascript
elementUI Tree 树形控件的官方使用文档
2019/04/25 Javascript
javascript实现的时间格式加8小时功能示例
2019/06/13 Javascript
vue-element-admin 菜单标签失效的解决方式
2019/11/12 Javascript
Vue如何循环提取对象数组中的值
2020/11/18 Vue.js
[43:24]完美世界DOTA2联赛PWL S3 INK ICE vs DLG 第二场 12.12
2020/12/17 DOTA
有趣的python小程序分享
2017/12/05 Python
读取本地json文件,解析json(实例讲解)
2017/12/06 Python
浅谈numpy数组的几种排序方式
2017/12/15 Python
关于numpy数组轴的使用详解
2019/12/05 Python
使用python检查yaml配置文件是否符合要求
2020/04/09 Python
python_matplotlib改变横坐标和纵坐标上的刻度(ticks)方式
2020/05/16 Python
15个Pythonic的代码示例(值得收藏)
2020/10/29 Python
Larsson & Jennings官网:现代瑞士钟表匠
2018/03/20 全球购物
Jacques Lemans德国:奥地利钟表品牌
2019/12/26 全球购物
罗技美国官网:Logitech美国
2020/01/22 全球购物
德国家具折扣店:POCO
2020/02/28 全球购物
眼镜促销方案
2014/03/15 职场文书
公司总经理岗位职责范本
2014/08/15 职场文书
2014年安全管理工作总结
2014/12/01 职场文书
2015年党小组工作总结
2015/05/26 职场文书
三十年同学聚会致辞
2015/07/28 职场文书
《自己去吧》教学反思
2016/02/16 职场文书