Question

J'essaie de comprendre la stratégie ou l'idée de créer des cartes spatiales de mots-clés ou de balises apparentés / communs. En utilisant SO comme exemple; si vous allez sur https://stackoverflow.com/tags et tapez " python " vous obtiendrez toutes les balises contenant ce mot, mais pas de balises étroitement liées (WSGI, App Engine de Google, voler, etc.).

Conformément à ma question, comment pourriez-vous créer une carte spatiale pouvant être interrogée afin de rechercher des balises / mots-clés étroitement apparentés à partir de la recherche, classés par leur poids? Mais alors, comment enregistrer le poids de tag foo dans un nombre potentiellement plus important de tags tout en maintenant le système réactif?

J'ai déjà regardé cette conférence Google Tech de David Weinberger, une excellente conversation technologique qui m'a fait réfléchir. http: // vidéo. google.com/videoplay?docid=2159021324062223592&ei=qseASZvgI6e4qAP91a2PDg&q=google+tech+talk

Était-ce utile?

La solution

Vérifiez les concepts de regroupement dans la & "Programmation de l'intelligence collective" de O'Reilly & / a>.

Autres conseils

Il semble que le moyen le plus probable de construire les données concernant de telles relations serait de cataloguer les balises apparaissant ensemble le plus souvent, tout en apparaissant avec le moins grand nombre d’autres balises.

C’est-à-dire & c; c ++ " et " stl " apparaissent souvent ensemble et " stl " rarement (?) apparaît sans " c ++ " ;, alors ils sont liés (dans au moins une direction). " c ++ " et " algorithme " apparaissent également ensemble beaucoup, mais ils apparaissent séparés encore plus souvent, donc ils ne sont pas liés.

En réfléchissant à la manière dont les données pourraient être structurées, une de mes idées pourrait être un système à quatre tables. une table serait constituée de données source (avec SO, il doit exister une sorte de table de questions), qui est jointe à une table de balises, puis à une table de pondération de balises qui rejoint la table de balises.

#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      
    }

Je n’ai aucune idée de l’efficacité de cette structure, mais j’imagine que c’est une chose sur laquelle il faut travailler. Sinon, pour que cela fonctionne, les nouvelles entrées dans les données source pourraient déclencher un déclencheur après la mise à jour ou laisser un processus de travail en arrière-plan rééquilibrer les poids à des heures prédéfinies.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top