前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >如何批量导入搜狗词库?

如何批量导入搜狗词库?

作者头像
用户7652506
发布2020-10-23 16:29:32
2.8K0
发布2020-10-23 16:29:32
举报

在前面

最近@黄小绵羊同学给大猫留言,说你当时那篇《如何在分词中导入搜狗字典》怎么太监了呢?第一期只讲了如何导入单个词典,并且承诺在下一期会给出批量导入的方法,但第二期至今遥遥无期。嗯,所以这次大猫决定要填坑了!

上一期大猫讲到了如何使用@qinwf写的cidian包(大家可以在github上找到)将搜狗词典导入分词词库,使用到的核心函数是:

decode_scel

至于批量导入呢,其实方法非常简单。核心就是使用list.files函数获取工作目录下面的所有词库文件名,然后使用lapply函数全部导入。最后把导入的文件汇总并去除重复的观测后输出,就大功告成啦。

一步一步来。

骤分解

首先是建立相关目录

# 建立相关目录 ----

# 建立数据目录,本项目所有数据都保存在这个文件夹下(包括搜狗词库文件)。其中getwd()用来获取当前工作环境的目录

data.dir <- sprintf("%s/data", getwd())

# 用来输出结果的目录

results.dir <- sprintf("%s/results", getwd())

# 搜狗词典所在目录

cidian.dir <- sprintf("%s/搜狗细胞词库-201602", data.dir)

# 获取所有搜狗词库的完整路径

scel.paths <- list.files(cidian.dir, pattern = ".scel$", full.names = T)

其次是依次导入目录下所有词库

# 将所有词库逐个导入,并输出成.txt文件 ----

lapply(seq_along(scel.paths), function(i) {

decode_scel(scel = scel.paths[i],

output = str_c(scel.paths[i], ".txt"),

cpp = TRUE)}) %>%

invisible()

接着,将所有词库合并成一个词库,并进行去重,这里用到了data.table的rbindlist函数。

# 将所有的txt字典导入并整合成单一的用户词典,这里使用到了data.table包中的rbindlist函数 ----

dict.paths <- list.files(cidian.dir, pattern = ".txt$", full.names = T)

dict.list <- lapply(seq_along(dict.paths),

function(i) fread(dict.paths[i], encoding = "UTF-8"))

dict <- rbindlist(dict.list);

# 去重

dict <- unique(dict, by = names(dict))

最后,将生成的词库导出成外部txt文件,用于后续分词

# 将最后生成的词库导出成单一的txt文件,用于后续分词 ----

write.table(dict, file = sprintf("%s/guba.use.dict.utf8", data.dir),

quote = F,

row.names = F,

col.names = F,

fileEncoding = "UTF-8")

大功告成!

期预告

下期大猫课堂暂定教大家如何进行分组回归。其实这个技能在《35行代码搞定事件研究法》中已经涉及,只是一来那几期比较久远,二来那几期内容众多,大家可能把这个知识点忽略了。不过没关系,重要的东西重复三遍,大猫在下期就再讲一遍分组回归哈。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2017-04-13,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 大猫的R语言课堂 微信公众号,前往查看

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

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

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档