R 提取最常见的单词)/ n 克在列中按组

Posted

技术标签:

【中文标题】R 提取最常见的单词)/ n 克在列中按组【英文标题】:R extract most common word(s) / ngrams in a column by group 【发布时间】:2020-12-29 14:04:37 【问题描述】:

我希望为每个组(第一列)从“标题”列中提取主要关键字。

“期望标题”列中的期望结果:

可重现的数据:

myData <- 
structure(list(group = c(1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 
2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 3), title = c("mentoring aug 8th 2018", 
"mentoring aug 9th 2017", "mentoring aug 9th 2018", "mentoring august 31", 
"mentoring blue care", "mentoring cara casual", "mentoring CDP", 
"mentoring cell douglas", "mentoring centurion", "mentoring CESO", 
"mentoring charlotte", "medication safety focus", "medication safety focus month", 
"medication safety for nurses 2017", "medication safety formulations errors", 
"medication safety foundations care", "medication safety general", 
"communication surgical safety", "communication tips", "communication tips for nurses", 
"communication under fire", "communication webinar", "communication welling", 
"communication wellness")), row.names = c(NA, -24L), class = c("tbl_df", 
"tbl", "data.frame"))

我研究过记录链接解决方案,但这主要是为了对完整标题进行分组。 任何建议都会很棒。

【问题讨论】:

这些词不过是名词。您可以使用“udpipe R package”轻松完成此操作。按照给定的链接,有几个可用的解决方案。我觉得第一个解决方案应该适合你。让我知道事情的后续? r-bloggers.com/an-overview-of-keyword-extraction-techniques 【参考方案1】:

我按组连接所有标题,并将它们标记化:

library(dplyr)
myData <-
  topic_modelling %>% 
  group_by(group) %>% 
  mutate(titles = paste0(title, collapse = " ")) %>%
  select(group, titles) %>% 
  distinct()

myTokens <- myData %>% 
  unnest_tokens(word, titles) %>% 
  anti_join(stop_words, by = "word")
myTokens

以下是生成的数据框:

# finding top ngrams
library(textrank)

stats <- textrank_keywords(myTokens$word, ngram_max = 3, sep = " ")
stats <- subset(stats$keywords, ngram > 0 & freq >= 3)
head(stats, 5)

我对结果很满意:

在将算法应用于大约 100000 行的真实数据时,我制作了一个函数来逐组解决问题:

# FUNCTION: TOP NGRAMS ----
find_top_ngrams <- function(titles_concatenated)

  myTest <-
    titles_concatenated %>%
    as_tibble() %>%
    unnest_tokens(word, value) %>%
    anti_join(stop_words, by = "word")
  
  stats <- textrank_keywords(myTest$word, ngram_max = 4, sep = " ")
  stats <- subset(stats$keywords, ngram > 1 & freq >= 5)
  top_ngrams <- head(stats, 5)
  
  top_ngrams <- tibble(top_ngrams)
  
  return(top_ngrams)
  
  # print(top_ngrams)
  



for (i in 1:5)
  find_top_ngrams(myData$titles[i])

【讨论】:

以上是关于R 提取最常见的单词)/ n 克在列中按组的主要内容,如果未能解决你的问题,请参考以下文章

excel如何提取第二个字母是i的单词?

在列中查找字母并提取包含特定字母的行

在R中按组应用滚动平均值

如何从以 BLOB 类型存储在列中的 XML 中提取数据(通过 SQL 查询)

SQL / Presto SQL:在同一列中按组求和

根据相邻列值 Pandas 从列中按第一个或第二个空格提取字符串