Ho un file .scpt di AppleScript, attivato da una combinazione di tasti in FastScripts.app, che funziona come un thesaurus. Lo script cerca la parola selezionata in un elenco preformattato e, se la parola viene trovata in questo elenco, visualizza i sinonimi di questa parola all'utente 1 .
Questo elenco è contenuto in un file di testo normale (.txt). L'elenco è già formattato nel formato AppleScript list
. Vorrei che il mio file .scpt fosse in grado di accettare questo testo come un vero elenco 2 .
È importante notare che il file .txt contiene 2,5 milioni di parole 3 .
Questo è il motivo per cui non sto semplicemente copiando il contenuto del file .txt nel file .scpt stesso, nonostante il fatto che il file di testo sia al 100% statico e non verrà mai modificato. Inserendo il testo direttamente nel mio script porterebbe con sé notevoli ritardi e lentezza mentre modifico e compilo il mio file .scpt in Script Editor.app.
Script Editor.app si bloccava ogni volta che provavo a leggere il file .txt. Il problema è che Script Editor legge nella memoria un determinato file di testo nella sua interezza, invece di eseguire lo streaming dei contenuti in modo più efficiente. Così ho rotto questo file di testo in 10 file di testo più piccoli 4 , ogni nuovo file .txt contenente circa 250.000 parole.
A 250.000 parole, ovviamente, i file di testo sono ancora estremamente grandi (di qualsiasi standard).
Ecco un esempio (severamente condensato) di come appare il contenuto di ciascun file di testo:
{{"exaltation","accolade","adulation","advance","advancement"},{"exalted","winnowing","winsome"},{"exam","audition","blue book","examen","examination","final","examination","test","trial","tripos","viva","written","written examination"},{"examination","Pap test","Socratic method","airing","analysis","anatomic diagnosis","appraisal","work-up","written","written examination"},{"examine","air","analyze","appraise","archetype","asleep","assess","canvass","case"},{"examiner","analyst","analyzer","asker"},{"examining","analytic","examinational","exploratory"},{"example","admonishment","admonition","alarm","archetype"},{"exasperate","bedevil","vex","work up","worry"},{"exasperated","aggravated","amplified","angry","annoyed"},{"exasperating","annoying","bothering","bothersome"}}
Come puoi vedere, il contenuto del file di testo è un elenco nidificato 5 che è organizzato nello stesso modo in cui AppleScript formatta un list
. Ogni file di testo non contiene interruzioni di riga o paragrafi.
Sto cercando un metodo per ottenere questo elenco nel mio AppleScript, con il minimo possibile di latenza 6 . Questo è il motivo per cui l'ho pre-formattato. Quindi, la velocità è la chiave .
Note:
1. Lo script del mio thesaurus è simile alla funzione del thesaurus integrata che esiste in Microsoft Word. Una differenza notevole è che il mio script funziona a livello di sistema.
2. Per true list , voglio dire che posso chiamare, per esempio, item 12
di questa lista più avanti nel mio AppleScript.
3. La mia fonte per i dati del thesaurus è il Thesaurus "Moby" di Grady Ward. Ho trovato questo database da questa risposta: Alla ricerca di dati Thesaurus - Stack Overflow
4. Ho dovuto usare Hex Fiend.app per tagliare il file di testo e incollarlo in un nuovo file di testo. Non ho potuto modificare il file in TextEdit.app, senza che TextEdit si bloccasse su me.
5. L'elenco esterno contiene ogni voce del thesaurus. Gli elenchi interni contengono tutti i sinonimi per quella voce. Il primo elemento di ciascuna lista interna è il titolo della voce. Sia la lista esterna che ogni lista interna sono ordinate alfabeticamente (ad eccezione della prima parola di ogni lista interna, perché, ancora una volta, questa parola è il titolo della voce).
6. Capisco che anche il metodo più veloce avrà ancora diversi secondi di latenza, dal momento che il file di testo è così grande.