1 votos

Utilice la biblioteca de coincidencia difusa de cadenas de Python para hacer coincidir una cadena entre una lista con 30 valores y un valor dado, y obtener la coincidencia más cercana en la calculador

Estoy tratando de obtener la mejor coincidencia entre diferentes cadenas pero La función está limitada a solo 5 valores para comparar y quiero aumentarla a al menos 30 valores, ¿alguna idea de cómo solucionar esto desde la calculadora de campo de ArcMap?

from fuzzywuzzy import fuzz
from fuzzywuzzy import process
def SetMatchPercenage(query,v1,v2,v3,v4):
    choices = [v1,v2,v3,v4]
    result= process.extractOne(query, choices)
    return result

La salida es la mejor coincidencia de los valores dados como esto

('Barack H Obama', 95)

0voto

Anton8000 Puntos 165

Creo que sería más fácil usar Python y un UpdateCursor en lugar de la calculadora de campos:

introducir descripción de la imagen aquí

Código:

import arcpy
from fuzzywuzzy import fuzz
from fuzzywuzzy import process

feature_class=r'C:\TEST.gdb\Points12345'

fields_to_look_in=['Campo1','Campo2','Campo3','Campo4','Campo5','Campo6'] #ampliar a todos los campos que desee buscar
matchfields=['Coincidencia','Mejor_Coincidencia'] #El primer campo es el que se desea encontrar y el resultado se escribirá en el segundo campo

with arcpy.da.UpdateCursor(feature_class,fields_to_look_in+matchfields) as cursor:
    for row in cursor:
        row[-1]=process.extractOne(row[-2], choices=list(row[:-2]))[0]
        cursor.updateRow(row)

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X