区分数学用户输入和所有其他

时间:2013-07-06 00:06:40

标签: php math machine-learning nlp

如何使用机器学习或其他技术来区分数学用户输入和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中执行此操作的最佳方法是什么?

3 个答案:

答案 0 :(得分:1)

Shunting-yard algorithm是解决此问题的好方法。您可以在PHP中找到许多Shunting-yard算法的实现。它只需要一个堆栈和一个队列数据结构来检查表达式是否正确。

答案 1 :(得分:1)

据我了解,OP已经构建了计算器。他不想评估表达式,他只是想知道给定的字符串是否是数学表达式。为什么不尝试机器学习方法?您可以使用一些可接受的数学表达式示例来训练分类器。

您可以使用Wit等在线API尝试此方法。

答案 2 :(得分:0)

最快方式做一点PHP(或JavaScript,就此而言)你描述的类型的“计算器”将是

  1. 验证输入以确保其包含的ONLY字符是十进制数字,括号以及符号+-*/,然后
  2. 将该字符串传递给邪恶的eval函数。
  3. 你会得到一个结果或一个问题。当然,使用eval已知是危险的,大多数人都不会使用它(请参阅文档中的WARNING!)在这种情况下,人们可能会提出“至少如果我确保那里只有数字,parens和运算符,那么我猜eval将是安全的。“

    然而,你甚至不抓住机会是明智的。您应该定义一些算术表达式的语法,然后使用解析器来验证字符串并进行评估。这不是一个微不足道的代码,而是someone has already done this on StackOverflow - 因此请为您的计算器采用该代码。

    滚动你自己的评估者的优势(除了不必向你的朋友解释你使用eval :))是你可以添加自己的操作符,甚至可以用任意精度数学做一些好的技巧。这不仅仅需要五分钟,但这是一项有用的练习。