我在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"
寻找有效的解决方案,因为我有很长的句子和许多句子。谢谢!
答案 0 :(得分:1)
您可以尝试这样的事情:
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
你可以参考这个非常相似的question几个月前我问过很多其他的建议。