0

機械学習またはその他の手法を使用して、PHP で数学的なユーザー入力とそうでないものを区別するにはどうすればよいですか?

数学的なユーザー入力とは、計算/解決できる数学的なステートメントを意味します。

そこで、基本的な算術演算を PHP で処理できる電卓を作成しました。前に、計算可能な数式であるかどうかを確認したいユーザー入力を渡します。そうでない場合は、echo "can not be computed";

したがって、擬似コード/セミコードでは:

function isComputable($input){
    /* code I need help with here */
}
$userInput = $_GET['input'];
if(isComputable($userInput){
    compute($userInput);
}
else{
    echo "can not be computed";
}

PHPでこれを行う最良の方法は何ですか?

4

3 に答える 3

1

私が理解している限り、OPはすでに電卓を構築しています。彼は式を評価したくはありません。指定された文字列が数式であるかどうかを知りたいだけです。機械学習のアプローチを試してみませんか? 許容される数式の例をいくつか使用して、分類子をトレーニングできます。

Witなどのオンライン API を使用して、このアプローチを試すことができます。

于 2013-07-09T15:47:47.807 に答える
0

あなたが説明するタイプの小さなPHP(またはJavaScript、さらに言えば)「電卓」を実行する最も簡単な方法は

  1. 入力を検証して、含まれている唯一の文字が 10 進数、括弧、および記号+-*、および/であることを確認します。
  2. その文字列を邪悪な関数に渡しevalます。

結果が出るか、問題が発生するかのどちらかです。もちろん、使用evalは危険であることが知られており、ほとんどの人は使用しません (ドキュメントのWARNINGを参照してください!) この場合、おそらく、「少なくとも数字、括弧、と演算子があれば、eval は安全だと思います。」

ただし、チャンスを逃さない方が賢明です。算術式の文法を少し定義してから、パーサーを使用して文字列を検証し、評価を行う必要があります。これは些細な量のコードではありませんが、誰かが Stack Overflow で既にこれを行っているので、そのコードを電卓に採用してください。

独自のエバリュエーターをローリングする利点 (使用したことを友人に説明する必要evalがないことに加えて:)) は、独自の演算子を追加できることと、任意精度の数学でいくつかの優れたトリックを実行できることです。たった5分でできるものではありませんが、役に立つエクササイズです。

于 2013-07-06T00:33:58.037 に答える