Wolfram Language

Traitement de texte et de langues

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.

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

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

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};

Déployez l'objet GrammarRules dans Wolfram Cloud.

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

Évaluez certaines entrées arithmétiques contenant du langage naturel.

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]=

Exemples connexes

de en es ja ko pt-br ru zh