Abbiamo un database di script televisivi e vorremmo cercarlo, ottenendo risultati mentre scriviamo.
Spesso ricordiamo parole o frammenti di dialogo, ma non ricordo esattamente cosa è stato detto o quale episodio è stato detto in: "Qual è stato l'episodio in cui George va contro il suo istinto e si avvicina alla ragazza al ristorante e racconta lei è disoccupata? "
Con questo strumento devi digitare "George disoccupato" e il risultato con il contesto (e probabilmente altri hit) apparirebbe:
EPISODE: "The Opposite"
George : Excuse me, I couldn't help but notice that you were looking in my direction.
Victoria : Oh, yes I was, you just ordered the same exact lunch as me.
( G takes a deep breath )
George : My name is George. I'm unemployed and I live with my parents.
Victoria : I'm Victoria. Hi.
La mia domanda riguarda il modo migliore di progettare una struttura dati per implementare questo tipo di ricerca?
La mia idea finora è di memorizzare una tabella di ricerca in un archivio dati in memoria come redis. Per creare il tavolo, prima darei ad ogni script (episodio) un id, e quindi analizzerei lo script in linee basate sulla persona che parla. Quindi un particolare elemento di dialogo potrebbe trovarsi con un ID episodio associato a un identificativo di riga.
Successivamente elaborerei ogni riga, creando una struttura dati indicizzata da tutte le parole che appaiono in qualsiasi script e memorizzando la posizione dell'episodio / linea di ogni istanza in cui è stata usata la parola.
apple -> [
{ scriptid: 9, lines: [11,99] },
{ scriptid: 21, lines: [103,211,214] }
]
orange -> [
{ scriptid: 2, lines: [101] }
]
Potremmo accoppiare questa struttura di dati con un semplice algoritmo di punteggio, in modo che quando un utente cerca più parole, mostriamo solo le corrispondenze in cui entrambe le parole si verificano nello stesso script e danno un rango più elevato alle posizioni in cui appaiono le parole più vicini l'uno all'altro.
Ci sono altri dettagli che, idealmente, verrebbero presi in considerazione, come ad esempio l'abbinamento di plurali e parole mispelle.
È un approccio ragionevole? Come si potrebbe migliorare? Quali altri dettagli dovrei prendere in considerazione?