koRpus的tokenize处理Word文件夹时无法分文件计算可读性得分问题
问题原因
你的操作存在两个核心疏漏:
koRpus::tokenize()不支持直接传入文件夹路径批量读取多文件,传入目录时函数只会识别并读取路径下第一个可解析的文本文件,这就是你生成的krp.text对象远小于文件夹总大小、最终仅返回1组可读性得分的根本原因。tokenize()原生仅支持解析纯文本文件,无法直接读取.doc/.docx格式的Word文档,如果你没有提前做格式转换,函数甚至会直接跳过无法解析的Word文件。
操作步骤
按以下流程即可逐文件计算可读性得分:
- 前置准备:将文件夹内所有Word文件批量转换为UTF-8编码的纯文本(.txt)文件,存放在原目录下;如果不想手动转格式,也可以用支持读取Word文档的包先把文本内容读入R环境再传入tokenize。
- 第一步:加载依赖包,获取目录下所有目标文件的完整路径
library(koRpus) # 替换为你的实际文件夹路径 target_dir <- "/Users/gdballingrud/Desktop/WPSCASES 1/" # 提取目录下所有txt文件的路径,如果你处理的是其他格式修改pattern参数即可 file_paths <- list.files( path = target_dir, pattern = "\\.txt$", full.names = TRUE, recursive = FALSE )
- 第二步:逐文件执行分词、可读性计算,用列表存储结果
# 批量遍历所有文件 result_list <- lapply(file_paths, function(path) { # 单文件分词 tok_obj <- tokenize( txt = path, lang = "en" ) # 计算单文件可读性得分 rd_obj <- readability(tok_obj) # 给结果绑定文件名,方便后续区分 rd_obj@desc$source_file <- basename(path) return(rd_obj) })
- 第三步:整理结果为结构化数据框
# 提取每个文件的指标值,合并为统一表格 final_result <- do.call(rbind, lapply(result_list, function(obj) { data.frame( file_name = obj@desc$source_file, as.list(obj@readability), check.names = FALSE ) }))
执行完成后final_result中每一行对应一个独立文件的可读性得分,你需要的LIX、Kuntzsch's Text-Redundanz-Index(结果中列名为TRI)都在列中,直接查看或导出即可。
补充说明
- 如果选择直接读取Word文件不转txt,可在读取文本内容后调用tokenize时设置参数
format = "obj",告知函数传入的是文本对象而非文件路径。 - 不需要额外给
readability()传参数指定计算指标,函数默认会计算所有内置的可读性度量,包含你提到的两个特殊指标。
内容的提问来源于stack exchange,提问作者Gordon
相关产品推荐
相关产品推荐

