2016-04-24 2 views
1

Я знаком с модулем nltk.metrics.distance python, который обычно используется для вычисления расстояния редактирования двух строк.Расстояние на основе токенов в Python?

Меня интересует функция, которая вычисляет такое расстояние, но не char-wise, как обычно, но токен-мудрый. Под этим я подразумеваю, что вы можете заменять/добавлять/удалять только целые токены (вместо символов).

Пример регулярного расстояния редактирования и моей желаемой лексического версии:

> char_dist("aa bbbb cc", 
      "aa b cc") 
3        # add 'b' character three-times 

> token_dist("aa bbbb cc", 
      "aa b cc") 
1        # replace 'bbbb' token with 'b' token 

Есть уже некоторые функции, которые могут вычислить token_dist в Python? Я бы предпочел использовать что-то уже реализованное и протестированное, чем писать свой собственный код. Спасибо за советы.

ответ

3

Во-первых, установить следующее:

pip install editdistance 

Тогда следующий даст вам маркер-накрест редактировать расстояние:

import editdistance 
editdistance.eval(list1, list2) 

Пример:

import editdistance 
tokens1 = ['aa', 'bb', 'cc'] 
tokens2 = ['a' , 'bb', 'cc'] 
editdistance.eval(tokens1, tokens2) 
out[4]: 1 

Для получения дополнительной информации, обратитесь к:

https://github.com/aflc/editdistance

+1

здорово! Спасибо – petrbel

3

NLTK-х edit_distance, кажется, работает так же хорошо, как со списками со строками:

nltk.edit_distance("aa bbbb cc", "aa b cc") 
> 3 
nltk.edit_distance("aa bbbb cc".split(), "aa b cc".split()) 
> 1