Как рассчитать сходство между двумя строковыми столбцами, используя TF IDF в R - PullRequest
0 голосов
/ 24 октября 2019

Возможно, аналогичный вопрос задали бы на этом форуме, но я чувствую, что мое требование является своеобразным.

У меня есть фрейм данных df1, в котором он состоит из переменной "WrittenTerms" с 40 000 наблюдений, и у меня есть другие данные-fame df2 с переменной «Предлагаемые условия» с 17 000 наблюдений

Мне нужно вычислить сходство между «написанным термином» и «предлагаемым термином», я использую пакет Stringdist, но этот подход занимает довольно много времени, так как мы имеембольше наблюдений.

df1 $ WrittenTerms

боль в голове

рак легкого

боль в животе

df2 $ рекомендуемые условия

кардио-атака

рак молочной железы

боль в животе

головная боль

рак легкого

Мне нужно получить вывод следующим образом

df1 $ WrittenTerms df2 $ рекомендуемые термины Similarity_percentage

головная боль головная боль 50%

рак легкихрак легких 100%

абдмиболь в животе боль в животе 80%

Я пишу приведенный ниже код, чтобы выполнить требование, но это занимает больше времени, так как оно связано с циклом и есть ли способ найти сходство, используя 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)
...