Ein Rechner, der natürliche Sprache versteht
In diesem Beispiel wird ein einfacher Rechner erstellt, der Zahlen in natürlicher englischer Sprache verarbeitet und Infix-Operatoren unterschiedlicher relativer Rangfolge unterstützt.
Verwenden Sie den integrierten Token "SemanticNumber" und vier weitere benutzerdefinierte Tokens.
![Click for copyable input](assets.de/create-a-natural-language-calculator/In_113.png)
tokens = {GrammarToken["SemanticNumber"], GrammarToken["Summand"],
GrammarToken["Multiplicand"], GrammarToken["Addition"],
GrammarToken["Multiplication"]};
Ein Summand kann ein vollständiger Additionsausdruck (um Assoziativität festzulegen), ein vollständiger Multiplikationsausdruck oder eine Zahl sein. Ein Multiplikand kann ein vollständiger Multiplikationsausdruck (um erneut Assoziativität festzulegen) oder eine Zahl sein, jedoch kein Additionsausdruck. Somit hat Multiplikation Vorrang vor Addition.
![Click for copyable input](assets.de/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};
Assoziieren Sie den "Addition"-Token mit Summen und Restbeträgen, und den "Multiplication"-Token mit Produkten und Divisionen. Rest und Division sind nicht kommutative, daher müssen Sie die Reihenfolge der Terme mit FixedOrder bewahren.
![Click for copyable input](assets.de/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};
Stellen Sie das GrammarRules-Objekt in der Wolfram Cloud bereit.
![Click for copyable input](assets.de/create-a-natural-language-calculator/In_116.png)
calc = CloudDeploy[GrammarRules[tokens, Join[defs1, defs2]]];
Evaluieren Sie arithmetische Eingaben in natürlicher Sprache.
![Click for copyable input](assets.de/create-a-natural-language-calculator/In_117.png)
GrammarApply[calc, "one + one"]
![](assets.de/create-a-natural-language-calculator/O_75.png)
![Click for copyable input](assets.de/create-a-natural-language-calculator/In_118.png)
GrammarApply[calc, "one + two + three"]
![](assets.de/create-a-natural-language-calculator/O_76.png)
![Click for copyable input](assets.de/create-a-natural-language-calculator/In_119.png)
GrammarApply[calc, "five + seventeen * ten"]
![](assets.de/create-a-natural-language-calculator/O_77.png)
![Click for copyable input](assets.de/create-a-natural-language-calculator/In_120.png)
GrammarApply[calc, "one hundred - one hundredth"]
![](assets.de/create-a-natural-language-calculator/O_78.png)
![Click for copyable input](assets.de/create-a-natural-language-calculator/In_121.png)
GrammarApply[calc, "zero + one/forty-five"]
![](assets.de/create-a-natural-language-calculator/O_79.png)
![Click for copyable input](assets.de/create-a-natural-language-calculator/In_122.png)
GrammarApply[calc, "one/forty-five - one"]
![](assets.de/create-a-natural-language-calculator/O_80.png)