Wolfram Language

Text- und Sprachverarbeitung

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.

In[1]:=
Click for copyable input
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.

In[2]:=
Click for copyable input
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.

In[3]:=
Click for copyable input
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.

In[4]:=
Click for copyable input
calc = CloudDeploy[GrammarRules[tokens, Join[defs1, defs2]]];

Evaluieren Sie arithmetische Eingaben in natürlicher Sprache.

In[5]:=
Click for copyable input
GrammarApply[calc, "one + one"]
Out[5]=
In[6]:=
Click for copyable input
GrammarApply[calc, "one + two + three"]
Out[6]=
In[7]:=
Click for copyable input
GrammarApply[calc, "five + seventeen * ten"]
Out[7]=
In[8]:=
Click for copyable input
GrammarApply[calc, "one hundred - one hundredth"]
Out[8]=
In[9]:=
Click for copyable input
GrammarApply[calc, "zero + one/forty-five"]
Out[9]=
In[10]:=
Click for copyable input
GrammarApply[calc, "one/forty-five - one"]
Out[10]=

Verwandte Beispiele

en es fr ja ko pt-br ru zh