Comment combiner les mots d'une phrase à des peines composées?
-
09-09-2019 - |
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!
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));
}
}