文法規則の定義
強力な組込み文法トークンとInterpreterフレームワークの規則を自分独自のカスタム文法トークンおよび規則と組み合せて,独自の自然言語処理インターフェースを作る.次に,GrammarApply等の関数で使えるように,このインターフェースをWolfram Cloudに配備する.
組込みの"City"インタープリタタイプを使ってデリミタが違う都市名のリストに使える解析器を作り,クラウドに配備する.
In[1]:=
citiesGrammar = CloudDeploy[
GrammarRules[{
cs : DelimitedSequence[GrammarToken["City"], "," | ";" | "and"] :>
cs
}]
]
この解析器を合衆国の幾つかの都市名を含む文字列に適用すると,対応するEntityオブジェクトのリストが返される.
In[2]:=
GrammarApply[citiesGrammar, "Saint Louis; New York, LA and Dallas"]
Out[2]=
これは,Wolfram Geo機能で処理することができる.
In[3]:=
GrammarApply[citiesGrammar, "Saint Louis; New York, LA and Dallas"];
GeoListPlot[%, GeoLabels -> Automatic,
GeoBackground -> "CountryBorders", GeoRange -> "Country"]
Out[3]=
独自のカスタム文法トークンである"Route","Origin","Destination"を加え,その規則を定義する.
In[4]:=
routeGrammar = CloudDeploy[
GrammarRules[{GrammarToken["Route"], GrammarToken["Origin"],
GrammarToken["Destination"]},
{
"Route" ->
AnyOrder[start : GrammarToken["Origin"],
end : GrammarToken["Destination"]] :> (start -> end),
"Origin" ->
FixedOrder["from", loc : GrammarToken["City"]] :> loc,
"Destination" ->
FixedOrder["to", loc : GrammarToken["City"]] :> loc
}
]
]
AnyOrderとFixedOrderを組み合わせて使うと,出発地と目的地を両方の順序で正しく解析することができる.
In[5]:=
GrammarApply[routeGrammar, "from NYC to LA"]
Out[5]=
In[6]:=
GrammarApply[routeGrammar, "to LA from NYC"]
Out[6]=