Wie Wörter eines Satzes zu bestehen Begriffe kombinieren?
-
09-09-2019 - |
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!
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));
}
}