从公式创建模板
template-from-equation的Python项目详细描述
公式模板
此库提供从关联公式(例如2+5->;n0+n1)创建模板(生成模板)的功能。
术语“等式模板”首先在Kushman等人(2014)中引入。它代表了方程组的抽象。它的概念随后被用于许多后续工作中。我们发现了一个工具来创建这样的模板,这个工具很有用,但并不公开。所以我们试着写了一篇文章,并在自然语言处理的自动数学解题领域与同龄人分享。
生成的模板将包含“n0,n1,n2,…”(数字)和“x0,x1,x2,…”(变量)。 例如:
- 2+5->;n0+n1
- 2+5*60/x=y->;n0+n1*n2/x0=x1
在某些情况下,我们希望保持方程中的一些常数不变。例如,要获取问题“2小时7分钟是多少分钟?”的公式“2+7*60=x”的模板。,我们想保持恒定的“60”不变。在这种情况下,我们的函数允许传递一个数字槽,该槽只包含我们要替换模板的数字。(参见下面的示例用法)。
为了根据公式制作模板,我们使用ast树。当遍历ast树时,它返回“n0,n1,n2,…”作为数字的叶节点,返回“x0,x1,x2”作为变量。然后,一个“2+5*x”的方程可以转化为它的模板“n0+n1*x0”。(使用AST树可以帮助我们避免正则表达式中一些微妙的字符串匹配困难。)
安装
pip install template_from_equation
用法
>>>fromtemplate_from_equationimportEquation>>>eq1=Equation("2+5")>>>eq12+5>>>eq1.get_template()'n0 + n1'>>>eq2=Equation("2+7*60 = x")>>>eq22+7*60=x>>>eq2.get_template()'n0 + n1 * n2 = x0'>>>eq2.get_template(num_slot=[2,7])'n0 + n1 * 60 = x0'>>>eq3=Equation("2*x+5*12 = y")>>>eq3.get_template()'n0 * x0 + n1 * n2 = x1'>>>eq3.get_template(num_slot=[2,5])'n0 * x0 + n1 * 12 = x1'
待办事项
- []选择共享重复号码的代币,即2+5*2->;n0+n1*n0
- []解析运算符“^”
参考文献
- Kushman, Nate, et al. "Learning to automatically solve algebra word problems." Proceedings of the 52nd Annual Meeting of the Association for Computational Linguistics (Volume 1: Long Papers). Vol. 1. 2014.
- codegen:一些命名样式(而不是代码)改编自codegen,codegen是一个将ast树转换为python代码的库
许可证
这个项目是根据麻省理工学院的许可条款授权的。