2009-04-13 18 views
2

J'ai une phrase, par exempleComment combiner les mots d'une phrase à des termes composés?

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' , 'last', 'year')

C'est assez facile. Mais ensuite je veux combiner les mots simples pour obtenir tous les termes composés. Ce n'est pas le cas si les termes composés ont du sens, je veux les 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 déplacé à ...

Le les mots doivent être composés de termes à une limite de k parties. Dans l'exemple ci-dessus, la limite est 3. Un terme peut donc contenir au maximum 3 mots.

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

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

Répondre

2

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 le souhaitez vos expressions d'être, et de 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));
+0

Merci beaucoup! Une fonction qui donne un tableau avec les termes en sortie. Les termes sont même classés par le nombre de parties (1 premier mot, puis 2 mots, ...). Parfait! – caw

+0

$ t = nombre ($ tableau); pour ($ i = 0; $ i <$ maxTerms; $ i ++) {pour ($ j = 0, $ i1 = $ i + 1, $ ti = $ t - $ i; $ j <$ ti; $ j ++) {$ termArray [] = array (array_slice ($ tableau, $ j, $ i1)); }} – OIS

+0

Désolé, c'est peut-être une question stupide, mais que fait votre code, OIS? – caw

4

Chaque composition sera définie par un point de départ et une longueur - juste en 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)); 
    } 
} 
Questions connexes