首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >文本分词和去停止词的一次优化

文本分词和去停止词的一次优化

作者头像
故事尾音
发布于 2019-12-18 08:49:26
发布于 2019-12-18 08:49:26
80800
代码可运行
举报
运行总次数:0
代码可运行

之前在处理QA语料库的时候,在分词和去停止词的时候消耗时间很长,所以专门搜了一些资料针对这个问题进行了一次优化,总结如下。

文本分词

使用jieba自带的并行分词

在分词前添加jieba.enable_parallel(4)就行了。但是我这里并没有这么做,主要是怕分词顺序出错了。

使用jieba_fast

这是一个cpython的库,使用方法和jieba一致,Github官网。官网的描述如下:

使用cpython重写了jieba分词库中计算DAG和HMM中的vitrebi函数,速度得到大幅提升。

去停止词

构建字典加速

我最开始使用的是把停止词读成列表,然后去列表里面查找,速度很慢。原先的代码如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
def get_stopwords(self,stopwords_path):
    stop_f = open(stopwords_path, "r", encoding='utf-8')
    stop_words = list()
    for line in stop_f.readlines():
        line = line.strip()
        if not len(line):
            continue
        stop_words.append(line)
    stop_f.close()
    # print('哈工大停止词表长度为:' + str(len(stop_words)))
    return stop_words

改进之后,构建了停止词字典,速度提高了一倍左右。代码如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
def get_stopwords(self,stopwords_path):
    stop_f = open(stopwords_path, "r", encoding='utf-8')
    stop_words = {}
    for line in stop_f.readlines():
        line = line.strip()
        if not len(line):
            continue
        stop_words[line] = line
    stop_f.close()
    # print('哈工大停止词表长度为:' + str(len(stop_words)))
    return stop_words

总结

经过以上改进,代码加速了4倍左右,提升还是很明显的。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2019-01-05,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
Go版本大于1.13,程序里这样做错误处理才地道
之前写过几篇关于 Go 错误处理的文章,发现文章里不少知识点都有点落伍了,比如Go在1.13后对错误处理增加了一些支持,最大的变化就是支持了错误包装(Error Wrapping),以前想要在调用链路的函数里包装错误都是用"github.com/pkg/errors"这个库。
KevinYan
2023/01/03
4440
golang错误处理笔记
Go语言中,错误被认为是一种可以预期的结果;而异常则是一种非预期的结果,发生异常可能表示程序中存在 BUG 或发生了其它不可控的问题。
lelezc
2022/12/01
6000
Golang 语言怎么处理错误?
golang 程序大多数是通过 if err != nil 处理错误,在 golang 社区中,有一部分 golang 程序员对此举是持反对观点,他们认为在 golang 代码中存在大量的错误处理代码 if err != nil,使整体代码变得非常不优雅,应该在 golang 中引入其他处理错误的机制,例如 try-catche 或其它此类处理错误的机制。其实,他们忽略了 golang 中一个特别重要的概念,即 errors are values,并且 golang 作者 Rob Pike 也对此问题做出过回应,在 golang 代码中出现重复的错误处理代码 if err != nil,可能是 golang 用户的使用方式有问题。
frank.
2021/03/09
1.4K0
Go errors
Go 语言自身的 errors:https://golang.google.cn/pkg/errors/ 包实现非常简单,使用起来非常灵活,但是又有很多不足。我们在分析 Go 语言 errors 包的同时,也介绍下一个开源的 errors 包:https://pkg.go.dev/github.com/pkg/errors。
一行舟
2022/08/25
5380
Go errors
Go语言(golang)新发布的1.13中的Error Wrapping深度分析
Go 1.13发布的功能还有一个值得深入研究的,就是对Error的增强,也是今天我们要分析的 Error Wrapping.
sunsky
2020/08/20
2.2K0
Go 函数多返回值错误处理与error 类型介绍
error 接口只有一个方法,即 Error() 方法,该方法返回一个描述错误的字符串。这意味着任何实现了 Error() 方法的类型都可以被用作错误类型。通常,Go程序中的函数在遇到错误时会返回一个 error 类型的值,以便调用方可以处理或记录错误信息。
贾维斯Echo
2023/10/23
7440
Go进阶笔记关于Error
其实很多时候是使用的姿势不对,或者说,对于error的用法没有完全理解,这里整理一下关于Go中的error 。
后场技术
2020/12/29
5200
Go 进阶训练营 – 错误处理二:错误定义与处理
哨兵错误,就是定义一些包级别的错误变量,然后在调用的时候外部包可以直接对比变量进行判定,在标准库当中大量的使用了这种方式。例如下方 io 库中定义的错误。
Yuyy
2022/09/13
7470
Go 进阶训练营 – 错误处理二:错误定义与处理
go中如何处理error
go 中的异常处理和其他语言大不相同,像 Java、C++、python 等语言都是通过抛出 Exception 来处理异常,而 go 是通过返回 error 来判定异常,并进行处理。
编程黑洞
2023/03/06
7390
Go语言中的错误处理机制
在Go语言中,错误处理主要通过内置的error接口实现。error接口是一个内置接口,定义如下:
二一年冬末
2024/06/20
1700
Go Error 嵌套到底是怎么实现的?
这句话应该怎么理解呢?翻译起来挺难的。不过从源码的角度来看,好像更容易理解其背后的含义。
AlwaysBeta
2022/01/14
3410
Go中这么多创建error的方式,你真的了解它们各自的应用场景吗
由此可知,该接口只有一个返回字符串的Error函数,所有的类型只要实现了该函数,就创建了一个错误类型。
Go学堂
2023/01/31
7770
Go错误集锦 | 处理error时有哪些常见的陷阱
大家好,我是渔夫子。今天跟大家聊聊在Go中处理error时有哪些常见的陷阱以及如何避免。
Go学堂
2023/01/31
5230
从零开始写一个web服务到底有多难?(三)——异常处理
Go error是一个普通的接口,通过该接口得到一个普通的值。(当然也不太普通一点是error的首字母是小写的,但是我们仍然可以在外部使用它。)
4cos90
2023/12/30
3000
Golang error 的突围
姗姗来迟的 Go 1.13 修改了 errors 包,增加了几个函数,用于增强 error 的功能,这篇文章介绍 error 相关的用法。
梦醒人间
2019/09/18
1K0
Golang error 的突围
Go错误处理正确姿势
func Go(f func()){go func(){ // defer recover 捕获panic defer func(){ if err := recover(); err != nil { log.Printf("panic: %+v", err) } }() f()}()}
冬夜先生
2021/09/03
7520
Go编程模式 - 4.错误处理
捎带提一句:个人不太喜欢上面scanner的错误处理方式,这个要求使用方对这个包很熟悉,否则很容易忘掉后面的错误处理逻辑。但后面处理错误的逻辑,就很直接地将错误返回,可读性很强。
junedayday
2021/08/05
4310
掌握Go语言:Go语言精细错误,清晰、高效的错误处理实践(32)
错误处理是任何编程语言中都至关重要的一部分,Go 语言提供了一套简单而强大的错误处理机制,使得处理错误变得高效而清晰。
用户6256742
2024/08/18
2280
Go Errors 错误处理
error 是一个带有 Error 方法的接口类型,这意味着你可以自己去实现这个接口:
凌虚
2020/07/19
1.3K0
Go:温故错误处理
早期Go将错误视为值的处理方式为我们服务良好。尽管标准库对错误的支持很少——只有errors.New和fmt.Errorf函数,这些函数产生的错误只包含一个消息——内置的错误接口允许Go程序员添加他们想要的任何信息。它只需要一个实现了Error方法的类型:
运维开发王义杰
2024/04/25
1810
Go:温故错误处理
推荐阅读
相关推荐
Go版本大于1.13,程序里这样做错误处理才地道
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验