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处理python编码问题
Mar 13 Python
用Python将动态GIF图片倒放播放的方法
Nov 02 Python
Falsk 与 Django 过滤器的使用与区别详解
Jun 04 Python
pyqt5 获取显示器的分辨率的方法
Jun 18 Python
django echarts饼图数据动态加载的实例
Aug 12 Python
python遍历文件目录、批量处理同类文件
Aug 31 Python
Python3.7黑帽编程之病毒篇(基础篇)
Feb 04 Python
python中的socket实现ftp客户端和服务器收发文件及md5加密文件
Apr 01 Python
pycharm下pyqt4安装及环境配置的教程
Apr 24 Python
python3 简单实现组合设计模式
Jul 02 Python
详解Python3.8+PyQt5+pyqt5-tools+Pycharm配置详细教程
Nov 02 Python
利用Python多线程实现图片下载器
Mar 25 Python
python 模拟在天空中放风筝的示例代码
如何使用Python对NetCDF数据做空间相关分析
python实现简单倒计时功能
python Polars库的使用简介
python基础之匿名函数详解
Apr 21 #Python
Python基础之字符串格式化详解
Apr 21 #Python
python 自动刷新网页的两种方法
You might like
php array_flip() 删除数组重复元素
2009/01/14 PHP
php中用数组的方法设置cookies
2011/04/21 PHP
php curl优化下载微信头像的方法总结
2018/09/07 PHP
laravel 框架结合关联查询 when()用法分析
2019/11/22 PHP
js整数字符串转换为金额类型数据(示例代码)
2013/12/26 Javascript
JQuery中使用Ajax赋值给全局变量失败异常的解决方法
2014/08/18 Javascript
jQuery 中DOM 操作详解
2015/01/13 Javascript
ECMAScript6函数剩余参数(Rest Parameters)
2015/06/12 Javascript
解读Bootstrap v4 sass设计
2016/05/29 Javascript
bootstrap使用validate实现简单校验功能
2016/12/02 Javascript
NodeJS自定义模块写法(详解)
2017/06/27 NodeJs
解决Vue使用mint-ui loadmore实现上拉加载与下拉刷新出现一个页面使用多个上拉加载后冲突问题
2017/11/07 Javascript
详解webpack模块化管理和打包工具
2018/04/21 Javascript
Vue 应用中结合vux使用微信 jssdk的方法
2018/08/28 Javascript
vue单页应用在页面刷新时保留状态数据的方法
2018/09/21 Javascript
微信小程序实现收货地址左滑删除
2020/11/18 Javascript
express框架中使用jwt实现验证的方法
2019/08/25 Javascript
JS操作字符串转数字的常见方法示例
2019/10/29 Javascript
二种python发送邮件实例讲解(python发邮件附件可以使用email模块实现)
2013/12/03 Python
常见的在Python中实现单例模式的三种方法
2015/04/08 Python
Python 的类、继承和多态详解
2017/07/16 Python
Python3.遍历某文件夹提取特定文件名的实例
2018/04/26 Python
python统计字母、空格、数字等字符个数的实例
2018/06/29 Python
10行Python代码计算汽车数量的实现方法
2019/10/23 Python
python 获取当前目录下的文件目录和文件名实例代码详解
2020/03/10 Python
python小白切忌乱用表达式
2020/05/29 Python
Python中的Cookie模块如何使用
2020/06/04 Python
在pycharm中debug 实时查看数据操作(交互式)
2020/06/09 Python
Python字符串对齐、删除字符串不需要的内容以及格式化打印字符
2021/01/23 Python
英国折扣高尔夫商店:Discount Golf Store
2019/11/19 全球购物
医学专业个人求职自荐信格式
2013/09/23 职场文书
我爱读书演讲稿
2014/05/07 职场文书
承租经营合作者协议书
2014/10/01 职场文书
2016年公司新年寄语
2015/08/17 职场文书
《只有一个地球》教学反思
2016/02/16 职场文书
2016年安全月活动总结
2016/04/06 职场文书