3

Recherche:et recherche Parsing Le formatage

script + Langue + Web Pages Applications

Résultats:

... langage de script à l'origine ... la production dynamique pages Web. Il a ... graphiques applications .... but langage de script qui est ... d créant des pages Web en sortie ...

Supposons que je veux une valeur qui représente le montant de caractères pour permettre le rembourrage de chaque côté des termes adaptés, et une autre valeur qui représente le nombre de matchs sera affiché dans le résultat (c.-à-je veux voir seulement les 5 premiers matches, rien de plus).

Comment exactement allez-vous faire?

C'est assez agnostique langue, mais je vais mettre en œuvre la solution dans un environnement PHP, s'il vous plaît limiter les réponses aux options qui ne nécessitent pas une langue ou d'un cadre spécifique.

Voici mon processus de réflexion: créer un tableau à partir des mots de recherche. Déterminer quel mot de recherche a l'indice le plus bas en ce qui concerne où il se trouve dans le corps de l'article. Rassemblez cette partie du corps dans une autre variable, puis supprimez cette section de l'article-corps. Revenez à l'étape 1. Vous pourriez même ajouter un compteur à chaque mot, en le sautant quand le compteur atteint 3 ou plus.

Important:

La solution doit correspondre à tous les termes de recherche d'une manière non linéaire. C'est-à-dire, le terme un devrait être trouvé après le terme deux s'il existe après le terme deux. De même, il devrait être trouvé après le terme 3 aussi bien. Le terme 3 devrait être trouvé avant les termes 1 et 2, s'il se trouve avant eux.

La solution devrait me permettre de déclarer « seulement permettre jusqu'à trois matches pour chaque trimestre, puis congédie un résumé. »

Extra Credit:

Obtenez la variable de rembourrage pour éventuellement des mots de pad, plutôt que de caractères.

+0

Est-ce que la position position moyenne de position mot/terme ou caractère ? – KenE

+0

strpos() obtient l'indice du premier caractère. – Sampson

Répondre

-1

Personnellement, je convertir les termes de recherche dans les expressions régulières, puis utiliser un Regex-Remplacer pour Find envelopper les matchs dans les balises solides pour la mise en forme.

Très probablement la route RegEx serait vous meilleur pari. Ainsi, dans votre exemple, vous obtiendrez trois valeurs RegEx distinctes.

Puisque vous voulez une solution non dépendante de la langue que je ne mettre les expressions réelles ici que la syntaxe exacte varie selon les langues.

1

Mon processus de pensée:

  1. Créer un tableau de résultats qui prend en charge les paires nom/valeur non uniques (PHP supporte ceci dans son objet standard array)
  2. boucle à travers chaque terme de recherche et trouver son départ de caractère position dans le champ de recherche
  3. Ajouter un élément au tableau de résultats contenant cette position de caractère que vous venez de trouver avec le terme de recherche actuel comme clé
  4. Une fois que vous avez trouvé tous les termes recherchés, triez le tableau en ordre croissant valeur (la position de caractère du terme de recherche)
  5. maintenant, les résultats de la recherche seront pour qu'ils ont été trouvés dans le texte de recherche
  6. boucle le tableau de résultats et d'utiliser le rembourrage de mot spécifié pour obtenir les mots de chaque côté du terme de recherche tout en gardant une trace du nombre de mots dans un nom/valeur distincte paire

pseudocode, ou ma meilleure tentative il:

function string GetSearchExcerpt(searchText, searchTerms, wordPadding = 0, searchLimit = 3) 
{ 
    results = new array() 
    startIndex = 0 
    foreach (searchTerm in searchTerms) 
    { 
    charIndex = searchText.FindByIndex(searchTerms, startIndex) // finds 1st position of searchTerm starting at startIndex 
    results.Add(searchTerm, charIndex) 
    startIndex = charIndex + 1 
    } 
    results = results.SortByValue() 
    lastSearchTerm = "" 
    searchTermCount = new array() 
    outputText = "" 
    foreach (searchTerm => charIndex in results) 
    { 
    searchTermCount[searchTerm]++ 
    if (searchTermCount[searchTerm] <= searchLimit) 
    { 
     // WordPadding is a simple function that moves left or right a given number of words starting at a specified character index and returns those words 
     outputText += "..." + WordPadding(-wordPadding, charIndex) + "<strong>" + searchTerm + "</strong>" + WordPadding(wordPadding, charIndex) 
    } 
    } 

    return outputText 
}