使用词簇值转换字符串列

Transform column of strings with word cluster values

我正在用 R 做一些基本的 NLP 工作。我有两个数据集,想用另一个中每个词的聚类值替换一个中的词。

第一个数据集包含句子,第二个数据集包含每个单词的聚类值(假设第一个数据集中的每个单词都有一个聚类值):

original_text_df <- read.table(text="Text
'this is some text'
'this is more text'", header=T, sep="") 

cluster_df <- read.table(text="Word Cluster
this 2
is 2 
some 3
text 4
more 3", header=T, sep="") 

这是所需的转换输出:

Text
"2 2 3 4"
"2 2 3 4"

寻找有效的解决方案,因为我的句子很长而且很多。谢谢!

您可以尝试这样的操作:

library(tidyr)
library(dplyr)
library(stringi)

df1 <- unnest(stri_split_fixed(original_text_df$Text, ' '), group) %>%
  group_by(x) %>% mutate(cluster = cluster_df$Cluster[cluster_df$Word %in% x]) 

给出:

#Source: local data frame [8 x 3]
#Groups: x
#
#  group    x cluster
#1    X1 this       2
#2    X1   is       2
#3    X1 some       3
#4    X1 text       4 
#5    X2 this       2
#6    X2   is       2
#7    X2 more       3
#8    X2 text       4

从那里,为了匹配您的预期输出,您可以使用 split() 为每个组(句子)构建一个聚类列表并重建数据框:

l <- split(df1$cluster, f = df1$group)
df2 <- data.frame(Text = do.call(rbind, lapply(l, paste0, collapse = " ")))

你将获得:

#      Text
#X1 2 2 3 4
#X2 2 2 3 4

你可以参考这个非常相似我几个月前问过,显示了很多其他建议。