Wolfram Language

Traitement de texte et de langues

Créez un calculateur de langage naturel

Cet exemple construit une calculateur simple qui prend des nombres en langage naturel et prend en charge plusieurs opérateurs infixes de différente priorité relative.

Utilisez la forme d'unité intégrée "SemanticNumber" et quatre unités supplémentaires personnalisées.

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 de somme, 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'unité "Addition" à des sommes et des restes, et l'unité "Multiplication" aux produits et aux divisions. Les restes et les divisions ne sont pas commutatives, et donc 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 en 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