Строковые метрики подобия в Python

Самый легкий lib, который я использовал, Paolo Gios библиотека. Это в основном

Create GiosPDFDocument object
Create TextArea object
Add text, images, etc to TextArea object
Add TextArea object to PDFDocument object
Write to stream

, Это является большим учебным руководством для запущения Вас.

43
задан Legend 2 July 2011 в 04:38
поделиться

4 ответа

В Университете Шеффилда есть отличный ресурс для показателей схожести строк. В нем есть список различных показателей (помимо Левенштейна) и их реализации с открытым исходным кодом. Похоже, многие из них легко адаптировать к Python.

http://web.archive.org/web/20081224234350/http://www.dcs.shef.ac.uk/~sam/stringmetrics.html

Вот небольшая часть списка:

  • Расстояние Хэмминга
  • Расстояние Левенштейна
  • Расстояние Нидлмана-Вунча или алгоритм Селлера
  • и многие другие ...
21
ответ дан 26 November 2019 в 22:30
поделиться

I realize it's not the same thing, but this is close enough:

>>> import difflib
>>> a = 'Hello, All you people'
>>> b = 'hello, all You peopl'
>>> seq=difflib.SequenceMatcher(a=a.lower(), b=b.lower())
>>> seq.ratio()
0.97560975609756095

You can make this as a function

def similar(seq1, seq2):
    return difflib.SequenceMatcher(a=seq1.lower(), b=seq2.lower()).ratio() > 0.9

>>> similar(a, b)
True
>>> similar('Hello, world', 'Hi, world')
False
82
ответ дан 26 November 2019 в 22:30
поделиться

Is that what you mean?

>>> get_close_matches('appel', ['ape', 'apple', 'peach', 'puppy'])
['apple', 'ape']
>>> import keyword
>>> get_close_matches('wheel', keyword.kwlist)
['while']
>>> get_close_matches('apple', keyword.kwlist)
[]
>>> get_close_matches('accept', keyword.kwlist)
['except']

look at http://docs.python.org/library/difflib.html#difflib.get_close_matches

5
ответ дан 26 November 2019 в 22:30
поделиться

Я бы использовал расстояние Левенштейна или так называемое расстояние Дамерау (которое учитывает транспозиции), а не дифлиб по двум причинам (1) «достаточно быстро» (алгоритм динамического программирования) и "whoooosh" (бит-бит) C-код доступен и (2) хорошо понятное поведение, например, Левенштейн удовлетворяет неравенству треугольника и, таким образом, может использоваться, например, в дереве Буркхарда-Келлера.

Порог: вы должны рассматривать как " положительный "только в тех случаях, когда расстояние <(1 - X) * max (len (string1), len (string2)) и отрегулируйте X (коэффициент подобия) по своему усмотрению. Один из способов выбора X - получить выборку совпадений, вычислить X для каждого, игнорировать случаи, когда X <, скажем, 0,8 или 0,9,

7
ответ дан 26 November 2019 в 22:30
поделиться
Другие вопросы по тегам:

Похожие вопросы: