Caracteres especiales de unaccent y cambio de nombre

Fondo

Tengo un flujo de trabajo que recostack documentos de diversas fonts, los convierte en PDF, los OCR, los comprime, extrae sus contenidos y annotations, los carga en un server y crea las inputs de mysql correspondientes para proporcionar un índice con todas las funciones para mi motor de búsqueda basado en la web.

Para mostrar files PDF en el motor de búsqueda, uso PDF.js de mozilla, que, en algunos casos, no puede cargar documentos con ciertos caracteres en el nombre del file. Estos caracteres críticos incluyen diéresis (Ä, Ö, Ü, ä, ü), corchetes ((), [], {}), acentos franceses (é, è, à) y acentos en español (Ñ, ñ, Ó , ó, Á, á, É, é, Í, í, Ú, ú).

Cada file que se procesa en applescript 'ingresa' a php / mysql usando curl. No sería gran cosa determinar el nuevo nombre de file con PHP, pero tengo problemas para cambiar el nombre de los files que tienen los caracteres mencionados en su nombre de file con AppleScript a un nombre estandarizado.

Pregunta

Me gustaría implementar una function que estandarice los nombres de file que contienen los caracteres especiales mencionados anteriormente usando applescript.

Los siguientes nombres de file deberían convertirse en sus valores correspondientes a la derecha

  • Riñón.pdf -> Rinon.pdf
  • Ergänzung.pdf -> Ergaenzung.pdf
  • Übersicht.pdf -> Uebersicht.pdf
  • Système impérmeable.pdf -> Systeme impermeable.pdf

En resumen, las diéresis alemanas se expanden (como Ä -> Ae, ü -> ue) y todos los demás acentos se convierten en su valor correspondiente 'no acentuado' (como ñ -> n, é -> e) y los corchetes se convierten en espacios ((Ergänzung) .pdf -> Ergaenzung .pdf)

Gracias por cualquier consejo

  • Mostrar files de files ocultos en Finder, excepto .DS_Store
  • AppleScript: ¿Cómo search files en la carpeta para cadena y mostrar resultados en Finder?
  • Páginas arrastradas más grandes que el documento fuente
  • ¿Cómo abro un file desde Spotlight en Finder?
  • Terminal: cómo transferir files por lotes a otras Mac
  • ¿Cómo puedo vaciar la papelera con "rm -rf ~ / .Trash / *" del Finder?
  • Conéctese al server como invitado desde la línea de command
  • ¿Cómo soluciono este problema de carpeta inteligente? Sigue desconectando de "This Mac"
  • 2 Solutions collect form web for “Caracteres especiales de unaccent y cambio de nombre”

    El cambio de nombre de un file en AppleScript se puede realizar a través del Finder:

    tell application "Finder" set the name of file "Monterey" to "Eden" end tell 

    Reducir un nombre de file a az es complicado. Si te sientes cómodo con perl , existe un module ideal llamado Text :: Unidecode . Otros enfoques, como el uso de expresiones regulares, son discutidos por Perl Monks para eliminar los acentos .

    Menciona usar php , por lo que esta pregunta puede proporcionar respuestas más fáciles para integrar en su flujo de trabajo. ¿Cómo elimino los acentos de los caracteres en una cadena de PHP? La respuesta más votada sugiere:

     function stripAccents($stripAccents){ return strtr($stripAccents,'àáâãäçèéêëìíîïñòóôõöùúûüýÿÀÁÂÃÄÇÈÉÊËÌÍÎÏÑÒÓÔÕÖÙÚÛÜÝ','aaaaaceeeeiiiinooooouuuuyyAAAAACEEEEIIIINOOOOOUUUUY'); } 

    He encontrado una solución yo mismo y me gustaría compartir el resultado contigo: construí una especie de function torpe que busca y reemplaza los caracteres no deseados si aparecen en la cadena (desafortunadamente AppleScript devuelve malos resultados si el hallazgo y reemploop no encuentra una ocurrencia.

    Editar: Como he encontrado que los caracteres de corchetes no son críticos, su transformación se excluye del script pegado a continuación. Por lo tanto, las agujas dadas en la parte inferior de la function UnAccentString() deben ajustarse, si los corchetes también deben replacese.

    La function findAndReplace() es cortesía de MacScripter , gracias.

    Tenga en count que el order de los reemploops dentro de la function UnAccentString() es crucial. Cuando coloca la transformación 'Ü' por encima de 'ü', obtendrá malos resultados. Curiosamente, OS X parece considerar un 'ü' como válido cuando se busca 'Ü', pero ni viceversa ni con otras * diéresis. No tengo idea de por qué sucede esto, pero funciona con este order:

     on UnAccentString(TheString) if TheString contains "ü" then set TheString to findAndReplace("ü", "Ue", TheString) end if if TheString contains "ä" then set TheString to findAndReplace("ä", "ae", TheString) end if if TheString contains "ö" then set TheString to findAndReplace("ö", "oe", TheString) end if if TheString contains "Ü" then set TheString to findAndReplace("Ü", "Ue", TheString) end if if TheString contains "Ä" then set TheString to findAndReplace("Ä", "Ae", TheString) end if if TheString contains "Ö" then set TheString to findAndReplace("Ö", "Oe", TheString) end if if TheString contains "é" then set TheString to findAndReplace("é", "e", TheString) end if if TheString contains "è" then set TheString to findAndReplace("è", "e", TheString) end if if TheString contains "à" then set TheString to findAndReplace("à", "a", TheString) end if if TheString contains "ó" then set TheString to findAndReplace("ó", "o", TheString) end if if TheString contains "á" then set TheString to findAndReplace("á", "a", TheString) end if if TheString contains "ú" then set TheString to findAndReplace("ú", "u", TheString) end if if TheString contains "í" then set TheString to findAndReplace("í", "i", TheString) end if if TheString contains "Á" then set TheString to findAndReplace("Á", "A", TheString) end if if TheString contains "É" then set TheString to findAndReplace("É", "E", TheString) end if if TheString contains "Í" then set TheString to findAndReplace("Í", "I", TheString) end if if TheString contains "Ó" then set TheString to findAndReplace("Ó", "O", TheString) end if if TheString contains "Ú" then set TheString to findAndReplace("Ú", "U", TheString) end if if TheString contains "ñ" then set TheString to findAndReplace("ñ", "n", TheString) end if if TheString contains "Ñ" then set TheString to findAndReplace("Ñ", "N", TheString) end if if TheString contains "ê" then set TheString to findAndReplace("ê", "e", TheString) end if if TheString contains "Ê" then set TheString to findAndReplace("Ê", "E", TheString) end if if TheString contains "ë" then set TheString to findAndReplace("ë", "e", TheString) end if if TheString contains "Ë" then set TheString to findAndReplace("Ë", "E", TheString) end if if TheString contains "È" then set TheString to findAndReplace("È", "E", TheString) end if if TheString contains ":" then set TheString to findAndReplace(":", "", TheString) end if if TheString contains "," then set TheString to findAndReplace(",", "", TheString) end if if TheString contains " " then set TheString to findAndReplace(" ", "-", TheString) end if if TheString contains "%" then set TheString to findAndReplace("%", "", TheString) end if if TheString contains "'" then set TheString to findAndReplace("'", "", TheString) end if return TheString & ".pdf" as text end UnAccentString on findAndReplace(tofind, toreplace, TheString) set ditd to text item delimiters set res to missing value set text item delimiters to tofind repeat with tis in text items of TheString if res is missing value then set res to tis else set res to res & toreplace & tis end if end repeat set text item delimiters to ditd return res end findAndReplace 

    Por lo tanto, llamando a la function con la siguiente cadena:

     return UnAccentString("Übersetzungen im alltäglichen Leben eines Riñóns und eines Négligée à Noël") as text 

    regresará

     Uebersetzungen-im-alltaeglichen-Leben-eines-Rinons-und-eines-Negligee-a-Noel 

    Esta es una list de todos los personajes que busca la function y sus contrapartes respectivas con las que están siendo reemplazados:

    • Ü -> Ue
    • Ä -> Ae
    • Ö -> Oe
    • ü -> Ue
    • ä -> ae
    • ö -> oe
    • é -> e
    • è -> e
    • à -> a
    • ó -> o
    • á -> a
    • ú -> u
    • í -> i
    • Á -> A
    • É -> E
    • Í -> I
    • Ó -> O
    • Ú -> U
    • ñ -> n
    • Ñ ​​-> N
    • ê -> e
    • Ê -> E
    • ë -> e
    • Ë -> E
    • È -> E
    • : -> (nulo)
    • , -> (nulo)
    • (espacio) -> –
    • % -> (nulo)
    • '-> (nulo)

    Espero que eso ayude a cualquiera. Saludos, nic.

    Loving Apple Products like poisoning (iPhone, iPad, iMac, Macbook, iWatch).