文本与R的相关性

问题描述 投票:1回答:1

我正在使用一个DF,其中包含几行文字ID,文字语料库和所述语料库中的字数。它看起来像这样。

    ID                        Text     W_Count
Text_1         I love green apples           4
Text_2    I love yellow submarines           4
Text_3 Remember to buy some apples           5
Text_4               No match here           3

通过这个DF,我想计算出所有行的共同词数 例如,我想计算出所有行之间的共同词数。Text_1Text_2 一语双关 Text_1Text_3 只有一个。

一旦我有了这些,我需要用类似于这个矩阵的方式来显示数据。

      ID Text_1 Text_2 Text_3 Text_4
Text_1      4      2      1      0
Text_2      2      4      0      0
Text_3      1      0      5      0
Text_4      0      0      0      3

我只用了两行就做到了,例如: Text_1Text_2:

Text_1 = df[1, 2]
Text_2 = df[2, 2]
Text_1_split <- unlist(strsplit(Text_1, split =" "))
Text_2_split <- unlist(strsplit(Text_2, split =" "))
count = length(intersect(Text_1_split, Text_2_split))
count
[1] 2

但是,我不知道如何对所有行系统地应用这个方法,然后显示我需要的矩阵。

任何帮助将是非常感激的。

r text-mining
1个回答
2
投票

你可能正在寻找的是 vapply 功能。考虑到以下几点。

vapply(df$ID, 
           function(x){
                sapply(df$ID, 
                       function(y){
                          x_split <- unlist(strsplit(df$Text[df$ID == x], split = " "))
                          y_split <- unlist(strsplit(df$Text[df$ID == y], split = " "))

                          return(length(intersect(x_split, y_split)))
                       })
            }, 
           integer(nrow(df)))

The vapply 函数("vector-apply")将一个函数应用于一系列输入,并以第三个参数的形式返回一个向量(在本例中,一个长度等于数据输入长度的整数)。

© www.soinside.com 2019 - 2024. All rights reserved.