使用字簇值转换字符串列

时间:2015-03-12 00:47:12

标签: r nlp cluster-computing

我在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"

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

1 个答案:

答案 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几个月前我问过很多其他的建议。