Вычисление расстояния Кульбака-Лейблера (КЛ) между текстовыми документами с использованием numpy

Моя цель - вычислить расстояние KL между следующими текстовыми документами:

1)The boy is having a lad relationship
2)The boy is having a boy relationship
3)It is a lovely day in NY

Я в первую очередь векторизовал документы, чтобы легко применить NumPy

1)[1,1,1,1,1,1,1]
2)[1,2,1,1,1,2,1]
3)[1,1,1,1,1,1,1]

Затем я применил следующий код для вычисления расстояния KL между текстами:

import numpy as np
import math
from math import log

v=[[1,1,1,1,1,1,1],[1,2,1,1,1,2,1],[1,1,1,1,1,1,1]]
c=v[0]
def kl(p, q):
    p = np.asarray(p, dtype=np.float)
    q = np.asarray(q, dtype=np.float)
    return np.sum(np.where(p != 0,(p-q) * np.log10(p / q), 0))
for x in v:
    KL=kl(x,c)
    print KL

Вот результат кода выше:[0.0, 0.602059991328, 0.0], Тексты 1 и 3 совершенно разные, но расстояние между ними равно 0, в то время как тексты 1 и 2, которые тесно связаны, имеют расстояние0.602059991328, Это н'Точно.

Кто-нибудь имеет представление о том, что яне правильно делаешь по отношению к КЛ? Большое спасибо за ваши предложения.

Ответы на вопрос(3)

Ваш ответ на вопрос