質問

私は文を持って、例えば

  

ジョン・ドウは、昨年ニューヨークに移動します。

今、私は一つの単語に文を分割し、私が手に:

  

配列( 'ジョン'、 'Doeが'、 'に'、 '移動' '新'、 'ニューヨーク'、 '最後'、 '年')

これは非常に簡単です。しかし、私は、すべての構成条件を得るために、単一の単語を組み合わせたいです。合成条件が意味をなすかどうかは、私はしかし、それらのすべてを取得する必要はありません。その演算の結果は次のようになります:

  

ジョン、ドウ、ジョン・ドウは、移動、Doeがに移動し、に、DOEは

...に移動し、ジョン・ドウが移動し、移動しました

の単語は、k個の部品の限界条件に構成されるべきです。上記の例では、限界がそうという用語は、最大で3つのワードを含むことができる3である。

問題:どのように私はPHPで組成物をコーディングだろうか?私は、入力として文を取得し、出力としてすべての条件を持つ配列を与える機能を持っていた場合、それは素晴らしいことだ。

私はあなたが私を助けることができると思います。事前に感謝します!

役に立ちましたか?

解決

あなたは既に配列に単語を分割するためのコードをお持ちの場合は、

、この機能は、あなたがあること、そしてあなたにあなたのフレーズを含む配列の配列を返すために、あなたのフレーズを希望最長を選択できます。

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

他のヒント

すべての組成物は、始点と長さによって定義される - を介してだけループ

PHPはあなたにすべての方法を助けにはなりませんが、それはいくつかの便利な機能を持っています。

$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));
   }
}
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top