2017-01-10 3 views
0

私は2つのステートメントを持っています。PHP preg_replaceが別の値を返す

1)のように。 2)キングのような布を着用します。

両方のステートメントで、同じ単語の意味が異なります。だから私は関数を記述したい、最初の文を渡すと 'a'が返される&私は2番目のステートメントを渡した後、 'b'を返すべきです。 preg_replaceよう

function chkStatement($stmt) { 
     //function body 
    } 
    chkStatement('I like an apple'); 
chkStatement('I like Mango'); 
chkStatement('I fly in air like a bird'); 

おかげ

+0

1)最初の文を渡すとどういう意味がありますか?ステートメントを分離するものは何ですか? –

+0

この文章のように= **私は車** –

+0

のように毎回別の文字列を送信しますし、どのようにchkStatementメソッド呼び出しの発生をカウントするのですか?まず最初に、正規表現は必要ありません...文字列にlikeかどうかの単語が含まれているかどうかを見ることができます.2番目に、メソッドが呼び出された回数を数えるためにグローバル変数が必要です... –

答えて

0

シンプルなPHP関数を使用すると、単語が使用される文脈に基づいて、異なる値を返すことができません。

あなたは自然言語処理の広大な宇宙を調べたいと思うでしょう。がんばろう!

+0

もっと詳しく教えてもらえますか?あるいは、私に例を挙げてください。 –

+0

1)鳥のように、私は飛びたい2)私は車が好きです。あなたは1)のために返すものと2)のために返すものは何ですか?両方のために、同じような位置は同じですが、コンテキストはそうではありません...今、どのようにコンテキストを検出しますか?自然な言語処理が必要です。 –

+0

@Maverick_Mrtその問題を解決してくれてありがとう –

0

Marc-Antoineが正しい場合、likeを動詞として識別する唯一の方法はNLPです。

我々はこの十分を簡素化する場合は、あなたは言葉like前に、IYouWe、またはTheyをチェックすることができます。あなたはそれが実際に動詞かどうかをチェックすることはなく、例外がたくさんあるはずです。

function chkStatement($stmt) { 
    if (preg_match('/\b(?:(I|You|We|They)\s+)?like\b/i', $stmt, $matches)) { 
     if (isset($matches[1])) return "a"; 
     return "b"; 
    } else { 
     return false; 
    } 
} 

echo chkStatement('I like an apple'); 
echo chkStatement('I like Mango'); 
echo chkStatement('I fly in air like a bird'); 
echo chkStatement('Something else');