如何在R中统计文本文件中指定全名的出现次数并生成统计表格
统计姓名在文本中的出现次数(R语言实现)
步骤1:加载所需工具包
我们需要stringr处理字符串匹配,dplyr整理结果表格(也可使用基础R替代):
# 未安装的话先执行安装命令 # install.packages(c("stringr", "dplyr")) library(stringr) library(dplyr)
步骤2:读取文本文件
针对大型文本,用read_file()一次性将整个文件读为单个字符串,效率更优:
# 替换为你的文本文件路径 my_text <- read_file("my_textfile.txt")
步骤3:定义姓名列表
将220个全名整理成字符向量:
name_list <- c("David Smith", "Rachel Miller", "Carl Bekker", "Tiffany Bone", "Mike Miller")
步骤4:批量统计出现次数
通过sapply()遍历姓名列表,结合带单词边界的正则实现精确匹配,避免部分匹配误统计:
# 统计每个姓名的出现次数 mention_counts <- sapply(name_list, function(name) { str_count(my_text, regex(paste0("\\b", name, "\\b"), ignore_case = FALSE)) }) # 转换为结果表格 result_table <- data.frame( Name = names(mention_counts), Mentions = as.numeric(mention_counts), stringsAsFactors = FALSE )
示例测试
用你提供的示例文本验证效果:
# 示例文本内容 sample_text <- "Hi my name is David Smith and I know Rachel Miller but I have no clue who Tiffany Bone is. Yet, I know someone called Rachel Bone. I also know that Rachel Miller knows both someone called Carl Bekker and Tiffany Bone. David Smith as a name is not very creative; but who cares? Maybe you, Rachel Miller?" # 执行统计 test_counts <- sapply(name_list, function(name) { str_count(sample_text, regex(paste0("\\b", name, "\\b"))) }) test_table <- data.frame( Name = names(test_counts), Mentions = as.numeric(test_counts), stringsAsFactors = FALSE ) print(test_table)
运行后输出:
Name Mentions 1 David Smith 2 2 Rachel Miller 3 3 Carl Bekker 1 4 Tiffany Bone 2 5 Mike Miller 0
关键说明
- 正则中的
\\b是单词边界,确保只匹配完整的全名,不会把"Rachel Bone"误判为"Rachel Miller"的一部分 - 若需要忽略大小写匹配,将
ignore_case = FALSE改为TRUE即可 - 针对220个姓名的遍历统计,即使是超大型文本也能高效完成,因为
str_count是向量化操作,开销极低
内容的提问来源于stack exchange,提问作者Petra Notter
相关产品推荐
相关产品推荐

