Как я могу вычислить расстояние Левенштейна между предложениями в тексте - PullRequest
0 голосов
/ 27 декабря 2018

Я хочу вычислить расстояние Левенштейна между предложениями в одном документе.и я нашел код, который вычисляет расстояние на уровне символов, но я хочу, чтобы он был на уровне слов.например, выход этого уровня персонажа равен 6 ,, но я хочу, чтобы он был равен 1, что означает, что нужно удалить только одно слово, если мы хотим изменить b на a или a на b:

a = "The patient tolerated this ."
b = "The patient tolerated ."

def levenshtein_distance(a, b):

    if a == b:
        return 0
    if len(a) < len(b):
        a, b = b, a
    if not a:
        return len(b)
    previous_row = range(len(b) + 1)
    for i, column1 in enumerate(a):
        current_row = [i + 1]
        for j, column2 in enumerate(b):
            insertions = previous_row[j + 1] + 1
            deletions = current_row[j] + 1
            substitutions = previous_row[j] + (column1 != column2)
            current_row.append(min(insertions, deletions,    substitutions))
            previous_row = current_row
    print (previous_row[-1]) 
    return previous_row[-1] 

result = levenshtein_distance(a, b)

1 Ответ

0 голосов
/ 27 декабря 2018

Я предлагаю не изобретать колесо, вы можете использовать pylev https://pypi.org/project/pylev/ Вы можете установить его просто, выполнив команду pip install pylev в консоли.Затем, чтобы вычислить расстояние, используя слова, а не буквы:

 import pylev
 a = "The patient tolerated this ."
 b = "The patient tolerated ."
 a = a.split(" ")
 b = b.split(" ")
 print(pylev.levenshtein(a,b))

Имейте в виду, что это решение учитывает регистр и предполагает, что все слова разделены пробелом.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...