Domanda

Sto cercando di capire la strategia o l'idea di costruire mappe spaziali di parole chiave o tag correlati / comuni. Utilizzando SO come esempio; se vai su https://stackoverflow.com/tags e digiti " python " otterrai tutti i tag che contengono quella parola, ma nessun tag che potrebbe essere strettamente correlato (WSGI, Google App Engine, volare, ecc.)

In linea con la mia domanda, come hai potuto costruire una mappa spaziale che potesse essere interrogata per trovare tag / parole chiave strettamente correlati dalla ricerca, ordinati in base al loro peso? Ma come memorizzare il peso del tag foo su un numero potenzialmente maggiore di tag e mantenere il sistema reattivo?

Ho già visto questo discorso tecnico su Google di David Weinberger che è un grande discorso tecnico che mi ha fatto riflettere. http: // video. google.com/videoplay?docid=2159021324062223592&ei=qseASZvgI6e4qAP91a2PDg&q=google+tech+talk

Altri suggerimenti

Sembra che il modo più probabile per costruire i dati relativi a tali relazioni sarebbe quello di catalogare i tag che appaiono insieme più spesso, mentre appaiono insieme al minor numero di altri tag.

Cioè, " c ++ " e " stl " appaiono molto insieme e " stl " raramente (?) appare senza " c ++ " ;, quindi sono correlati (in almeno una direzione). & Quot; c ++ quot &; e " algoritmo " appaiono anche insieme molto, ma appaiono separati anche più spesso, quindi non sono correlati.

Nel pensare a come i dati potrebbero essere strutturati, un'idea che ho avuto potrebbe essere un sistema a quattro tabelle. una tabella sarebbe costituita da dati di origine (ad es. con SO deve esserci una sorta di tabella delle domande), che viene unita a una tabella di tag e quindi a una tabella di peso tag che si ricollega alla tabella di tag.

#pseudo code
     source table {
     id: int
     source_data: text   
     }

     source_tag table {
        source_id: int
        tag_id: int
     }

     tag table{
      id: int
      tag: String(30)
     }

    tag_weight table {
        base_tag_id: int
        weight: float( 0-10 or 100 ) or int ( count of mutual occurrence )
        source_tag_id: int      
    }

Non ho idea di quanto sia efficiente questa struttura, ma suppongo che sia qualcosa su cui lavorare. Altrimenti per farlo funzionare, le nuove ammissioni ai dati di origine potrebbero generare un trigger dopo l'aggiornamento o avere un processo di lavoro in background per riequilibrare i pesi in tempi prestabiliti.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top