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爬虫:通过关键字爬取百度图片
Feb 17 Python
Python实现好友全头像的拼接实例(推荐)
Jun 24 Python
python基础练习之几个简单的游戏
Nov 10 Python
python如何在循环引用中管理内存
Mar 20 Python
python numpy实现文件存取的示例代码
May 26 Python
python中while和for的区别总结
Jun 28 Python
详解pandas DataFrame的查询方法(loc,iloc,at,iat,ix的用法和区别)
Aug 02 Python
python lambda表达式(匿名函数)写法解析
Sep 16 Python
numpy ndarray 按条件筛选数组,关联筛选的例子
Nov 26 Python
python实现图像拼接
Mar 05 Python
浅析Python 责任链设计模式
Sep 11 Python
Python3+RIDE+RobotFramework自动化测试框架搭建过程详解
Sep 23 Python
python 模拟在天空中放风筝的示例代码
如何使用Python对NetCDF数据做空间相关分析
python实现简单倒计时功能
python Polars库的使用简介
python基础之匿名函数详解
Apr 21 #Python
Python基础之字符串格式化详解
Apr 21 #Python
python 自动刷新网页的两种方法
You might like
PHP Smarty模版简单使用方法
2016/03/30 PHP
验证坐标在某坐标区域内php代码
2016/10/08 PHP
PHP从二维数组得到N层分类树的实现代码
2016/10/11 PHP
PHP读取Excel内的图片(phpspreadsheet和PHPExcel扩展库)
2019/11/19 PHP
另类调用flash无须激活的方法
2006/12/27 Javascript
js限制textarea每行输入字符串长度的代码
2012/10/31 Javascript
cookie在javascript中的使用技巧以及隐私在服务器端的设置
2012/12/03 Javascript
jQuery滚动加载图片效果的实现
2013/03/06 Javascript
Javascript排序算法之合并排序(归并排序)的2个例子
2014/04/04 Javascript
借助JavaScript脚本判断浏览器Flash Player信息的方法
2014/07/09 Javascript
node.js中的Socket.IO使用实例
2014/11/04 Javascript
JavaScript中神奇的call()方法
2015/03/12 Javascript
AngularJS基础学习笔记之简单介绍
2015/05/10 Javascript
郁闷!ionic中获取ng-model绑定的值为undefined如何解决
2016/08/27 Javascript
vue 粒子特效的示例代码
2017/09/19 Javascript
vue2 mint-ui loadmore实现下拉刷新,上拉更多功能
2018/03/21 Javascript
vue中使用mxgraph的方法实例代码详解
2019/05/17 Javascript
vue使用showdown并实现代码区域高亮的示例代码
2019/10/17 Javascript
Python中optionParser模块的使用方法实例教程
2014/08/29 Python
基于Django框架利用Ajax实现点赞功能实例代码
2018/08/19 Python
关于pycharm中pip版本10.0无法使用的解决办法
2019/10/10 Python
使用pygame写一个古诗词填空通关游戏
2019/12/03 Python
Python TCPServer 多线程多客户端通信的实现
2019/12/31 Python
django admin管理工具自定义时间区间筛选器DateRangeFilter介绍
2020/05/19 Python
了解一下python内建模块collections
2020/09/07 Python
【HTML5】Canvas绘制简单图片教程
2016/05/13 HTML / CSS
请说出以下代码输出什么
2013/08/30 面试题
房地产出纳岗位职责
2013/12/01 职场文书
应届生求职信
2014/05/31 职场文书
英语教师求职信
2014/06/16 职场文书
雷人标语集锦
2014/06/19 职场文书
县委班子四风对照检查材料思想汇报
2014/09/29 职场文书
银行稽核岗位职责
2015/04/13 职场文书
普通员工辞职信范文
2015/05/12 职场文书
mysql 带多个条件的查询方式
2021/06/05 MySQL
浅析Python实现DFA算法
2021/06/26 Python