Извлечь лучшее совпадение из матрицы длины строки - PullRequest
0 голосов
/ 25 мая 2018

У меня проблемы с извлечением наилучшего совпадения из матрицы строкового расстояния.

Я использую пакет stringdist для вычисления матрицы строкового расстояния.

Например, я генерирую свою матрицу, используяэти строки кода.

library(stringdist)
lookup <- c('Dog', 'Cat', 'Bear')
data <- c('Do g', 'Do gg', 'Caat')
d.matrix <- stringdistmatrix(a = lookup, b = data, useNames="strings",method="cosine")

Матрица выглядит примерно так

enter image description here

Мой подход заключается в извлечении косинусного сходства снаименьшее число является лучшим соответствием.

Например, «Do g» будет совпадать с «Dog»

То, что я хочу сгенерировать, - это совпадающий фрейм данных пары со значением подобия consine

data  |  matchwith  |  cosine.s

Do g       Dog         0.1338746
Do gg      Dog         0.1271284
Caat       Cat         0.05719096

Понятия не имею, как получить данные в нужном мне формате таблицы (см. Выше).

Любая помощь будет принята с благодарностью.

Ответы [ 2 ]

0 голосов
/ 25 мая 2018

Это немного грубая техника, но вы также можете сказать:

n.matrix <- data.frame(data=dimnames(d.matrix)[[2]], 
                       matchwith = dimnames(d.matrix)[[1]],
                       cosine.s = c(d.matrix[1,1], d.matrix[2,2], d.matrix[3,3]))

Если в реальной задаче, с которой вы работаете, большое количество столбцов и строк, можно создать функцию для созданиястрока значений для косинуса.s = c (d.matrix [i, i])

0 голосов
/ 25 мая 2018

Функция which.min является хорошим решением для этой проблемы.
Это решение с использованием базы R:

library(stringdist)
lookup <- c('Dog', 'Cat', 'Bear')
data <- c('Do g', 'Do gg', 'Caat')
d.matrix <- stringdistmatrix(a = lookup, b = data, useNames="strings",method="cosine")

#list of minimun cosine.s
  cosines<-apply(d.matrix, 2, min)

#return list of the row number of the minimum value
  minlist<-apply(d.matrix, 2, which.min) 
#return list of matching values
  matchwith<-lookup[minlist]

#final answer
answer<-data.frame(data, matchwith, cosines)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...