Biblioteca de Python FuzzyWuzzy

Hay muchos métodos para comparar strings en python. Algunos de los principales métodos son:

  1. Usando expresiones regulares
  2. comparación sencilla
  3. Usando difflib

Pero uno de los métodos más fáciles es usar la biblioteca fuzzywuzzy donde podemos tener una puntuación de 100, que indica que dos strings son iguales al proporcionar un índice de similitud. Este artículo habla sobre cómo comenzamos a usar la biblioteca fuzzywuzzy.

FuzzyWuzzy es una biblioteca de Python que se utiliza para la coincidencia de strings. La coincidencia de strings aproximadas es el proceso de encontrar strings que coincidan con un patrón determinado. Básicamente utiliza la distancia de Levenshtein para calcular las diferencias entre secuencias.
FuzzyWuzzy ha sido desarrollado y de código abierto por SeatGeek, un servicio para encontrar entradas para eventos deportivos y conciertos. Su caso de uso original, como se discute en su blog.

    Requisitos de fuzzywuzzy

  • Python 2.4 o superior
  • python-Levenshtein

Instalar a través de pip:

pip install fuzzywuzzy
pip install python-Levenshtein

¿Cómo utilizar esta biblioteca?

Primero de importar estos módulos,

from fuzzywuzzy import fuzz
from fuzzywuzzy import process

Uso de proporción simple:

fuzz.ratio('geeksforgeeks', 'geeksgeeks')
87
  
# Exact match
fuzz.ratio('GeeksforGeeks', 'GeeksforGeeks')  
  
100
fuzz.ratio('geeks for geeks', 'Geeks For Geeks ') 
80
fuzz.partial_ratio("geeks for geeks", "geeks for geeks!")
100
# Exclamation mark in second string, 
but still partially words are same so score comes 100
  
fuzz.partial_ratio("geeks for geeks", "geeks geeks")
64
# score is less because there is a extra 
token in the middle middle of the string.

Ahora, relación de conjunto de fichas y relación de clasificación de fichas:

# Token Sort Ratio
fuzz.token_sort_ratio("geeks for geeks", "for geeks geeks")
100
  
# This gives 100 as every word is same, irrespective of the position 
  
# Token Set Ratio
fuzz.token_sort_ratio("geeks for geeks", "geeks for for geeks")
88
 fuzz.token_set_ratio("geeks for geeks", "geeks for for geeks")
100
# Score comes 100 in second case because token_set_ratio 
considers duplicate words as a single word.

Ahora supongamos que tenemos una lista de opciones y queremos encontrar la(s) coincidencia(s) más cercana(s), podemos usar el módulo de proceso

query = 'geeks for geeks'
choices = ['geek for geek', 'geek geek', 'g. for geeks'] 
   
# Get a list of matches ordered by score, default limit to 5
process.extract(query, choices)
[('geeks geeks', 95), ('g. for geeks', 95), ('geek for geek', 93)]
   
# If we want only the top one
process.extractOne(query, choices)
('geeks geeks', 95)

También hay una relación más que se usa a menudo llamada WRatio , a veces es mejor usar WRatio en lugar de una relación simple, ya que WRatio maneja mayúsculas y minúsculas y también algunos otros parámetros.

fuzz.WRatio('geeks for geeks', 'Geeks For Geeks')
100
fuzz.WRatio('geeks for geeks!!!','geeks for geeks')
100
# whereas simple ratio will give for above case
fuzz.ratio('geeks for geeks!!!','geeks for geeks')
91

Código completo

# Python code showing all the ratios together, 
# make sure you have installed fuzzywuzzy module
  
from fuzzywuzzy import fuzz
from fuzzywuzzy import process
  
s1 = "I love GeeksforGeeks"
s2 = "I am loving GeeksforGeeks"
print "FuzzyWuzzy Ratio: ", fuzz.ratio(s1, s2)
print "FuzzyWuzzy PartialRatio: ", fuzz.partial_ratio(s1, s2)
print "FuzzyWuzzy TokenSortRatio: ", fuzz.token_sort_ratio(s1, s2)
print "FuzzyWuzzy TokenSetRatio: ", fuzz.token_set_ratio(s1, s2)
print "FuzzyWuzzy WRatio: ", fuzz.WRatio(s1, s2),'\n\n'
  
# for process library,
query = 'geeks for geeks'
choices = ['geek for geek', 'geek geek', 'g. for geeks'] 
print "List of ratios: "
print process.extract(query, choices), '\n'
print "Best among the above list: ",process.extractOne(query, choices)

Producción:

FuzzyWuzzy Ratio:  84
FuzzyWuzzy PartialRatio:  85
FuzzyWuzzy TokenSortRatio:  84
FuzzyWuzzy TokenSetRatio:  86
FuzzyWuzzy WRatio:  84 


List of ratios: 
[('g. for geeks', 95), ('geek for geek', 93), ('geek geek', 86)] 

Best among the above list:  ('g. for geeks', 95)

La biblioteca FuzzyWuzzy está construida sobre la biblioteca difflib, python-Levenshtein se usa para la velocidad. Por lo tanto, es una de las mejores formas de hacer coincidir strings en python.

Publicación traducida automáticamente

Artículo escrito por Shantanu Sharma. y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *