[英]Automated tagging/text mining in excel
我有一个每月 excel 电子表格,其中包含以下内容:
类别 | 描述 |
---|---|
一个 | 段落形式的自由文本 |
乙 | 段落形式的自由文本 |
C | 段落形式的自由文本 |
乙 | 段落形式的自由文本 |
乙 | 段落形式的自由文本 |
一个 | 段落形式的自由文本 |
我想添加第三列,它从搜索自由文本的预定列表中添加标签或关键字,然后根据是否在那里找到一个或多个术语来预填充它。
例如,标签列表可以是价格、距离、可用性、位置等,其中“关键字”或“标签”列根据第二列中的自由文本填充,如下所示
类别 | 描述 | 关键字或标签 |
---|---|---|
一个 | 真的不喜欢这个价格和位置太远了 | 价格,位置 |
乙 | 距离是一个问题,可用性并不高 | 距离,可用性 |
C | 位置很近所以我喜欢方便 | 位置,方便 |
乙 | 距离近,有很多空房 | 可用性,距离 |
如上所示,标签将用逗号分隔。
问题是预先确定的关键字列表很大(大约 20 到 30 个标签)。
我的问题:
在不删除任何标签的情况下创建此列表的最有效方法是什么?
另外,有没有办法在 RStudio 中做到这一点?
我们可以在这里使用正则表达式从字符串中提取关键字。
如果我们将关键字放在向量keywords
中,我们可以使用str_extract_all
中的stringr
来提取字符串中的所有匹配词。 我已经把它变成了一个简单的 function,我们将其应用于 data.frame 的Description
列,将结果插入到一个新的变量Keys
中
library(stringr)
get_tags <- function(str, tags) {
res = str_extract_all(str,
regex(tags, ignore_case = T), # Search case insensitive
simplify = T)[,1] # Get result as vector, not matrix
return(res[nchar(res) > 0]) # Drop empty strings from non-matched keywords
}
df$Keys <- sapply(df$Description,
function(x) paste0(get_tags(x, keywords),
collapse=', ')) # Collapse matches w/ commas
df
Category Description Keys
1 A Really doesn't like the price and location is too far price, location
2 B The distance is an issue and not too much availability distance, availability
3 C Location is close so I like the convenience Location, convenience
4 D The distance is near and there is a lot of availability distance, availability
由于您希望匹配不区分大小写,因此将正则表达式模式 ( tags
) 放入regex
function 允许我们指定它应该忽略大小写。
一个简单的解决方案,它使用 Excel 公式并避免任何外部依赖:
=SEARCH()
function 查找标签,为每个关键字或标签填充一列=TEXTJOIN()
聚合所有标签例子:
一个 | 乙 | C | D | 乙 | F | G | |
---|---|---|---|---|---|---|---|
1 | 类别 | 描述 | 标签(全部) | 价格 | 地点 | 距离 | 可用性 |
2 | 一个 | 真的不喜欢这个价格和位置太远了 | '=TEXTJOIN(", ", TRUE, D2:XX2) | '=IF(ISERROR(搜索(D$1,$B2)), "", D$1) | ------ | ------ | ----> |
Output:
一个 | 乙 | C | D | 乙 | F | G | |
---|---|---|---|---|---|---|---|
1 | 类别 | 描述 | 标签(全部) | 价格 | 地点 | 距离 | 可用性 |
2 | 一个 | 真的不喜欢这个价格和位置太远了 | 价格,位置 | 价格 | 地点 |
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.