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

基于关键词拆分列的R语言文本挖掘实现方法问询

在R中解析表单生成的描述文本完全可行!

当然没问题啦,这种结构化的文本解析在R里有很多便捷的方法,我给你两种实用的方案,你可以根据自己的数据情况来选:

方法一:用tidyr::separate_wider_regex精准匹配(推荐,适合内容带逗号的情况)

因为你的Interests字段内容里可能包含逗号,直接用逗号分隔会出问题,用正则匹配键值对的方式更稳妥。

步骤示例:

  1. 先构造一份模拟数据(和你的数据格式一致):
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."
  )
)
  1. 用正则提取对应字段:
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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 03:09:40