J'ai utilisé la fonction de similarité du module pg_trgm dans PostgreSQL et maintenant je suis à la recherche d'une fonction de similitude des mots similaire à Similitude en Python. J'ai trouvé beaucoup de méthodes en python, par exemple difflib, nltk, mais aucune de ces méthodes ne produit des résultats similaires à ceux de la fonction Similarity de PostgreSQL.Python String correspondant exactement à la fonction de similarité Postgresql
J'ai utilisé ce code pour la correspondance de mots mais les résultats sont très différents de ceux de la fonction de similarité de PostgreSQL. Ces résultats sont-ils meilleurs que ceux de la fonction Similarity de PostgreSQL? Y at-il une méthode ou une bibliothèque que je peux utiliser pour produire les résultats similaires à PostgreSQL Similarité fonction?
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,")