2008-10-10 6 views
1

Je souhaite afficher les résultats d'une recherche dans un site Web avec un titre et une courte description. La description courte devrait être une petite partie de la page qui contient le searchterm. Ce que je veux faire est: 1 étiquettes de bande dans la page 2 trouver la première position de seachterm 3 à partir de cette position, en remontant trouver le début (s'il y en a un) de cette phrase. 4 Démarrer à la position trouvée à l'étape 3 et afficher-à-dire 200 caractères à partir de làRechercher le début d'une phrase dans la chaîne

J'ai besoin d'aide à l'étape 3. Je pense que je besoin d'une expression rationnelle qui trouve la première capitale ou dot ...

Répondre

2

Le comme je le ferais est, j'analyser la page ...

  1. Passer sur toutes les choses en commençant par « < »

  2. Lorsque vous rencontrez un « » ou [A-Z], commencez à le mettre dans un tampon jusqu'à ce que vous trouviez un autre "."

  3. Si la chaîne en mémoire tampon a le mot-clé de recherche, c'est votre chaîne! Autre. commencer à tamponner au "." vous avez rencontré et répétez.

EDIT: Comme James Curran a souligné, cette stratégie ne permettrait pas, dans certains cas ... Donc, voici la solution:

Qu'est-ce que vous pouvez faire, est de commencer un nombre X de caractères du début de la page (après les étiquettes)

puis de rechercher votre mot-clé, en tamponnant 2 mots précédents. Lorsque vous le trouvez, faire quelque chose comme ceci: {X} ... {prev-2} {next-2}

Exemple: Cette planète a - ou plutôt eu - un problème qui était cette : la plupart des gens qui y vivaient étaient mécontents pour la plupart du temps. Beaucoup de solutions ont été suggérées pour ce problème, mais la plupart d'entre elles concernaient surtout le mouvement des petits morceaux de papier vert, ce qui était étrange car, globalement, ce n'étaient pas les petits morceaux de papier vert qui étaient malheureux.

Recherche de mots-clés: "suggéré"

Résultat: Cette planète a - ou plutôt eu - un problème ... De nombreuses solutions ont étésuggérépour ce problème ...

5

Même cela échouera finalement. Étant donné la phrase «Nous sommes allés au cabinet du Dr Smith», si votre terme de recherche est «bureau», pratiquement tout critère que vous utiliserez vous donnera le «bureau de Smith» comme phrase.

+0

J'ai posté un léger changement dans la stratégie ... pouvez-vous voir un bug dans celui-là. – Mostlyharmless

1

Pour l'étape 3: Si vous inversez la sous-chaîne qui se termine là où vous voulez chercher en arrière, obtenez la position du premier '.' et soustrayez cette valeur de la position de votre chaîne de recherche.

$offset = stripos(strrev(substr($string, $searchlocation)), '.'); 
$startloc = $searchlocation - $offset; 
$finalstring = substr($string, $startloc, 200); 

Cela peut être désactivé par 1, mais je pense que ça va faire le travail. On dirait qu'il devrait y avoir un moyen plus court de le faire.

+0

James Curran réponse s'applique également ici, cela échouerait toujours pour le bureau du Dr Smith. – acrosman

1

Je pense qu'au lieu d'essayer de trouver des phrases, je penserais à la quantité de contexte autour du terme de recherche dont j'aurais besoin en mots. Puis reculer d'une fraction de ce nombre de mots (ou au début) et transmettre le nombre de mots restant pour sélectionner le reste du contexte. De cette façon, il suffit de diviser le corpus entier sur les espaces, de trouver la première occurence du terme (en utilisant peut-être une correspondance floue pour trouver des sous-termes et tenir compte de la ponctuation) et d'appliquer l'algorithme ci-dessus. Vous pouvez même faire preuve de créativité en introduisant des ellipses si le premier terme non sélectionné ne se termine pas en ponctuation, etc.

Questions connexes