Compara secuencias en Python usando el módulo dfflib

El módulo Python de dfflib incluye varias funciones para evaluar la comparación de secuencias, se puede usar para comparar archivos y puede crear información sobre variaciones de archivos en diferentes formatos, incluidos HTML y contexto y diferencias unificadas.

contiene varias clases para realizar varias comparaciones entre secuencias:

Coincidencia de secuencia de clase

Es una clase muy flexible para hacer coincidir pares de secuencias de cualquier tipo. Esta clase contiene varias funciones que se analizan a continuación:

  • El método ratio() de esta clase devuelve la relación de similitud entre los dos argumentos pasados. La relación de similitud se determina utilizando la siguiente fórmula.

2*X/Y 

Donde X es el número de coincidencias similares y 

Y es el total de elementos presentes en ambas secuencias.

Ejemplo 1:

Python3

# import required module
import difflib
  
# assign parameters
par1 = ['g', 'f', 'g']
par2 = 'gfg'
  
# compare
print(difflib.SequenceMatcher(None, par1, par2).ratio())

Producción:

1.0

Ejemplo 2:

Python3

# import required module
import difflib
  
# assign parameters
par1 = 'Geeks for geeks!'
par2 = 'geeks'
  
# compare
print(difflib.SequenceMatcher(None, par1, par2).ratio())

Producción:

0.47619047619047616

Ejemplo 3:

Python3

# import required module
import difflib
  
# assign parameters
par1 = 'gfg'
par2 = 'GFG'
  
# compare
print(difflib.SequenceMatcher(None, par1, par2).ratio())

Producción:

0.0
  • El método get_matching_blocks() de esta clase devuelve una lista de tripletas que describen subsecuencias coincidentes. Cada triple tiene la forma (i, j, n), y significa que a[i:i+n] == b[j:j+n] .

Ejemplo 1:

Python3

# import required module
import difflib
  
# assign parameters
par1 = 'Geeks for geeks!'
par2 = 'geeks'
  
# compare
matches = difflib.SequenceMatcher(
    None, par1, par2).get_matching_blocks()
  
for ele in matches:
    print(par1[ele.a:ele.a + ele.size])

Producción:

geeks

Ejemplo 2:

Python3

# import required module
import difflib
  
# assign parameters
par1 = 'GFG'
par2 = 'gfg'
  
# compare
matches = difflib.SequenceMatcher(
    None, par1, par2).get_matching_blocks()
  
for ele in matches:
    print(par1[ele.a:ele.a + ele.size])

Producción:

 

Como no hay subsecuencias coincidentes entre GFG y gfg. Por lo tanto, no se muestra ninguna salida.

  • Método get_close_matches(): este método devuelve el mejor carácter o grupo de columnas de coincidencias de caracteres. El término es una secuencia en la que se necesitan similitudes cercanas (generalmente una string) y las posibilidades son un conjunto de secuencias para términos coincidentes (principalmente una lista de strings).

Ejemplo :

Python3

# import required module
import difflib
  
# assign parameters
string = "Geeks4geeks"
listOfStrings = ["for", "Gks", "G4g", "geeks"]
  
# find common strings
print(difflib.get_close_matches(string, listOfStrings))

Producción:

['geeks']

Clase diferente

Esta clase se utiliza para hacer coincidir secuencias en forma de líneas de texto y crear variaciones o deltas legibles por humanos. Cada línea del delta Differ comienza con un código de dos letras:

Código Sentido
‘-‘ línea única para la secuencia 1
‘+’ línea única para la secuencia 2
‘ ‘ línea común a ambas secuencias
‘? ‘ la línea no está presente en ninguna secuencia de entrada

Las siguientes son las funciones contenidas dentro de esta clase:

    Ejemplo 1:

    Python3

    # import required module
    from difflib import Differ
      
    # assign parameters
    par1 = 'Geeks'
    par2 = 'geeks!'
      
    # compare parameters
    for ele in Differ().compare(par1, par2):
        print(ele)
    

    Producción:

    - G
    + g
      e
      e
      k
      s
    + !

    Ejemplo 2:

    Python3

    # import required module
    from difflib import Differ
      
    # assign parameters
    par1 = ['Geeks','for','geeks!']
    par2 = 'geeks!'
      
    # compare parameters
    for ele in Differ().compare(par1, par2):
        print(ele)
    

    Producción:

    - G
    + g
      e
      e
      k
      s
    + !
    • método ndiff(): ,comparado

    Ejemplo 1:

    Python3

    # import required module
    import difflib
      
    # assign parameters
    par1 = 'Geeks'
    par2 = 'geeks!'
      
    # compare parameters
    for ele in difflib.ndiff(par1, par2):
        print(ele)
    

    Producción:

    - G
    + g
      e
      e
      k
      s
    + !

    Ejemplo 2:

    Python3

    # import required module
    import difflib
      
    # assign parameters
    par1 = ['Geeks','for','geeks!']
    par2 = 'geeks!'
      
    # compare parameters
    for ele in difflib.ndiff(par1, par2):
        print(ele)
    

    Producción:

    - Geeks
    - for
    - geeks!
    + g
    + e
    + e
    + k
    + s
    + !
    • Método context_diff(): las diferencias de contexto son una forma conveniente de mostrar solo las líneas que se han desplazado, con unas pocas líneas de contexto. Las mejoras se ven en el estilo antes/después. El número de líneas de fondo se establece en n, que se establece en tres de forma predeterminada.

    Ejemplo 1:

    Python3

    # import required module
    import difflib
      
    # assign parameters
    par1 = 'Geeks'
    par2 = 'geeks!'
      
    # compare parameters
    for ele in difflib.context_diff(par1, par2):
        print(ele)
    

    Producción:

    *** 

    — 

    ***************

    *** 1,5 ****

    ! GRAMO

      mi

      mi

      k

      s

    — 1,6 —-

    ! gramo

      mi

      mi

      k

      s

    + !

    Ejemplo 2:

    Python3

    # import required module
    import difflib
      
    # assign parameters
    par1 = ['Geeks', 'for', 'geeks!']
    par2 = 'geeks!'
      
    # compare parameters
    for ele in difflib.context_diff(par1, par2):
        print(ele)
    

    Producción:

    *** 

    — 

    ***************

    *** 1,3 ****

    ! Frikis

    ! por

    ! frikis!

    — 1,6 —-

    ! gramo

    ! mi

    ! mi

    ! k

    ! s

    ! !

    Publicación traducida automáticamente

    Artículo escrito por riturajsaha 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 *