首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >区分数学用户输入和其他所有输入

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

Stack Overflow用户
提问于 2013-07-06 08:06:40
回答 3查看 97关注 0票数 0

在PHP中,如何使用机器学习或其他技术来区分什么是数学用户输入,什么不是数学用户输入?

所谓数学用户输入,我指的是可以计算/求解的数学语句。

因此,我构建了一个可以在PHP中处理基本算术的计算器。在传递用户输入之前,我要检查它是否是可以计算的数学语句。如果不是,则使用echo "can not be computed";

所以在伪码/半码中:

代码语言:javascript
运行
复制
function isComputable($input){
    /* code I need help with here */
}
$userInput = $_GET['input'];
if(isComputable($userInput){
    compute($userInput);
}
else{
    echo "can not be computed";
}

用PHP做这件事最好的方法是什么?

EN

回答 3

Stack Overflow用户

发布于 2013-07-06 09:15:04

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

票数 1
EN

Stack Overflow用户

发布于 2013-07-09 23:47:48

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

您可以使用像Wit这样的在线应用程序接口来尝试这种方法。

票数 1
EN

Stack Overflow用户

发布于 2013-07-06 08:33:58

做一个你所描述的类型的PHP (或者JavaScript )“计算器”的最快的方法是

  1. 验证输入以确保其中只包含十进制数字、圆括号以及符号+-*/,然后
  2. 将该字符串传递给邪恶的eval函数。

你要么得到一个结果,要么得到一个问题。当然,使用eval是很危险的,大多数人都不会使用它(参见文档中的WARNING!)在这种情况下,人们可能会提出这样的论点:“至少如果我确保那里只有数字、括号和运算符,那么我猜eval将是安全的。”

然而,明智的做法是甚至不要冒险。您应该定义一些算术表达式的语法,然后使用解析器来验证字符串并进行计算。这不是一段微不足道的代码,而是someone has already done this on Stack Overflow --所以在计算器中采用该代码。

使用自己的计算器(除了不必向朋友解释您使用了eval :)的好处是,您可以添加自己的运算符,甚至可以使用任意精度的数学实现一些很好的技巧。这不是只需要五分钟的事情,但它是一个有用的练习。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17498318

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档