Prime idee
La struttura di base è una semplice tabella di ricerca {word, synonym}
. Fino a te decidere se si tratta di una relazione bidirezionale (meno dati nel tuo dizionario) o meno (più accurata).
Tuttavia, questo spesso non è sufficiente, poiché i sinonimi adatti dipendono dal contesto: un sinonimo di "particella" potrebbe essere "polvere" in un linguaggio comune, ma "elettrone" o "protone" in un contesto scientifico. Quindi la struttura di base potrebbe essere migliorata a {word, synonym, context-key-word}
Il problema qui è che dovresti inserire dei sinonimi per ogni possibile forma di una parola (ad esempio {"particle", "dust"},{"particles","dust"},{"particle","electron"},{"particles","electrons"}
)
Proprietà linguistiche di una parola
prendi un verbo come {"buy", "purchase"}. Un verbo può avere diverse forme (acquisto, acquisto, acquisto): così gestirai separatamente il sinonimo per ogni modulo o li raggrupperai? Lo stesso per sostantivi e aggettivi (singolare, plurale). Solo le preposizioni e gli avverbi hanno una singola forma.
Quindi potresti optare per una doppia struttura, con da un lato le diverse parole, raggruppate secondo una forma primaria e le sue variazioni grammaticali, e dall'altra i sinonimi per la forma primaria.
Dizionario di tutti i token di lingua:
{ infinitive_verb, past_simple, past participle }
{ singular_noun, plural_noun}
{ singular_adjective, plural_adjective }
{ preposition }
{ adverb }
Sinonimi:
{ type_of_token, primary_form, primary_form_of_synonym, context }
Quindi nel contesto "scienza", i sinonimi di "elettroni" dovrebbero prima passare attraverso il dizionario dei token di lingua e trovare il nome {"electron","electrons"}
di corrispondenza per il plurale. Quindi cerca il sinonimo e trova {"electron","particle","science"}
e {"electron","dust","-"}
e sceglie il primo. Ma dato che è un plurale, cercherebbe di {"particle", "particles"}
e creerà "particelle".
Fino a te per vedere se l'analisi contestuale potrebbe essere un vantaggio, o se ti piacerebbe mostrare tutti i sinonimi e solo menzionare il contesto speciale speciale se ce ne sono alcuni.
E devi gestire l'ambiguità: potresti trovare nomi e verbi con lo stesso modulo, per esempio.
Il database
Potresti usare molto bene un DB relazionale tradizionale. Il dizionario può essere memorizzato in più tabelle (ciascuna con la struttura appropriata) e i sinonimi in un'unica tabella. Vantaggio: è possibile cercare su qualsiasi colonna in modo molto efficiente.
Un altro approccio potrebbe utilizzare una base NoSQL . Se fosse utilizzato un DB di documenti, è possibile memorizzare i dati quasi come descritto sopra. Se si opta per un archivio di valori chiave, è necessario suddividere la parte del dizionario in coppie. In definitiva, memorizzando più dati. La forma più semplice da gestire sarebbe certamente un DB grafico, in cui è possibile navigare tra le relazioni tra le parole
Altri pensieri
Se guardi i verbi, la maggior parte dei verbi ha un radicale, al quale potresti aggiungere "ing" o "ed" per trovare le altre forme. Solo poche centinaia di persone hanno bisogno delle forme alternative complete in quanto non sono prevedibili (dal punto di vista del database).
Ovviamente potresti approfittare di tali regole per ridurre considerevolmente la dimensione del tuo database. Ma renderebbe anche il processo di ricerca più complesso come si farebbe per preprocessare le parole (ad esempio "parcheggio") per vedere se corrispondono ad alcune regole (es. "-Ing") e in quale parte del dizionario si dovrebbe guardare (ad es. verbo regolare "park"? e sostantivo "parking").