자연 언어 계산기 만들기
이 예제는 자연 언어로 숫자를 받아들이고, 상대적 우선 순위를 포함하여 다른 몇몇의 연산자를 지원하는 간단한 계산기를 작성합니다.
빌트인 토큰 "SemanticNumber" 형식과 네개의 사용자 정의 토큰을 사용합니다.
In[1]:=
tokens = {GrammarToken["SemanticNumber"], GrammarToken["Summand"],
GrammarToken["Multiplicand"], GrammarToken["Addition"],
GrammarToken["Multiplication"]};
피가수는 전체 덧셈식 (결합 법칙으로 구현), 전체 곱셈식 혹은 숫자로 표현 가능합니다. 피승수는 전체 곱셈식 (결합 법칙으로 구현) 또는 숫자로 표현할 수 있지만, 곱셈보다 우위성이 높은 덧셈식을 사용할 수 없습니다.
In[2]:=
defs1 = {"Summand" ->
s : (GrammarToken["Addition"] | GrammarToken["Multiplication"] |
GrammarToken["SemanticNumber"]) :> s,
"Multiplicand" ->
m : (GrammarToken["Multiplication"] |
GrammarToken["SemanticNumber"]) :> m};
"Addition" 토큰을 합과 나머지, 그리고 "Multiplication" 토큰은 곱과 나눗셈과 연관합니다. 나머지와 나눗셈은 교환 법칙이 성립하지 않기 때문에 FixedOrder를 사용하여 항의 순서를 지켜야합니다.
In[3]:=
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};
GrammarRules 개체를 Wolfram Cloud에 배치합니다.
In[4]:=
calc = CloudDeploy[GrammarRules[tokens, Join[defs1, defs2]]];
자연 언어를 포함한 산술 입력을 평가합니다.
In[5]:=
GrammarApply[calc, "one + one"]
Out[5]=
In[6]:=
GrammarApply[calc, "one + two + three"]
Out[6]=
In[7]:=
GrammarApply[calc, "five + seventeen * ten"]
Out[7]=
In[8]:=
GrammarApply[calc, "one hundred - one hundredth"]
Out[8]=
In[9]:=
GrammarApply[calc, "zero + one/forty-five"]
Out[9]=
In[10]:=
GrammarApply[calc, "one/forty-five - one"]
Out[10]=