Question

J'ai une phrase, par exemple

  

John Doe a déménagé à New York l'année dernière.

Maintenant, je diviser la phrase en mots simples et je reçois:

  tableau

( 'John', 'Doe', 'déplacé', 'à', 'Nouveau', 'York', 'dernier', 'année')

C'est assez facile. Mais alors je veux combiner les mots simples pour obtenir tous les termes composés. Il n'a pas si les termes de sens composées, je veux obtenir tous, cependant. Le résultat de cette opération devrait ressembler à ceci:

  

John Doe, John Doe, déplacé, Doe déplacé, John Doe déplacé, à, a déménagé à Doe a déménagé à ...

Les mots doivent être composés à des conditions à une limite de k parties. Dans l'exemple ci-dessus, la limite est fixée à 3. Ainsi, un terme peut contenir 3 mots au maximum.

Le problème: Comment pourrais-je coder la composition en PHP? Ce serait génial si j'avais une fonction qui obtient une phrase que l'entrée et donne un tableau avec tous les termes que la sortie.

J'espère que vous pouvez me aider. Merci d'avance!

Était-ce utile?

La solution

Si vous avez déjà le code pour diviser les mots dans un tableau, cette fonction vous permet de sélectionner la plus longue que vous souhaitez que vos phrases soient, et revenir à vous un tableau de tableaux contenant vos phrases.

function getPhrases($array, $maxTerms = 3) {
    for($i=0; $i < $maxTerms; $i++) { //Until we've generated terms of all lengths
         for($j = 0; $j < (sizeof($array) - $i); $j++) { //Until we've iterated as far through the array as we should go
             $termArray[] = array(array_slice($array, $j, ($i+1))); //Add this part of the array to the array
         }
    }
    return $termArray;
}

//Usage example

$newarray = explode(" ", "This is a pretty long example sentence");
print_r(getPhrases($newarray));

Autres conseils

Chaque composition sera définie par un point de départ et une longueur -. Juste à travers la boucle

PHP ne vous aidera pas tout le chemin, mais il a quelques fonctions pratiques.

$words = explode(" ", $sentence);
for ($start = 0; $start < count($words); $start++) //starting point
{
   //try all possible lengths
   //limit = max length
   //and of course it can't overflow the string
   for ($len = 1; $len <= $limit && $len <= count($words)-$start; $len++)
   {
      //array_slice gets a chunk of the array, and implode joins it w/ spaces
      $compositions[] = implode(" ", array_slice($words, $start, $len));
   }
}
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top