[英]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.