Créez une calculatrice en langage naturel
Cet exemple construit une calculatrice simple qui prend des nombres en langage naturel et prend en charge plusieurs opérateurs infixes de différentes priorités relatives.
Utilisez la forme d'élément intégré "SemanticNumber" et quatre éléments supplémentaires personnalisés.
![Click for copyable input](assets.fr/create-a-natural-language-calculator/In_113.png)
tokens = {GrammarToken["SemanticNumber"], GrammarToken["Summand"],
GrammarToken["Multiplicand"], GrammarToken["Addition"],
GrammarToken["Multiplication"]};
Une opérande de somme peut être une expression de somme complète (pour mettre en œuvre l'associativité), une expression de multiplication complète ou un nombre. Un multiplicande peut être une expression de multiplication complète (encore une fois pour mettre en œuvre l'associativité) ou un nombre, mais non une expression d'addition qui attribue une priorité plus élevée à la multiplication.
![Click for copyable input](assets.fr/create-a-natural-language-calculator/In_114.png)
defs1 = {"Summand" ->
s : (GrammarToken["Addition"] | GrammarToken["Multiplication"] |
GrammarToken["SemanticNumber"]) :> s,
"Multiplicand" ->
m : (GrammarToken["Multiplication"] |
GrammarToken["SemanticNumber"]) :> m};
Associez l'élément "Addition" à des sommes et des restes, et l'élément "Multiplication" aux produits et aux divisions. Les restes et les divisions ne sont pas commutatives, par conséquent, vous devez garder l'ordre des termes en utilisant FixedOrder.
![Click for copyable input](assets.fr/create-a-natural-language-calculator/In_115.png)
defs2 = {
"Addition" ->
FixedOrder[a : GrammarToken["Summand"], "+",
b : GrammarToken["Summand"]] :> a + b,
"Addition" ->
FixedOrder[a : GrammarToken["Summand"], "-",
b : GrammarToken["Summand"]] :> a - b,
"Multiplication" ->
FixedOrder[a : GrammarToken["Multiplicand"], "*",
b : GrammarToken["Multiplicand"]] :> a*b,
"Multiplication" ->
FixedOrder[a : GrammarToken["Multiplicand"], "/",
b : GrammarToken["Multiplicand"]] :> a/b};
Déployez l'objet GrammarRules dans Wolfram Cloud.
![Click for copyable input](assets.fr/create-a-natural-language-calculator/In_116.png)
calc = CloudDeploy[GrammarRules[tokens, Join[defs1, defs2]]];
Évaluez certaines entrées arithmétiques contenant du langage naturel.
![Click for copyable input](assets.fr/create-a-natural-language-calculator/In_117.png)
GrammarApply[calc, "one + one"]
![](assets.fr/create-a-natural-language-calculator/O_75.png)
![Click for copyable input](assets.fr/create-a-natural-language-calculator/In_118.png)
GrammarApply[calc, "one + two + three"]
![](assets.fr/create-a-natural-language-calculator/O_76.png)
![Click for copyable input](assets.fr/create-a-natural-language-calculator/In_119.png)
GrammarApply[calc, "five + seventeen * ten"]
![](assets.fr/create-a-natural-language-calculator/O_77.png)
![Click for copyable input](assets.fr/create-a-natural-language-calculator/In_120.png)
GrammarApply[calc, "one hundred - one hundredth"]
![](assets.fr/create-a-natural-language-calculator/O_78.png)
![Click for copyable input](assets.fr/create-a-natural-language-calculator/In_121.png)
GrammarApply[calc, "zero + one/forty-five"]
![](assets.fr/create-a-natural-language-calculator/O_79.png)
![Click for copyable input](assets.fr/create-a-natural-language-calculator/In_122.png)
GrammarApply[calc, "one/forty-five - one"]
![](assets.fr/create-a-natural-language-calculator/O_80.png)