2009-04-13 11 views
2

私は文章を持っています。例えば、文章の単語を合成語句に結合するにはどうすればいいですか?

去年ニューヨークに移りました。

今私は、単一の言葉と私が手に文を分割:

配列( 'ジョンは'、 'DOEは'、 '移動'、 'に'、 '新'、 'ニューヨーク' 、 'last'、 'year')

これはかなり簡単です。しかし、私はすべての構成された用語を得るために単一の言葉を結合したい。構成された用語が意味を成すなら、私はそれらのすべてを手に入れたいと思う。その演算の結果は次のようになります。

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

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

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

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

答えて

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

ありがとうございました!用語を出力とする配列を与える関数。この用語は、部品の数(最初の1語、2語、...)で順序付けされています。完璧! – caw

+0

$ t = count($ array);for($ i = 0; $ i <$ maxTerms; $ i ++){for($ j = 0、$ i1 = $ i + 1、$ ti = $ t - $ i; $ j <$ ti; $ j ++ ){$ termArray [] = array(array_slice($ array、$ j、$ i1)); }} – OIS

+0

申し訳ありません、多分それは愚かな質問ですが、あなたのコードは何ですか、OIS? – caw

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)); 
    } 
} 
関連する問題