Скажем, у меня есть два массива:
import numpy as np
arr1 = np.array(['faucet', 'faucets', 'bath', 'parts', 'bathroom'])
arr2 = np.array(['faucett', 'faucetd', 'bth', 'kichen'])
, и я хочу вычислить сходство строк в arr2
со строками в arr1
.
arr1
isмассив правильно написанных слов.
arr2
- это массив слов, не распознанных в словаре слов.
Я хочу вернуть матрицу, которая затем будет превращена в pandas DataFrame.
Мое текущее решение ( кредит ):
from scipy.spatial.distance import pdist, squareform
from Levenshtein import ratio
arr3 = np.concatenate((arr1, arr2)).reshape(-1,1)
matrix = squareform(pdist(arr3, lambda x,y: ratio(x[0], y[0])))
df = pd.DataFrame(matrix, index=arr3.ravel(), columns=arr3.ravel())
Вывод:
faucet faucets bath parts bathroom faucett \
faucet 0.000000 0.923077 0.400000 0.363636 0.285714 0.923077
faucets 0.923077 0.000000 0.363636 0.500000 0.266667 0.857143
bath 0.400000 0.363636 0.000000 0.444444 0.666667 0.363636
parts 0.363636 0.500000 0.444444 0.000000 0.307692 0.333333
bathroom 0.285714 0.266667 0.666667 0.307692 0.000000 0.266667
faucett 0.923077 0.857143 0.363636 0.333333 0.266667 0.000000
faucetd 0.923077 0.857143 0.363636 0.333333 0.266667 0.857143
bth 0.222222 0.200000 0.857143 0.250000 0.545455 0.200000
kichen 0.333333 0.307692 0.200000 0.000000 0.142857 0.307692
faucetd bth kichen
faucet 0.923077 0.222222 0.333333
faucets 0.857143 0.200000 0.307692
bath 0.363636 0.857143 0.200000
parts 0.333333 0.250000 0.000000
bathroom 0.266667 0.545455 0.142857
faucett 0.857143 0.200000 0.307692
faucetd 0.000000 0.200000 0.307692
bth 0.200000 0.000000 0.222222
kichen 0.307692 0.222222 0.000000
Проблема с этим решением : Я трачу время на вычисление парных соотношений расстояний для слов, которые, как я знаю, написаны правильно.
Мне бы хотелось передать функции arr1
и arr2
(которые могут быть различной длины!) Ивыведите матрицу (не обязательно квадратную) с соотношениями.
Результат будет выглядеть так (без учета вычислительных затрат):
>>> df.drop(index=arr1, columns=arr2)
faucet faucets bath parts bathroom
faucett 0.923077 0.857143 0.363636 0.333333 0.266667
faucetd 0.923077 0.857143 0.363636 0.333333 0.266667
bth 0.222222 0.200000 0.857143 0.250000 0.545455
kichen 0.333333 0.307692 0.200000 0.000000 0.142857