Я хотел бы ускорить следующий код. Может ли кто-нибудь быть таким добрым и внести некоторые предложения?
library(dplyr)
library(fuzzywuzzyR)
set.seed(42)
rm(list = ls())
options(scipen = 999)
init = FuzzMatcher$new()
data <- data.frame(string = c("hello world", "hello vorld", "hello world 1", "hello world", "hello world hello world"))
data$string <- as.character(data$string)
distance_function <- function(string_1, string_2) {
init$Token_set_ratio(string1 = string_1, string2 = string_2)
}
combinations <- combn(nrow(data), 2)
distances <- matrix(, nrow = 1, ncol = ncol(combinations))
distance_matrix <- matrix(NA, nrow = nrow(data), ncol = nrow(data), dimnames = list(data$string, data$string))
for (i in 1:ncol(combinations)) {
distance <- distance_function(data[combinations[1, i], 1], data[combinations[2, i], 1])
#print(data[combinations[1, i], 1])
#print(data[combinations[2, i], 1])
#print(distance)
distance_matrix[combinations[1, i], combinations[2, i]] <- distance
distance_matrix[combinations[2, i], combinations[1, i]] <- distance
}
distance_matrix
Кстати, я безуспешно пытался использовать proxy :: dist и другие подходы. Я также не думаю, что функция расстояния до строки работает так, как ожидалось, но это уже другая история.
В конечном счете, я хочу использовать матрицу расстояний, чтобы выполнить некоторую кластеризацию для группировки похожих строк (независимо от порядка слов).