Jellyfish y la distancia entre textos

| Última modificación: 12 de abril de 2024 | Tiempo de Lectura: 3 minutos
Premios Blog KeepCoding 2025

Business Intelligence & Big Data Advisor & Coordinadora del Bootcamp en Data Science, Big Data & Machine Learning.

En este artículo te hablaremos de la relación que existe entre Jellyfish y la distancia entre textos.

Jellyfish es una librería que contiene funciones para cálculo de similitud entre textos. Dicha similitud puede ser a nivel lexicográfico (strings) o a nivel fonético.

Algoritmos relacionados con Jellyfish y la distancia entre textos

Algoritmos de comparación de strings

  • Levenshtein distance.
  • Damerau – Levenshtein distance.
  • Jaro distance.
  • Jaro – Winkler distance.
  • Match rating approach comparison.
  • Hamming distance.

Algoritmos de encoding fonético

  • American soundex.
  • Metaphone.
  • NYSIIS (New York State Identification and Intelligence System).
  • Match rating codex.

Funcionamiento de Jellyfish y la distancia entre textos

#Jellyfish y la distancia entre textos
! pip instal jellyfish
import jellyfish
Jellyfish y la distancia entre textos

Distancia Levenshtein

Esta es la distancia de edición en la que las operaciones permitidas son la inserción, eliminación y sustitución.

#Jellyfish y la distancia entre textos
jellyfish.levenshtein_distance ('Cisne negro', 'Cisne negro')

0

jellyfish.levenshtein_distance ('Cisne negro', 'Cisne negor')

2 (dos transmutaciones)

#Jellyfish y la distancia entre textos
jellyfish.levenshtein_distance ('Cisne negro', 'Cisne nego')

1

jellyfish.levenshtein_distance ('Cisnee negro', 'Cisne nego')

2

#Jellyfish y la distancia entre textos
jellyfish.levenshtein_distance ('Cisneee negro', 'Cisne nego')

3

Distancia Damerau – Levenshtein

Distancia de edición en la que las operaciones permitidas son la inserción, la eliminación y la transposición de 2 caracteres adyacentes.

#Jellyfish y la distancia entre textos
jellyfish.damerau_levenshtein_distance ('Cisne negro', 'Cisne negro')

0

jellyfish.damerau_levenshtein_distance ('Cisne negro', 'Cisne negor')

1

#Jellyfish y la distancia entre textos
jellyfish.damerau_levenshtein_distance ('Cisne negro', 'Cisne nego')

1

jellyfish.damerau_levenshtein_distance ('Cisnee negro', 'Cisne nego')

2

#Jellyfish y la distancia entre textos
jellyfish.damerau_levenshtein_distance ('Cisneee negro', 'Cisne nego')

3

Jaro distance

Distancia de edición en la que la operación permitida es la transposición. El resultado son probabilidades:

#Jellyfish y la distancia entre textos
jellyfish.jaro_distance ('Cisne negro', 'Cisne negro')

0.9696969696969697

jellyfish.damerau_levenshtein_distance ('Cisnee negro', 'Cisne nego')

0.9111111111111111

#Jellyfish y la distancia entre textos
jellyfish.damerau_levenshtein_distance ('Cisneee negro', 'Cisne nego')

0.8897435897435897

Phonetic matching

El algoritmo metaphone permite codificar fonéticamente palabras en inglés en 16 posibles sonidos.

Jellyfish y la distancia entre textos

Vamos a crear una serie de datos de nombres de chicas y chicos:

boy_names = [  ]
girl_names = [  ]

with open ('./datsets/boys.txt', 'r', encoding = 'utf - 8') as f:
         boy_names += [l.strip () for l in f]

with open ('./datsets/girls.txt', 'r', encoding = 'utf - 8') as f:
         girl_names += [l.strip () for l in f]
boy_names [:10]

[‘Liam’,

‘Noah’,

‘William’,

‘James’,

‘Logan’,

‘Benjamin’,

‘Mason’,

‘Elijah’,

‘Oliver’,

‘Jacob’]

girl_names [:10]

[‘Emma’,

‘Olivia’,

‘Ava’,

‘Isabella’,

‘Sophia’,

‘Mia’,

‘Charlotte’,

‘Amelia’,

‘Evelyn’,

‘Abigail’]

Vamos a juntarlos todos:

names = boy_names + girl_names

Con la librería de Jellyfish, obtendremos la representación fonética a través del uso de metaphone:

metaphone = [jellyfish.metaphone (n) for n in names]
import numpy as np
from operator import itemgetter
print ('{0 : 10} {1 : 10}'.format ('Name', 'Metaphone representation'))
for i in np.random.choice (len (names), 10):
      print ('{0 : 10} {1 : 10}'.format (names [i], metaphone [i]))
NameMetaphone representation
KoaK
CasenKSN
AdelaideATLT
DominikTMNK
TessaTS
KimoraKMR
BrodyBRT
JulianaJLN
JuliaJL
JessieJS

A partir de esta representación fonética podemos establecer la distancia que hay entre un nombre y otro:

def phon_distance_all (dataset, candidate, distance, phon):
       ' ' ' Phonetich distance to all the names in the list ' ' '
      return {dataset [i]: distance (phon [i], phon [candidate]) for i in range (len (dataset))}
name = names [1000]
print (name)

Emma

#Buscamos los más cercanos
dall = phon_distance_all (names, 1000, jellyfish.levenshtein_distance, metaphone)

sorted (dall.items (), key = itemgetter (1), reverse = False) [:50]

[(‘Emma’, 0),

(‘Emmy’, 0),

(‘Emmie’, 0),

(‘Liam’, 1),

(‘Eli’, 1),

(‘Emmet’, 1),

(‘Emilio’, 1),

(‘Romeo’, 1),

(‘Remy’, 1),

(‘Jaime’, 1),

(‘Emmitt’, 1),

(‘Sam’, 1),

(‘Jimmy’, 1),

(‘Eddie’, 1),

(‘Tommy’, 1),

(‘Chaim’, 1),

(‘Jamie’, 1),

(‘Emery’, 1),

(‘Emory’, 1),

(‘Emmet’, 2),

(‘Mia’, 1),

(‘Emily’, 1),

(‘Ella’, 1),

(‘Ellie’, 1),

(‘Naomi’, 1),

(‘Eva’, 1),

(‘Emilia’, 1),

(‘Amy’, 1),

(‘Remi’, 1),

(‘Gemma’, 1),

(‘Evie’, 1),

(‘Elle’, 1),

(‘Emely’, 1),

(‘Eve’, 1),

(‘Demi’, 1),

(‘Maia’, 1),

(‘Emelia’, 1),

(‘Esme’, 1),

(‘Jemma’, 1),

(‘Mae’, 1),

(‘Emerie’, 1),

(‘Noemi’, 1),

(‘Miah’, 1),

(‘Emilee’, 1),

(‘Amia’, 1),

(‘Noah’, 2),

(‘William’, 2),

(‘James’, 2),

(‘Elijah’, 2),

(‘Ethan’, 2),]

Vemos que las representaciones fonéticas que más se parecen son Emma, Emmy y Emmie, cuya distancia es de 0.

¿Quieres seguir avanzando?

Ya sabes cómo funciona Jellyfish y la distancia entre textos, por lo que es la hora de aprender más sobre el Big Data, una de las áreas laborales con mejores salarios y mayor demanda. Por eso, no te pierdas el Big Data, Inteligencia Artificial & Machine Learning Full Stack Bootcamp. Con esta formación intensiva adquirirás los conocimientos teóricos y prácticos imprescindibles para abrirte paso en el mundillo en pocos meses. ¡Da el paso para impulsar tu carrera y entra ahora para pedir más información!

Noticias recientes del mundo tech

¡CONVOCATORIA ABIERTA!

Big Data & Data Science

Full Stack Bootcamp

Clases en Directo | Acceso a +600 empresas | 98% de empleabilidad

Descárgate también el informe de tendencias en el mercado laboral 2026.

Fórmate con planes adaptados a tus objetivos y logra resultados en tiempo récord.
KeepCoding Bootcamps
Resumen de privacidad

Esta web utiliza cookies para que podamos ofrecerte la mejor experiencia de usuario posible. La información de las cookies se almacena en tu navegador y realiza funciones tales como reconocerte cuando vuelves a nuestra web o ayudar a nuestro equipo a comprender qué secciones de la web encuentras más interesantes y útiles.