Frage

Ich habe einen Satz, zum Beispiel

  

John Doe zog im vergangenen Jahr nach New York.

Nun teile ich den Satz in die einzelnen Worte und ich:

  

array ( 'John', 'Doe', 'bewegte', 'auf', 'New', "York 'letzte', 'Jahr')

Das ist ganz einfach. Aber dann mag ich die einzelne Worte verein alle zusammengesetzte Bedingungen zu erhalten. Es ist nicht, wenn die zusammengesetzte Begriffe Sinn machen, will ich sie alle bekommen, though. Das Ergebnis dieser Operation soll wie folgt aussehen:

  

John, Doe, John Doe, bewegt, Doe bewegt, John Doe bewegt, zu, zog nach, Doe bewegt ...

Die Worte sollten Begriffe zu einer Grenze von k Teilen zusammengesetzt sein. In dem obigen Beispiel ist die Grenze 3. So ein Begriff 3 Worte höchstens enthalten kann.

Das Problem: Wie kann ich die Zusammensetzung in PHP-Code? Es wäre toll, wenn ich eine Funktion habe, die einen Satz als Eingang erhält und gibt einen Array mit allen Bedingungen als die Ausgabe.

Ich hoffe, dass Sie mir helfen können. Vielen Dank im Voraus!

War es hilfreich?

Lösung

Wenn Sie bereits den Code haben für die Worte in ein Array aufteilen, wird diese Funktion können Sie wählen, die am längsten Sie Ihre Sätze zu sein, und kehren Sie ein Array von Arrays Ihre Phrasen enthält.

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));

Andere Tipps

Jede Zusammensetzung wird durch einen Startpunkt und eine Länge definiert werden. - nur eine Schleife durch

PHP werden Sie nicht den ganzen Weg helfen, aber es einige praktische Funktionen hat.

$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));
   }
}
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top