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中selenium实现文件上传所有方法整理总结
Apr 01 Python
Python队列的定义与使用方法示例
Jun 24 Python
使用Python &amp; Flask 实现RESTful Web API的实例
Sep 19 Python
Python实现1-9数组形成的结果为100的所有运算式的示例
Nov 03 Python
python list删除元素时要注意的坑点分享
Apr 18 Python
在pandas中遍历DataFrame行的实现方法
Oct 23 Python
利用python实现PSO算法优化二元函数
Nov 13 Python
django框架forms组件用法实例详解
Dec 10 Python
利用OpenCV和Python实现查找图片差异
Dec 19 Python
python构造IP报文实例
May 05 Python
Python 使用SFTP和FTP实现对服务器的文件下载功能
Dec 17 Python
python通过新建环境安装tfx的问题
May 20 Python
python 模拟在天空中放风筝的示例代码
如何使用Python对NetCDF数据做空间相关分析
python实现简单倒计时功能
python Polars库的使用简介
python基础之匿名函数详解
Apr 21 #Python
Python基础之字符串格式化详解
Apr 21 #Python
python 自动刷新网页的两种方法
You might like
一步一步学习PHP(7) php 字符串相关应用
2010/03/05 PHP
总结一些PHP中好用但又容易忽略的小知识
2017/06/02 PHP
PHP安全之register_globals的on和off的区别
2020/07/23 PHP
javascript中window.event事件用法详解
2012/12/11 Javascript
JS中批量给元素绑定事件过程中的相关问题使用闭包解决
2013/04/15 Javascript
关于JS中的闭包浅谈
2013/08/23 Javascript
jQuery根据ID获取input、checkbox、radio、select的示例
2014/08/11 Javascript
jquery实现炫酷的叠加层自动切换特效
2015/02/01 Javascript
使用JS中的exec()方法构造正则表达式验证
2016/08/01 Javascript
js实现微博发布小功能
2017/01/12 Javascript
浅谈angularjs $http提交数据探索
2017/01/20 Javascript
在vue项目中集成graphql(vue-ApolloClient)
2018/09/08 Javascript
webpack4打包vue前端多页面项目
2018/09/17 Javascript
详解如何快速配置webpack多入口脚手架
2018/12/28 Javascript
解决Layui中layer报错的问题
2019/09/03 Javascript
JavaScript获取当前url路径过程解析
2019/12/27 Javascript
VSCode写vue项目一键生成.vue模版,修改定义其他模板的方法
2020/04/17 Javascript
微信小程序收藏功能的实现代码
2020/06/19 Javascript
js实现html滑动图片拼图验证
2020/06/24 Javascript
javascript实现简单留言板案例
2021/02/09 Javascript
深入Python解释器理解Python中的字节码
2015/04/01 Python
Python实现Windows上气泡提醒效果的方法
2015/06/03 Python
用Python编写简单的微博爬虫
2016/03/04 Python
理解Python中的With语句
2016/03/18 Python
Python队列的定义与使用方法示例
2017/06/24 Python
Numpy array数据的增、删、改、查实例
2018/06/04 Python
Python绘制并保存指定大小图像的方法
2019/01/10 Python
Python定时任务APScheduler安装及使用解析
2020/08/07 Python
Kipling凯浦林美国官网:世界著名时尚休闲包袋品牌
2016/08/24 全球购物
轻化专业学生实习自我鉴定
2013/09/20 职场文书
安全检查管理制度
2014/02/02 职场文书
学校爱心捐款倡议书
2014/05/13 职场文书
质量保证书格式
2015/02/27 职场文书
2016大学迎新晚会开场白
2015/11/24 职场文书
SQL SERVER实现连接与合并查询
2022/02/24 SQL Server
python垃圾回收机制原理分析
2022/04/13 Python