基于关键词拆分列的R语言文本挖掘实现方法问询
在R中解析表单生成的描述文本完全可行!
当然没问题啦,这种结构化的文本解析在R里有很多便捷的方法,我给你两种实用的方案,你可以根据自己的数据情况来选:
方法一:用tidyr::separate_wider_regex精准匹配(推荐,适合内容带逗号的情况)
因为你的Interests字段内容里可能包含逗号,直接用逗号分隔会出问题,用正则匹配键值对的方式更稳妥。
步骤示例:
- 先构造一份模拟数据(和你的数据格式一致):
library(tidyverse) # 模拟你的CSV数据 df <- tibble( description = c( "Name: XYZ, City: New York, Interests: I play the guitar, and spend my weekends playing badminton and tennis.", "Name: ABC, City: London, Interests: I love reading mystery novels, hiking in the mountains and cooking Italian food." ) )
- 用正则提取对应字段:
df_parsed <- df %>% separate_wider_regex( description, patterns = c( "Name: ", Name = "[^,]+", ", City: ", City = "[^,]+", ", Interests: ", Description = ".+" ) )
解释一下:
Name = "[^,]+"表示匹配Name:后面直到第一个逗号前的所有内容,正好提取名字City = "[^,]+"同理提取城市Description = ".+"匹配Interests:后面的所有内容,不管有没有逗号都能完整提取
方法二:用stringr::str_extract逐个提取字段
如果你更习惯逐个处理每个字段,用stringr的提取函数也很方便:
df_parsed <- df %>% mutate( Name = str_extract(description, "(?<=Name: ).+?(?=, City:)"), City = str_extract(description, "(?<=City: ).+?(?=, Interests:)"), Description = str_extract(description, "(?<=Interests: ).+") ) %>% select(-description) # 可选:移除原有的description列
解释:
(?<=Name: )是正向预查,表示匹配前面是Name:的内容.+?(?=, City:)是正向预查终止,匹配到, City:就停止,这样精准提取名字- 最后一个
Description用.+直接提取Interests:后面的所有内容
验证结果
运行完上面的代码后,你可以用print(df_parsed)查看结果,会得到包含Name、City、Description三列的干净数据框,完全符合你的需求!
如果你的实际数据里有一些格式不一致的情况(比如有的行少字段),可以再加个str_remove或者if_else做简单的清洗调整,基本都能搞定~
内容的提问来源于stack exchange,提问作者Shreya Kuruvilla
相关产品推荐
相关产品推荐

