Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/74.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在R中使用TF IDF计算两个字符串列之间的相似性_R_Pattern Matching_Similarity_Tf Idf_Stringdist - Fatal编程技术网

如何在R中使用TF IDF计算两个字符串列之间的相似性

如何在R中使用TF IDF计算两个字符串列之间的相似性,r,pattern-matching,similarity,tf-idf,stringdist,R,Pattern Matching,Similarity,Tf Idf,Stringdist,在这个论坛上可能会问类似的问题,但我觉得我的要求很特别 我有一个数据帧df1,其中它由变量“writenterms”和40000个观察值组成,我有另一个数据帧df2,其中变量“suggesterms”和17000个观察值 我需要计算“书面术语”和“建议术语”之间的相似性,我使用的是Stringdist包,但这种方法需要花费相当长的时间,因为我们有更多的观察 df1$WrittenTerms 头痛 肺癌 腹痛 df2$suggestedterms 心脏病发作 乳腺癌 腹痛 头痛 肺癌 我需要得到如

在这个论坛上可能会问类似的问题,但我觉得我的要求很特别

我有一个数据帧df1,其中它由变量“writenterms”和40000个观察值组成,我有另一个数据帧df2,其中变量“suggesterms”和17000个观察值

我需要计算“书面术语”和“建议术语”之间的相似性,我使用的是Stringdist包,但这种方法需要花费相当长的时间,因为我们有更多的观察

df1$WrittenTerms

头痛

肺癌

腹痛

df2$suggestedterms

心脏病发作

乳腺癌

腹痛

头痛

肺癌

我需要得到如下输出

df1$WrittenTerms df2$suggestedterms相似度\u百分比

头痛头痛50%

肺癌肺癌100%

腹痛腹痛80%

我正在编写下面的代码以满足要求,但它需要更多的时间,因为它涉及for循环,是否有任何方法可以使用TF-IDF或任何其他花费更少时间的方法找到相似性

df_list <- data.frame(check.names = FALSE) # Creating empty dataframe

# calculating similarity between strings.

for(i in df1$WrittenTerms){
  df2$oldsim<- stringdist(i,df2$suggestedterms,method = "lv")
  df2$oldsim <- 1 - df2$oldsim / nchar(as.character(df2$suggestedterms))
  df2 <- head(df2[order(df2$oldsim, decreasing = TRUE),],1)
  df_list <- rbind(df_list, df2)
}

df1 <- cbind(df1, df_list)

df_list这不是重复了你几天前提出的问题吗?谢谢,但是这种方法需要相当长的时间,因此我尝试使用text2vec/tfidf来查找相似性,因为我知道这种方法需要的时间更少。现在我有了231行和70098个丛的矩阵(这是一个样本),它们的相似值是矩阵形式的。但是,使用下面的方法,我无法取消堆栈,因为我有大量的列(70098)。您是否有一个简单的方法可以使用tfidf完成它,它应该花费更少的时间?我想执行以下步骤:在将矩阵转换为数据帧排序(相似性,版本)后取消堆栈删除重复