Wolfram Language

Procesamiento de texto y lenguaje

Cree una calculadora de lenguaje natural

Este ejemplo construye una simple calculadora que toma números en lenguaje natural y da soporte a varios operadores infijos de distinta precedencia relativa.

Use la forma de muestra incorporada "SemanticNumber" y cuatro muestras más personalizadas.

In[1]:=
Click for copyable input
tokens = {GrammarToken["SemanticNumber"], GrammarToken["Summand"], GrammarToken["Multiplicand"], GrammarToken["Addition"], GrammarToken["Multiplication"]};

Un sumando puede ser una expresión de suma completa (para implementar asociatividad), una expresión de multiplicación completa o un número. Un multiplicando puede ser una expresión de multiplicación completa (de nuevo para implementar asociatividad) o un número, pero no una expresión de suma, la cual asigna mayor prioridad a la multiplicación.

In[2]:=
Click for copyable input
defs1 = {"Summand" -> s : (GrammarToken["Addition"] | GrammarToken["Multiplication"] | GrammarToken["SemanticNumber"]) :> s, "Multiplicand" -> m : (GrammarToken["Multiplication"] | GrammarToken["SemanticNumber"]) :> m};

Asocie la muestra de "Addition" a sumas y restas, y la muestra de "Multiplication" a productos y divisiones. Las restas y divisiones no son conmutativas, por lo tanto usted necesita mantener el orden de los términos usando 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};

Implemente el objeto GrammarRules en Wolfram Cloud.

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

Evalúe algunas entradas aritméticas que contenga lenguaje natural.

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

Ejemplos relacionados

de en fr ja ko pt-br ru zh