2

たとえば、私は文を持っています

John Doe は昨年、ニューヨークに引っ越しました。

ここで、文を単一の単語に分割すると、次のようになります。

array('John', 'Doe', 'moved', 'to', 'New', 'York', 'last', 'year')

それはとても簡単です。しかし、その後、単一の単語を組み合わせて、構成されたすべての用語を取得したいと考えています。構成された用語が意味をなさない場合はそうではありませんが、それらすべてを取得したいと考えています。その操作の結果は次のようになります。

ジョン、ドウ、ジョン・ドウ、引っ越し、ドウが引っ越し、ジョン・ドウが引っ越し、に引っ越し、ドウが引っ越し...

単語は、k 個の部分に制限される用語に構成する必要があります。上記の例では、制限は 3 です。したがって、用語には最大で 3 つの単語を含めることができます。

問題: コンポジションを PHP でコーディングするにはどうすればよいでしょうか? 入力として文を取得し、出力としてすべての用語を含む配列を与える関数があれば、それは素晴らしいことです。

あなたが私を助けてくれることを願っています。前もって感謝します!

4

2 に答える 2

4

すべての構成は、開始点と長さによって定義されます - ループするだけです。

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));
   }
}
于 2009-04-13T00:26:03.883 に答える
2

単語を配列に分割するコードが既にある場合、この関数を使用すると、フレーズを長くしたい部分を選択して、フレーズを含む配列の配列を返すことができます。

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));
于 2009-04-13T00:41:07.370 に答える