加载语法
>>>导入pgf
前奏曲>导入PGF2
导入org.grammaticalframework.pgf.*;
使用PGFSharp;
>>>目录(pgf)
>>>帮助(pgf)
>>>gr=pgf.readPGF(“App12.pgf”)
序曲PGF2>gr<-readPGF“App12.pgf”
PGF gr=PGF.readPGF(“App12.PGF”);
PGF gr=PGF。 阅读pgf(“App12.pgf”);
>>>eng=gr.languages[“AppEng”] >>>打印(eng) <pgf。 0x7f7dfa4471d0处的Concr对象>
序曲PGF2>让Just eng=数据。 Map.lookup“AppEng”(语言gr) 前奏曲PGF2>:t eng eng::混凝土
Concr eng=gr.getLanguages().get(“AppEng”);
Concr eng=gr.Languages[“AppEng”];
正在分析
>>>i=eng.parse(“这是一个小剧院”)
前奏曲PGF2>let res=parse eng(startCat gr)“这是一个小剧场”
Iterable<ExprProb>Iterable=eng.parse(gr.getStartCat(),“这是一个小剧场”);
IEnumerable<Tuple<Expr,float>>enumerable=eng.Parse(“这是一个小剧场”);
>>>p,e=i.next()
>>>p,e=i.__next__()
前奏曲PGF2>让ParseOk((e,p):rest)=res
迭代器<ExprProb>iter=iterable.Iterator(); ExprProb ep=iter.next();
IEnumerator=可枚举。 GetEnumerator(); 枚举器。 MoveNext(); 元组<Expr,float>ep=枚举数。 电流;
>>>打印(p) 35.9166526794
序曲PGF2>打印p 35.9166526794
System.out.println(ep.getProb()); 35.9166526794
慰问。 WriteLine(第二项); 35.9166526794
>>>打印(e) PhrUtt NoPConj(UttS(UseCl(TTAnt TPres ASimul)PPos(PredVP(DetNP(Det Quant this_Quant NumSg)))(UseComp(CompNP(德勤指数艺术品编号)(AdjCN(PositA small_A)(Use N剧院编号))))NoVoc
序曲PGF2>打印 PhrUtt NoPConj(UttS(UseCl(TTAnt TPres ASimul)PPos(PredVP(DetNP(Det Quant this_Quant NumSg)))(UseComp(CompNP(德勤指数艺术品编号)(AdjCN(PositA small_A)(Use N剧院编号))))NoVoc
System.out.println(ep.getExpr()); PhrUtt NoPConj(UttS(UseCl(TTAnt TPres ASimul)PPos(PredVP(DetNP(Det Quant this_Quant NumSg)))(UseComp(CompNP(德勤指数艺术品编号)(AdjCN(PositA small_A)(Use N剧院编号))))NoVoc
慰问。 WriteLine(ep.Item1); PhrUtt NoPConj(UttS(UseCl(TTAnt TPres ASimul)PPos(PredVP(DetNP(Det Quant this_Quant NumSg)))(UseComp(CompNP(德勤指数艺术品编号)(AdjCN(PositA small_A)(Use N剧院编号))))NoVoc
>>>i=eng.parse(“一个小剧场”,cat=pgf.readType(“NP”))
Prelude PGF2>let res=parseWithHeuristics eng(startCat gr)heuristic_factor回调
Iterable<ExprRob>Iterable=eng.parseWithHeuristic(gr.startCat(),heuristic_factor,回调);
IEnumerable<Tuple<Expr,float>>enumerable=eng.Parse(“这是一个小剧场”,cat:Type.ReadType(“NP”));
线性化
>>>e=pgf.readExpr(“AdjCN(PositA red_A)(UseN剧院_N)”)
序曲PGF2>let Just e=readExpr“AdjCN(PositA red_A)(UseN剧院_N)”
Expr e=Expr.readExpr(“AdjCN(PositA red_A)(UseN剧院_N)”);
Expr e=支出。 ReadExpr(“AdjCN(PositA red_A)(UseN theare_N)”);
>>>打印(英语线性化(e)) 红色剧场
前奏曲PGF2>putStrLn(线性化工程) 红色剧场
System.out.println(eng.linearize(e)); 红色剧场
慰问。 WriteLine(英语线性化(e)); 红色剧场
>>>对于英语中的s,线性化所有(e): 打印 红色剧场 红色剧场
前奏曲PGF2>mapM_ putStrLn(linearizeAll eng e) 红色剧场 红色剧场
for(字符串s:eng.linearizeAll(e)){ System.out.println(s); } 红色剧场 红色剧场
foreach(eng.LinearizeAll(e)中的字符串s){ 慰问。 WriteLine(s); } 红色剧场 红色剧场
>>>eng.tabular线性化(e): {的Sg Nom':'红色剧院','的Pl Nom’:'红色剧场','s Pl Gen':“红色剧场”,'s Sg Gen':‘红色剧场’}
前奏曲PGF2>表格线性化 [(“Sg Nom”,“红色剧场”),(“s Sg Gen”,“红剧场的”)
for(Map.Entry<String,String>Entry:eng.tabularLinearize(e).entrySet()){ System.out.println(entry.getKey()+“:”+entry.getValue()); } s Sg Nom:红色剧院 s Pl Nom:红色剧院 s Pl Gen:红色剧院 s Sg Gen:红色剧院
foreach(eng.TabularLinearize(e)中的Map.Entry<String,String>Entry。 EntrySet()){////TODO 慰问。 WriteLine(entry.Key+“:”+entry.Value); } s Sg Nom:红色剧院 s Pl Nom:红色剧院 s Pl Gen:红色剧院 s Sg Gen:红色剧院
>>>[b]=eng.bracketd线性化(e) >>>打印(b) (CN:4(AP:1(A:0红色))(CN:3(N:2剧院))
前奏曲PGF2>let[b]=括号线性化工程 前奏曲PGF2>putStrLn(showBracketedString b) (CN:4(AP:1(A:0红色))(CN:3(N:2剧院))
对象[]bs=eng.bracketdLinearize(e);
括号b=eng.BracketedLinearize(e);
猫 -这个括号的句法范畴 外国直接投资 -在括号字符串中标识此括号的id。如果存在不连续的短语,则属于同一短语的所有括号都将共享此id。 林指数 -构成指数 乐趣 -这个括号的抽象函数 儿童 -包含此括号子项的列表
叶子 只有一个类型的参数 字符串 包含当前单词的 支架 具有以下参数: cat::字符串 -这个括号的句法范畴 fid::整数 -在括号字符串中标识此括号的id。如果存在不连续的短语,则属于同一短语的所有括号都将共享此id。 林德克斯::Int -构成指数 fun::字符串 -这个括号的抽象函数 children::[BracketedString] -包含此括号子项的列表
字符串cat -这个括号的句法范畴 整数fid -在括号字符串中标识此括号的id。如果存在不连续的短语,则属于同一短语的所有括号都将共享此id。 int林德克斯 -构成指数 弦乐 -这个括号的抽象函数 对象[]子对象 -包含此括号子项的列表
字符串cat -这个括号的句法范畴 整数fid -在括号字符串中标识此括号的id。如果存在不连续的短语,则属于同一短语的所有括号都将共享此id。 int林德克斯 -构成指数 弦乐乐趣 -这个括号的抽象函数 对象[]子对象 -包含此括号子项的列表
>>>打印(eng.hasLinearization(“apple_N”)) 真的
序曲PGF2>打印(hasLinearization eng“apple_N”) 真的
System.out.println(eng.hasLinearization(“apple_N”)); 真的
慰问。 WriteLine(eng.HasLinearization(“apple_N”)); ////TODO(待办事项) 真的
分析和构造表达式
>>>e.拆包() ('AdjCN',[<pgf.Expr对象位于0x7f7df6db78c8>,<pgf.Expr对象位于x7f7DF6db7878>])
前奏曲PGF2>unApp e Just(“AdjCN”,[…,…])
ExprApplication应用程序=e.unApp(); System.out.println(app.getFunction()); for(Expr参数:app.getArguments()){ System.out.println(arg); }
ExprApplication应用程序=e.UnApp(); System.out.println(app.Function); foreach(app.Arguments中的Expr arg){ 慰问。 WriteLine(参数); }
>>>pgf.readExpr(“literal”).unpack() “文字”
序曲PGF2>readExpr“\”literal\“”>>=unStr “文字”
Expr elit=Expr.readExpr(“\”literal\“”); System.out.println(elit.unStr());
Expr elit=表达式。 ReadExpr(“文字”); 慰问。 WriteLine(elit.UnStr());
>>>quant=pgf.readExpr(“DetQuant索引艺术编号”) >>>e2=pgf。 Expr(“DetCN”,[quant,e]) >>>打印(e2) DetCN(DetQuant IndefArt NumSg)(AdjCN(PositA red_A)(UseN剧院_N))
序曲PGF2>let Just quant=readExpr“DetQuant IndefArt NumSg” 序曲PGF2>让e2=mkApp“DetCN”[quant,e] 序曲PGF2>打印e2 DetCN(DetQuant IndefArt NumSg)(AdjCN(PositA red_A)(UseN剧院_N))
Expr数量=Expr.readExpr(“DetQuant IndefArt NumSg”); Expr e2=新Expr(“DetCN”,新Expr[]{quant,e}); System.out.println(e2);
Expr数量=Expr。 ReadExpr(“DetQuant IndefArt NumSg”); Expr e2=新Expr(“DetCN”,新Expr[]{quant,e}); 慰问。 WriteLine(e2);
嵌入式GF语法
>>>gr.embed(“应用程序”) <模块“应用程序”(内置)>
>>>导入应用程序
>>>打印(App.DetCN(数量,e)) DetCN(DetQuant IndefArt NumSg)(AdjCN(PositA red_A)(UseN house_N))
$gf-制造-输出格式=haskell App.pgf
序曲PGF2>导入应用程序
序曲PGF2应用程序>打印(gf(GDetCN(GDeQuant GIndefArt GNumSg)(GAdjCN(GPositA Gred_A)(GUseN Ghouse_N)))
就诊=病例fg e2,共例 GDetCN数量cn->do putStrLn“Found DetCN” 访问cn GAdjCN adj cn->do putStrLn“找到AdjCN” 访问cn e->返回()
$gf-make-输出格式=java App.pgf
System.out.println(App.DetCN(quant,cn));
应用程序a=新应用程序(); System.out.println(a.DetCN(数量,cn));
动态g=gr.嵌入()
慰问。 WriteLine(g.DetCN(数量,e)) DetCN(DetQuant IndefArt NumSg)(AdjCN(PositA red_A)(UseN house_N))
>>>课堂示例访问者: 定义on_DetCN(self、quant、cn): 打印(“Found DetCN”) 访问中国(自行) 定义on_AdjCN(self,adj,cn): 打印(“找到AdjCN”) 中国访问(自我) def默认值(self,e): 通过 >>>e2.visit(ExampleVisitor()) 找到DetCN 找到AdjCN
e2.visit(new Object()){ DetCN上的公共void(Expr-quant,Expr-cn){ System.out.println(“找到DetCN”); 中国访问(this); } AdjCN上的公共无效(Expr adj,Expr cn){ System.out.println(“发现AdjCN”); 中国访问(this); } 公共无效defaultCase(Expr e){ System.out.println(“found”+e); } }); 找到DetCN 找到AdjCN
访问形态学词典
>>>对于eng.fullFormLexicon()中的条目: >>>打印(条目)
序曲PGF2>mapM_print[(form,lemma,analysis,prob)|(form、analysis)<-fullFormLexicon eng,(lemma、anaAnalysis、prob)<-analysis]
for(FullFormEntry条目:eng.fullFormLexicon()){ for(形态分析分析:entry.getAnalyses()){ System.out.println(entry.getForm()+“”+分析.getProb()+; } }
foreach(eng.FullFormLexicon中的FullFormEntry条目){////TODO foreach(条目分析中的形态分析){ 慰问。 WriteLine(entry.Form+“”+分析.Prob+“”+analysis.Lemma+“”>分析.Field); } }
>>>打印(eng.lookupMorpho(“字母”)) [('letter_1_N','s Sg Nom',inf),('letter _2_N','s Sg Nam',inf)]
序曲PGF2>打印(查找变形字母“letter”) [('letter_1_N','s Sg Nom',inf),('letter _2_N','s Sg Nam',inf)]
for(MorphoAnalysis an:eng.lookupMorpho(“letter”)){ System.out.println(an.getLemma()+“,”+an.getField()=“,”+an.getProb()); } letter_1_N,s序列号,inf 字母_2_N,s序列号,inf
foreach(MorphoAnalysis and in eng.LookupMorpho(“字母”)){////TODO 慰问。 WriteLine(an.Lemma+“,”+an.Field+“,“+an.Prob); } letter_1_N,s序列号,inf 字母_2_N,s序列号,inf
访问抽象语法
>>>gr.功能 ....
序曲PGF2>功能gr ....
列表<String>funs=gr.getFunctions() ....
IEnumerable<String>funs=gr.函数; ....
>>>gr.ca类别 ....
前奏曲PGF2>类别gr ....
列表<String>cats=gr.getCategories(); ....
IEnumerable<String>cats=类别; ....
>>>gr.functionsByCat(“工作日”) [“周五”、“周一”、“周六”、“周日”、“周四”、“周二”、“周三”]
序曲PGF2>functionsByCat gr“Weekday” [“周五”、“周一”、“周六”、“周日”、“周四”、“周二”、“周三”]
List<String>funsByCat=gr.getFunctionsByCat(“Weekday”); ....
IEnumerable<String>funsByCat=gr.FunctionsByCat(“Weekday”); ....
>>>打印(gr.functionType(“DetCN”)) 检测->中国->NP
序曲PGF2>打印(functionType gr“DetCN”) 公正(Det->CN->NP)
System.out.println(gr.getFunctionType(“DetCN”)); 检测->中国->NP
慰问。 WriteLine(gr.FunctionType(“DetCN”)); Det->CN->NP
类型检查抽象树
>>>e,ty=gr.inferExpr(e) >>>打印(e) AdjCN(PositA red_A)(使用剧院_N) >>>打印(ty) 中国
前奏曲PGF2>let Right(e',ty)=inferExpr gr e 前奏曲PGF2>打印e’ AdjCN(PositA red_A)(使用剧院_N) 序曲PGF2>打印 中国
类型表达式te=gr.inferExpr(e); System.out.println(te.getExpr()+“:”+te.getType()); AdjCN(PositA red_A)(UseN剧院_N):CN
类型Expr te=gr.InferExpr(e); ////TODO(待办事项) 慰问。 WriteLine(te.Expr+“:”+te.Type); AdjCN(PositA red_A)(UseN剧院_N):CN
>>>e=gr.checkExpr(e,pgf.readType(“CN”)) >>>打印(e) AdjCN(PositA red_A)(使用剧院_N)
序曲PGF2>让Just ty=readType“CN” 序曲PGF2>让右侧e’=检查Expr gr e ty 前奏曲PGF2>打印e’ 调整CN(阳性A红色_A)(使用N红色_N)
Expr new_e=gr.checkExpr(e,Type.readType(“CN”)); System.out.println(e)
Expr new_e=gr.CheckExpr(e,Type.ReadType(“CN”)); ////TODO(待办事项) 慰问。 写入行(e)
>>>e=gr.checkExpr(e,pgf.readType(“A”)) 前列腺素f。 TypeError:表达式AdjCN(PositA red_A)(UseN剧院_N)的预期类型为A,但推断出了CN
前奏曲PGF2>let Just ty=readType“A” 前奏曲PGF2>let Left msg=checkExpr gr e ty 前奏曲PGF2>putStrLn消息
Expr e=gr.checkExpr(e,Type.readType(“A”)) TypeError:表达式AdjCN(PositA red_A)(UseN剧院_N)的预期类型为A,但推断出了CN
部分语法加载
$gf-制造-拆分-pgf App12.pgf
>>>gr=pgf.readPGF(“App.pgf”) >>>eng=gr.languages[“AppEng”]
>>>eng.lookupMorpho(“字母”) 回溯(最近一次调用): 文件“ “,第1行,in 前列腺素f。 PGFError:未加载具体语法
>>>发动机负荷(“AppEng.pgf_c”) >>>打印(eng.lookupMorpho(“字母”)) [('letter_1_N','s Sg Nom',inf),('letter _2_N','s Sg Nam',inf)]
>>>发动机卸载()
部分语法加载
$gf-制造-拆分-pgf App12.pgf
编写App.pgf。 .. 正在写入AppEng.pgf_c。。。 正在写入AppSwe.pgf_c。。。 ...
PGF gr=PGF.readPGF(“App.PGF”) Concr eng=gr.getLanguages().get(“AppEng”)
eng.lookupMorpho(“字母”) 回溯(最近一次调用): 文件“ “,第1行,in 前列腺素f。 PGFError:未加载具体语法
发动机负荷(“AppEng.pgf_c”) for(MorphoAnalysis an:eng.lookupMorpho(“letter”)){ System.out.println(an.getLemma()+“,”+an.getField()=“,”+an.getProb()); } letter_1_N,s序列号,inf 字母_2_N,s序列号,inf
发动机卸载()
图形Viz
>>>打印(gr.graphviz抽象树(e)) 图表{ n0[label=“AdjCN”,style=“solid”,shape=“plaintext”] n1[label=“PositA”,style=“solid”,shape=“明文”] n2[label=“red_A”,style=“solid”,shape=“plaintext”] n1--n2[style=“solid”] n0--n1[style=“solid”] n3[label=“UseN”,style=“solid”,shape=“plaintext”] n4[label=“theare_N”,style=“solid”,shape=“plaintext”] n3--n4[style=“solid”] n0--n3[style=“solid”] }
序曲PGF2>putStrLn(graphvizAbstractTree gr graphvizzDefaults e) 图表{ n0[label=“AdjCN”,style=“实心”,shape=“纯文本”] n1[label=“PositA”,style=“solid”,shape=“明文”] n2[label=“red_A”,style=“solid”,shape=“plaintext”] n1--n2[style=“solid”] n0--n1[style=“solid”] n3[label=“UseN”,style=“solid”,shape=“plaintext”] n4[label=“theare_N”,style=“solid”,shape=“plaintext”] n3--n4[style=“solid”] n0--n3[style=“solid”] }
System.out.println(gr.graphvizAbstractTree(e)); 图表{ n0[label=“AdjCN”,style=“实心”,shape=“纯文本”] n1[label=“PositA”,style=“solid”,shape=“明文”] n2[label=“red_A”,style=“solid”,shape=“plaintext”] n1--n2[style=“solid”] n0--n1[style=“solid”] n3[label=“UseN”,style=“solid”,shape=“plaintext”] n4[label=“theare_N”,style=“solid”,shape=“plaintext”] n3--n4[style=“solid”] n0--n3[style=“solid”] }
慰问。 WriteLine(gr.GraphvizAbstractTree(e)); ////TODO(待办事项) 图表{ n0[label=“AdjCN”,style=“solid”,shape=“plaintext”] n1[label=“PositA”,style=“solid”,shape=“明文”] n2[label=“red_A”,style=“solid”,shape=“plaintext”] n1--n2[style=“solid”] n0--n1[style=“solid”] n3[label=“UseN”,style=“solid”,shape=“plaintext”] n4[label=“theare_N”,style=“solid”,shape=“plaintext”] n3--n4[style=“solid”] n0--n3[style=“solid”] }
>>>打印(eng.graphvizParseTree(e)) 图表{ 节点[形状=明文] 子图{rank=相同; n4[标签=“CN”] } 子图{rank=相同; 边[style=invis] n1[标签=“AP”] n3[标签=“CN”] n1——n3 } n4--n1 n4--n3 子图{rank=相同; 边[style=invis] n0[标签=“A”] n2[标签=“N”] n0--n2 } n1--n0 n3——n2 子图{rank=相同; 边[style=invis] n100000[label=“red”] n100001[label=“剧院”] n100000--n100001 } n0---n100000 n2——n100001 }
序曲PGF2>putStrLn(graphvizParseTree eng graphvizzDefaults e) 图表{ 节点[形状=明文] 子图{rank=相同; n4[标签=“CN”] } 子图{rank=相同; 边[style=invis] n1[标签=“AP”] n3[标签=“CN”] n1——n3 } n4--n1 n4--n3 子图{rank=相同; 边[style=invis] n0[标签=“A”] n2[标签=“N”] n0--n2 } n1--n0 n3——n2 子图{rank=相同; 边[style=invis] n100000[label=“red”] n100001[label=“剧院”] n100000--n100001 } n0---n100000 n2——n100001 }
System.out.println(eng.graphvizParseTree(e)); 图表{ 节点[形状=明文] 子图{rank=相同; n4[标签=“CN”] } 子图{rank=相同; 边[style=invis] n1[标签=“AP”] n3[标签=“CN”] n1——n3 } n4--n1 n4--n3 子图{rank=相同; 边[style=invis] n0[标签=“A”] n2[标签=“N”] n0--n2 } n1--n0 n3——n2 子图{rank=相同; 边[style=invis] n100000[label=“red”] n100001[label=“剧院”] n100000--n100001 } n0---n100000 n2——n100001 }
慰问。 WriteLine(eng.GraphvizParseTree(e)); ////TODO(待办事项) 图表{ 节点[形状=明文] 子图{rank=相同; n4[标签=“CN”] } 子图{rank=相同; 边[style=invis] n1[标签=“AP”] n3[标签=“CN”] n1——n3 } n4--n1 n4--n3 子图{rank=相同; 边[style=invis] n0[标签=“A”] n2[标签=“N”] n0--n2 } n1--n0 n3——n2 子图{rank=相同; 边[style=invis] n100000[label=“red”] n100001[label=“剧院”] n100000--n100001 } n0---n100000 n2——n100001 }