You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用R的quanteda包去除词典中的重音与标点?

处理Lexicoder .cat词典:去除重音与标点

针对你的需求,我们可以先将.cat格式的词典作为纯文本读取并预处理,再转换为dictionary对象,比直接修改已加载的词典结构更高效。以下是具体实现步骤:

步骤1:读取原始词典文本

.cat本质是结构化的文本文件,先通过readLines读取所有内容:

# 读取原始词典文件
dict_raw <- readLines("frlsd/frlsd.cat", encoding = "UTF-8")

步骤2:定义清洗函数

使用stringi包处理重音,结合正则表达式清理标点,完全匹配你需要的转换规则(比如à l'épreuve→a l epreuve):

library(stringi)

clean_entry <- function(text) {
  # 移除所有重音符号,转换为ASCII字符
  text_no_accents <- stri_trans_general(text, "Latin-ASCII")
  # 将所有标点符号替换为空格(匹配你的示例中撇号转空格的需求)
  text_no_punct <- gsub("[[:punct:]]", " ", text_no_accents)
  # 合并多余空格,去除首尾空白
  text_clean <- trimws(gsub("\\s+", " ", text_no_punct))
  return(text_clean)
}

步骤3:保留词典结构的前提下处理条目

.cat文件的结构是[分类名]开头,后续为该分类下的条目。我们只清洗条目行,保留分类标记:

# 逐行处理:分类标记行原样保留,条目行执行清洗
dict_processed <- lapply(dict_raw, function(line) {
  if (grepl("^\\[.*\\]$", line)) {
    line  # 分类行不处理
  } else {
    clean_entry(line)  # 清洗条目行
  }
})

# 转换为字符向量
dict_processed <- unlist(dict_processed)

步骤4:写入清洗后的文件并加载为词典

将处理后的文本写入新的.cat文件,再用dictionary函数加载:

# 写入清洗后的词典文件
writeLines(dict_processed, "frlsd/frlsd_cleaned.cat", encoding = "UTF-8")

# 加载清洗后的词典
dict_lg_clean <- dictionary(file = "frlsd/frlsd_cleaned.cat", encoding = "UTF-8")

补充说明

  • 如果不需要保留空格(比如希望l epreuve变成lepreuve),可以修改clean_entry函数,将替换标点后的空格直接移除。
  • 若你没有安装stringi包,先执行install.packages("stringi")完成安装。

内容的提问来源于stack exchange,提问作者MG Fern

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.15 16:16:12