Самый легкий 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
, Это является большим учебным руководством для запущения Вас.
В Университете Шеффилда есть отличный ресурс для показателей схожести строк. В нем есть список различных показателей (помимо Левенштейна) и их реализации с открытым исходным кодом. Похоже, многие из них легко адаптировать к Python.
http://web.archive.org/web/20081224234350/http://www.dcs.shef.ac.uk/~sam/stringmetrics.html
Вот небольшая часть списка:
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
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
Я бы использовал расстояние Левенштейна или так называемое расстояние Дамерау (которое учитывает транспозиции), а не дифлиб по двум причинам (1) «достаточно быстро» (алгоритм динамического программирования) и "whoooosh" (бит-бит) C-код доступен и (2) хорошо понятное поведение, например, Левенштейн удовлетворяет неравенству треугольника и, таким образом, может использоваться, например, в дереве Буркхарда-Келлера.
Порог: вы должны рассматривать как " положительный "только в тех случаях, когда расстояние <(1 - X) * max (len (string1), len (string2)) и отрегулируйте X (коэффициент подобия) по своему усмотрению. Один из способов выбора X - получить выборку совпадений, вычислить X для каждого, игнорировать случаи, когда X <, скажем, 0,8 или 0,9,