Tengo un archivo .scpt de AppleScript, activado por una combinación de teclas en FastScripts.app, que funciona como un tesauro. El script busca la palabra seleccionada en una lista preformateada y, si la palabra se encuentra en esta lista, muestra los sinónimos de esta palabra al usuario 1 .
Esta lista está contenida en un archivo de texto plano (.txt). La lista ya está formateada en el formato AppleScript list
. Me gustaría que mi archivo .scpt pueda aceptar este texto como una lista verdadera 2 .
Es importante tener en cuenta que el archivo .txt contiene 2.5 millones de palabras 3 .
Es por esto que no estoy simplemente copiando el contenido del archivo .txt en el propio archivo .scpt, a pesar de que el archivo de texto es 100% estático y nunca se modificará. Insertar el texto directamente en mi script traería consigo un considerable retraso y lentitud a medida que edito y compilo mi archivo .scpt en Script Editor.app.
Script Editor.app se congeló cada vez que intentaba leer el archivo .txt. El problema es que el Editor de secuencias de comandos lee en la memoria un archivo de texto determinado en su totalidad, en lugar de transmitir los contenidos de una manera más eficiente. Entonces, dividí este archivo de texto en 10 archivos de texto más pequeños 4 , y cada nuevo archivo .txt contiene aproximadamente 250,000 palabras.
Por supuesto, con 250,000 palabras, los archivos de texto aún son extremadamente grandes (según cualquier estándar).
Aquí hay un ejemplo (muy condensado) de cómo se ve el contenido de cada archivo de texto:
{{"exaltación", "elogio", "adulación", "avance", "avance"}, {"exaltado", "avivando", "winsome"}, {"examen", "audición", " libro azul "," examen "," examen "," final "," examen "," prueba "," juicio "," tripos "," viva "," escrito "," examen escrito "}, {" examen " , "Prueba de Papanicolaou", "Método socrático", "Transferencia", "Análisis", "Diagnóstico anatómico", "Evaluación", "Elaboración", "Escrito", "Examen escrito"}, {"Examinar", " aire "," analizar "," evaluar "," arquetipo "," dormido "," evaluar "," examinar "," caso "}, {" examinador "," analista "," analizador "," interrogador "}, {"Examinando", "Analítico", "Examinador", "Exploratorio"}, {"Ejemplo", "Amonestación", "Advertencia", "Alarma", "Arquetipo"}, {"Exasperate", "Bedevil", " vex "," trabajar "," preocuparse "}, {" exasperado "," agravado "," amplificado "," enojado "," molesto "}, {" exasperante "," molesto "," molestar "," molesto "}}
Como puede ver, el contenido del archivo de texto es una lista anidada 5 que está organizada de la misma manera que AppleScript formatea a list
. Cada archivo de texto no contiene saltos de línea ni párrafos.
Estoy buscando un método para incluir esta lista en mi AppleScript, con la menor latencia posible 6 . Por eso lo preformateé. Entonces, la velocidad es clave .
Footnotes:
1. El script de mi tesauro es similar a la característica de tesauro incorporada que existe en Microsoft Word. Una diferencia notable es que mi script funciona en todo el sistema.
2. Por true list , quiero decir que puedo llamar, por ejemplo, item 12
de esta lista más adelante en mi AppleScript.
3. Mi fuente para los datos del tesauro es el Tesauro "Moby" de Grady Ward. Encontré esta base de datos en esta respuesta: Buscando datos del tesauro - Desbordamiento de pila
4. Tuve que usar Hex Fiend.app para cortar el archivo de texto y pegarlo en un nuevo archivo de texto. No pude editar el archivo en TextEdit.app, sin que TextEdit se congele.
5. La lista externa contiene cada entrada del tesauro. Las listas internas contienen todos los sinónimos de esa entrada. El primer elemento de cada lista interna es el título de la entrada. Tanto la lista externa como cada lista interna están ordenadas alfabéticamente (con la excepción de la primera palabra de cada lista interna porque, nuevamente, esta palabra es el título de la entrada).
6. Comprendo que incluso el método más rápido tendrá varios segundos de latencia, ya que el archivo de texto es muy grande.