如何用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
相关产品推荐
相关产品推荐

