Ich habe Ähnlichkeitsfunktion von pg_trgm Modul in PostgreSQL verwendet und jetzt bin ich auf der Suche nach einem Wort Ähnlichkeitsfunktion ähnlich wie Ähnlichkeit in Python. Ich habe viele Methoden in Python gefunden, z.B. difflib, nltk, aber keine dieser Methoden erzeugt ähnliche Ergebnisse wie die Similarity-Funktion von PostgreSQL.Python String Matching genau gleich Postgresql Ähnlichkeitsfunktion
Ich habe diesen Code für Wörter verwendet, die übereinstimmen, aber die Ergebnisse unterscheiden sich sehr von denen der PostgreSQL Ähnlichkeitsfunktion. Sind diese Ergebnisse besser als die der Similarity-Funktion von PostgreSQL? Gibt es eine Methode oder eine Bibliothek, die ich verwenden kann, um die Ergebnisse ähnlich PostgreSQL Similarity Funktion zu erzeugen?
from difflib import SequenceMatcher
import nltk
from fuzzywuzzy import fuzz
def similar(a,b):
return SequenceMatcher(None,a,b).ratio()
def longest_common_substring(s1, s2):
m = [[0] * (1 + len(s2)) for i in xrange(1 + len(s1))]
longest, x_longest = 0, 0
for x in xrange(1, 1 + len(s1)):
for y in xrange(1, 1 + len(s2)):
if s1[x - 1] == s2[y - 1]:
m[x][y] = m[x - 1][y - 1] + 1
if m[x][y] > longest:
longest = m[x][y]
x_longest = x
else:
m[x][y] = 0
return s1[x_longest - longest: x_longest]
def similarity(s1, s2):
return 2. * len(longest_common_substring(s1, s2))/(len(s1) + len(s2)) * 100
print similarity("New Highway Classic Academy Lahore","Old Highway Classic Academy")
print nltk.edit_distance("This is Your Shop","This")
print fuzz.ratio("ISE-Tower","UfTowerong,")