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 元类使用说明
Dec 18 Python
python实现斐波那契数列的方法示例
Jan 12 Python
python日志记录模块实例及改进
Feb 12 Python
python实现unicode转中文及转换默认编码的方法
Apr 29 Python
python虚拟环境virtualenv的安装与使用
Sep 21 Python
TensorFlow模型保存/载入的两种方法
Mar 08 Python
pandas实现选取特定索引的行
Apr 20 Python
三步实现Django Paginator分页的方法
Jun 11 Python
django列表筛选功能的实现代码
Mar 27 Python
Django实现列表页商品数据返回教程
Apr 03 Python
python交互模式基础知识点学习
Jun 18 Python
深入解析NumPy中的Broadcasting广播机制
May 30 Python
python 模拟在天空中放风筝的示例代码
如何使用Python对NetCDF数据做空间相关分析
python实现简单倒计时功能
python Polars库的使用简介
python基础之匿名函数详解
Apr 21 #Python
Python基础之字符串格式化详解
Apr 21 #Python
python 自动刷新网页的两种方法
You might like
PHP数组 为文章加关键字连接 文章内容自动加链接
2011/12/29 PHP
PHP与MongoDB简介|安全|M+PHP应用实例详解
2013/06/17 PHP
php中mysql操作buffer用法详解
2015/03/19 PHP
PHP加密技术的简单实现
2016/09/04 PHP
php简单截取字符串代码示例
2016/10/19 PHP
在云虚拟主机部署thinkphp5项目的步骤详解
2017/12/21 PHP
javascript 写类方式之九
2009/07/05 Javascript
关于JavaScript中的关联数组分析
2013/04/09 Javascript
jquery的选择器的使用技巧之如何选择input框
2013/09/22 Javascript
node.js中的http.createClient方法使用说明
2014/12/15 Javascript
JS生成一维码(条形码)功能示例
2017/01/19 Javascript
JS常用倒计时代码实例总结
2017/02/07 Javascript
Vue自定义事件(详解)
2017/08/19 Javascript
Javascript中的this,bind和that使用实例
2019/12/05 Javascript
jQuery实现html可联动的百分比进度条
2020/03/26 jQuery
[51:36]EG vs VP 2018国际邀请赛淘汰赛BO3 第一场 8.24
2018/08/25 DOTA
Python contextlib模块使用示例
2015/02/18 Python
利用Django框架中select_related和prefetch_related函数对数据库查询优化
2015/04/01 Python
Python Matplotlib库入门指南
2015/05/18 Python
python基础知识小结之集合
2015/11/25 Python
利用Python实现Windows定时关机功能
2017/03/21 Python
django传值给模板, 再用JS接收并进行操作的实例
2018/05/28 Python
python抖音表白程序源代码
2019/04/07 Python
在Python函数中输入任意数量参数的实例
2019/07/16 Python
pycharm如何使用anaconda中的各种包(操作步骤)
2020/07/31 Python
微信html5页面调用第三方位置导航的示例
2018/03/14 HTML / CSS
英国最大的电子产品和家电零售企业:Currys PC World
2016/09/24 全球购物
英国在线定做百叶窗网站:Make My Blinds
2020/08/17 全球购物
2014年党支部承诺书
2014/05/30 职场文书
党员干部反四风对照检查材料思想汇报
2014/09/14 职场文书
个人欠款协议书范本2014
2014/11/02 职场文书
中秋客户感谢信
2015/01/22 职场文书
永远是春天观后感
2015/06/12 职场文书
2016年元旦致辞
2015/08/01 职场文书
诚信高考倡议书
2019/06/24 职场文书
使用tensorflow 实现反向传播求导
2021/05/26 Python