Creazione di una ricerca rapida e in tempo reale per gli script televisivi

1

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?

    
posta Jonah 08.08.2014 - 05:32
fonte

2 risposte

1

Vorrei utilizzare un motore di ricerca, ad es. ElasticSearch , che ha già tutto ciò di cui hai bisogno. Si prende cura della struttura dei dati, della memorizzazione, ecc. In modo che tu possa concentrarti su cosa filtrare la ricerca e restituire i risultati, ad esempio eliminare alcune parole (proposizioni, ecc.), Correggere le parole errate, dare una spinta ad alcuni risultati, ecc. il problema avrebbe bisogno di una discussione separata su come risolverlo. Ma la configurazione predefinita dovrebbe essere sufficiente per iniziare.

    
risposta data 10.08.2014 - 00:43
fonte
0

Che tipo di database stai usando? e quale linguaggio di programmazione? Personalmente, usando una configurazione PHP e MySQL, conterrebbe gli script come una matrice prima divulgarli e inserirli nella tabella. Quindi suddividerei la ricerca dell'utente in una matrice anche in base agli spazi. Quindi, vorrei utilizzare la query SELECT * FROM 'table' WHERE 'column'.contains('array[0], array[1]')

Spero che questo abbia senso e fornisca una risposta valida, e se non spero ti dia un "punto di partenza" in quanto tale:)

    
risposta data 10.08.2014 - 00:29
fonte

Leggi altre domande sui tag