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