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的id()函数解密过程
Dec 25 Python
跟老齐学Python之不要红头文件(1)
Sep 28 Python
python实现将汉字转换成汉语拼音的库
May 05 Python
使用Python编写一个最基础的代码解释器的要点解析
Jul 12 Python
Numpy中stack(),hstack(),vstack()函数用法介绍及实例
Jan 09 Python
python自动化生成IOS的图标
Nov 13 Python
python 实现将txt文件多行合并为一行并将中间的空格去掉方法
Dec 20 Python
python实现图片插入文字
Nov 26 Python
python实现批量处理将图片粘贴到另一张图片上并保存
Dec 12 Python
python实现学生信息管理系统(精简版)
Nov 27 Python
使用pd.merge表连接出现多余行的问题解决
Jun 16 Python
virtualenv隔离Python环境的问题解析
Jun 21 Python
python 模拟在天空中放风筝的示例代码
如何使用Python对NetCDF数据做空间相关分析
python实现简单倒计时功能
python Polars库的使用简介
python基础之匿名函数详解
Apr 21 #Python
Python基础之字符串格式化详解
Apr 21 #Python
python 自动刷新网页的两种方法
You might like
PHP中如何定义和使用常量
2013/02/28 PHP
discuz目录文件资料汇总
2014/12/30 PHP
PHP实现的AES 128位加密算法示例
2019/09/16 PHP
Nigma vs Alliance BO5 第五场2.14
2021/03/10 DOTA
在js中判断checkboxlist(.net控件客户端id)是否有选中
2013/04/11 Javascript
jquery.form.js实现将form提交转为ajax方式提交的方法
2015/04/07 Javascript
基于JS实现的倒计时程序实例
2015/07/24 Javascript
jQuery实现的简单分页示例
2016/06/01 Javascript
微信小程序 SocketIO 实例讲解
2016/10/13 Javascript
vue2.0实现导航菜单切换效果
2017/05/08 Javascript
JS库之Waypoints的用法详解
2017/09/13 Javascript
Node Puppeteer图像识别实现百度指数爬虫的示例
2018/02/22 Javascript
mpvue写一个CPASS小程序的示例
2018/09/04 Javascript
webpack 开发和生产并行设置的方法
2018/11/08 Javascript
vue使用Font Awesome的方法步骤
2019/02/26 Javascript
vue请求服务器数据后绑定不上的解决方法
2019/10/30 Javascript
基于JS实现操作成功之后自动跳转页面
2020/09/25 Javascript
[04:03]2014DOTA2西雅图国际邀请赛 LGD战队巡礼
2014/07/07 DOTA
Python yield 小结和实例
2014/04/25 Python
Python编程判断一个正整数是否为素数的方法
2017/04/14 Python
Flask使用Pyecharts在单个页面展示多个图表的方法
2019/08/05 Python
python输出决策树图形的例子
2019/08/09 Python
Python面向对象封装操作案例详解 II
2020/01/02 Python
Django实现后台上传并显示图片功能
2020/05/29 Python
Python如何给函数库增加日志功能
2020/08/04 Python
HTML5实现文件断点续传的方法
2017/01/04 HTML / CSS
巴西Mr. Cat在线商店:购买包包和鞋子
2019/09/08 全球购物
Java里面如何创建一个内部类的实例
2015/01/19 面试题
Linux中如何用命令创建目录
2016/12/02 面试题
最受欢迎的自我评价
2013/12/22 职场文书
局机关干部群众路线个人对照检查材料思想汇报
2014/10/05 职场文书
学校总务处领导干部个人对照检查材料思想汇报
2014/10/06 职场文书
2014年社区矫正工作总结
2014/11/18 职场文书
2016党员党章学习心得体会
2016/01/14 职场文书
Python3 多线程(连接池)操作MySQL插入数据
2021/06/09 Python
GoFrame框架数据校验之校验结果Error接口对象
2022/06/21 Golang