Wolfram 언어

텍스트와 언어 처리

자연 언어 계산기 만들기

이 예제는 자연 언어로 숫자를 받아들이고, 상대적 우선 순위를 포함하여 다른 몇몇의 연산자를 지원하는 간단한 계산기를 작성합니다.

빌트인 토큰 "SemanticNumber" 형식과 네개의 사용자 정의 토큰을 사용합니다.

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

피가수는 전체 덧셈식 (결합 법칙으로 구현), 전체 곱셈식 혹은 숫자로 표현 가능합니다. 피승수는 전체 곱셈식 (결합 법칙으로 구현) 또는 숫자로 표현할 수 있지만, 곱셈보다 우위성이 높은 덧셈식을 사용할 수 없습니다.

In[2]:=
Click for copyable input
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
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
calc = CloudDeploy[GrammarRules[tokens, Join[defs1, defs2]]];

자연 언어를 포함한 산술 입력을 평가합니다.

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

관련 예제

de en es fr ja pt-br ru zh