2009-03-31 5 views
0

Mon site a beaucoup de statistiques dynamiques avec des noms de personnes, des lieux et des sujets qui ont tous leurs propres pages associées. Je souhaite lier automatiquement chacun de ces éléments à leur page en fonction des données que j'ai définies dans une base de données MySQL contenant des mots et des liens.Lier automatiquement des mots-clés dans les textes de la page à partir de la liste des mots

Quel serait un moyen efficace de relier automatiquement 20 à 50 occurrences de 15 à 20 000 mots-clés et liens? J'utilise MySQL et PHP.

Here's a similar query for C++

Répondre

1

Généralement, vous souhaitez effectuer ce type de recherche de liens aussi rarement que possible, car il n'existe aucun moyen particulièrement efficace de le faire. Vous n'avez pas spécifié le type de données que votre site contient, mais je suppose que c'est quelque chose comme un wiki ou un blog. Je vais parler de ce genre de fonctionnalité comme cela serait fait pour un wiki, mais une approche similaire fonctionnerait pour n'importe quoi. Avec un wiki, vous voulez seulement faire la recherche de liens quand une page est changée (ou soumise en premier lieu). Notez qu'il existe deux manières différentes de traiter les liens. Tout d'abord, quand une page est créée ou éditée, vous devez rechercher le texte de cette page pour déterminer quels liens devraient y être. Deuxièmement, chaque fois qu'une page est créée, renommée ou supprimée, vous devez (en plus de la recherche de cette page dans le cas de la création) rechercher toutes les autres pages pour ajouter/mettre à jour/supprimer des liens si nécessaire. Il existe quelques options pour stocker ces liens.

Une option consiste à conserver deux "versions" du texte de chaque page dans la base de données. Une version est la version d'origine "balisage", c'est ce que vous avez réellement entré, et ce qui sera affiché si vous choisissez de modifier la page. La seconde version est la version "display" analysée/traitée. Ce sont les données utilisées pour afficher la page aux visionneuses normales. Par exemple, si votre balisage wiki pour gras est **, la "version de balisage" a **bold text** et la "version d'affichage" a <strong>bold text</strong>. Cela permet de ne pas avoir à traiter votre balisage sur chaque page.

Cette approche est appliquée aux liens de page en faisant une recherche dans le texte soumis pour trouver les mots qui devraient être liés, et en mettant ces liens dans la «version d'affichage». Par exemple, lorsqu'une page est soumise, vous devez parcourir chaque mot du texte de la page et le comparer à une liste de "mots de liaison" (assurez-vous que cette liste est mise en cache, vous ne voulez pas faire de requête de base de données pour chaque mot). Cela peut être rendu assez efficace en stockant les mots de passe potentiels en tant que clés dans un hachage. Si le mot testé se trouve dans la liste "Mot de liaison", vous placez un lien vers la page correspondante autour du mot lorsque vous le copiez dans le texte "Afficher la version". Si ce n'est pas le cas, il vous suffit de mettre le mot, exactement comme dans la "version de balisage".

Il existe quelques autres options sur la façon de mettre en œuvre cela, mais c'est assez simple. Je vais vous laisser avec cela pour l'instant, mais si vous voulez que je décrive l'une des autres options, faites-le moi savoir dans un commentaire et je l'éditerai.

+0

Sonne comme une bonne option je suis intéressé par d'autres que vous pourriez avoir. Si j'ai un csv de mots-clés/liens, comment cela peut-il être transformé en "hash"? Ma principale préoccupation n'était pas de modifier les données d'origine, mais la création de versions alternatives pourrait fonctionner. –

0

PHP wrapper pour le Snowball peut-être?

+0

Je dirais que c'est plus pour avoir des paires de mots ou des similitudes - j'ai déjà une liste de mots définie et j'ai besoin de trouver des occurrences de chacun dans le texte. –

Questions connexes