介绍
本教程于2010年5月17日在马耳他LREC上提供,是在GF暑期学校2009该课程于2009年4月首次在在线课程中介绍。2009年8月的暑期学校有来自20个国家的30名学员。启动了15种新语言。自第一所暑期学校以来,图书馆已经从12种语言发展到了30多种语言。
本教程的目标是通过解释GF的实际使用和资源语法库中的语言概念,介绍一种快速的资源语法写作方法。
有关更多详细信息,我们建议
本教程中的代码示例位于
https://github.com/语法框架/gf-contrib/tree/master/lrec-tutorial
.
我们再怎么强调你自己使用GF系统编写代码示例和练习的重要性都不为过!
本课程五课内容
1.GF系统,简单的多语言语法
2.形态学范式和词汇
3.建立语言句法
4.在应用程序中使用资源语法库
5.开发新的资源语法
GF系统与简单多语言语法
目录
GF是什么
安装GF系统
的语法约翰爱玛丽英语、法语、拉丁语、荷兰语、希伯来语
测试语法和构建应用程序
资源语法库的范围
练习
GF=语法框架
GF是一个语法形式主义:书写语法的符号
GF是一个函数式程序设计语言具有类型和模块
GF程序被称为语法
语法是一个声明性程序,它定义
多语言文法
许多语言由一个共同的抽象语法

GF计划
口译员用于测试语法(GF外壳)
编译器将语法转换为有用的格式
- 可移植语法格式
- 语音识别语法(Nuance、HTK等)
- JavaScript脚本
GF资源文法库
形态学和基本语法
不同语言的通用API
目前(2010年5月)有17种语言:保加利亚语、加泰罗尼亚语、丹麦语、荷兰语、英语、芬兰语、法语、德语、语际语、意大利语、挪威语、波兰语、罗马尼亚语、俄语、西班牙语、瑞典语、乌尔都语。
正在建设至少19种语言:南非荷兰语、阿姆哈拉语、阿拉伯语、巴托努姆语、世界语、波斯语、希腊语(古代)、希伯来语、冰岛语、日语、拉丁语、拉脱维亚语、马耳他语、蒙古语、葡萄牙语、斯瓦希里语、泰语、茨瓦纳语、土耳其语。
使用GF的位置
自然语言界面:WebALT,请参阅
webalt.math.helsinki.fi/PublicFiles/CD/Screencast/TextMathEditor%20Demo.swf
对话系统:TALK,参见www.youtube.com/watch?v=1bfaYHWS6zU
翻译:MOLTO,请参阅www.molto-project.eu

GF运行时系统
PGF语法可以是嵌入的在Haskell、Java和Prolog程序中
它们可以用于web服务器

安装和使用GF系统
转到GF主页http://语法框架.org并按照快捷方式
- 下载:下载并安装二进制文件
- 开发人员:下载源代码、编译和安装
这个开发人员建议资源语法开发人员使用方法:
启动GF外壳
命令玻璃纤维
启动GF外壳:
gf美元* * ** ** **** * * * * * ** * ** * * * * ** * ** * *这是GF 3.1.6版。许可证:请参阅帮助-许可证。错误报告:http://code.google.com/p/grammatic-framework/issues/list语言:>
使用GF外壳:帮助
命令小时
=帮助
>帮助
给出了带有简短描述的命令列表。
>帮助分析
提供有关命令的详细帮助解析
.
命令有短名称(1或2个字母)和长名称。
在GF中使用上下文无关语法
这些是GF中可用的最简单语法。例如:
预测。S::=NP VP;完成。VP::=V2 NP;厕所。NP::=“约翰”;玛丽。NP::=“玛丽”;爱。V2::=“爱”;
每个规则中的第一项是句法功能,用于建筑树:Pred公司
=预测,完成
=互补。
第二项是类别:S=句子,NP=名词短语,VP=动词短语,V2=二位动词。
导入和分析
将上述语法复制或写入文件零.cf
.
在GF中使用语法:进口
=我
>i零.cf
收件人解析树的字符串:解析
=第页
>p“约翰爱玛丽”Pred John(《Compl Love Mary》)
默认情况下,解析在类别中S公司
。这可以被覆盖。
随机生成、线性化和管道
生成随机树:生成_随机
=克
>克Pred Mary(完全爱Mary)
收件人使线性化树到字符串:使线性化
=我
>l Pred Mary(完全爱Mary)玛丽爱玛丽
收件人管对另一个命令:|
>克|l玛丽爱玛丽
抽象树的图形视图

在Mac中:
>p“约翰爱玛丽”|visualize_tree-view=打开
在Ubuntu Linux中:
>p“约翰爱玛丽”|visualize_tree-view=oeg
您需要Graphviz程序来查看视图。
解析树的图形视图

>p“约翰爱玛丽”|visualize_parse-view=open
抽象和具体语法
无上下文规则
预测。S::=NP副总裁
定义了两件事:
- 抽象语法:构建表单树
预测np vp
- 具体语法:此树线性化为字符串形式
np副总裁
GF的主要思想是:将这两件事分开。
分离抽象语法和具体语法
无上下文规则转换为两个判决在GF中:
预测。S::=NP VP===>有趣Pred:NP->VP->Slin Pred np vp=np++vp
函数和串联
函数类型:A->B->C
,读取“函数来自A类
和B类
到C类
"
功能应用:f a b公司
,读取“(f)
应用于参数一
和b条
"
串联:x++y
,读取“字符串x个
后跟字符串年
"
参见Haskell中的函数编程。
注意:在GF中,++
介于令牌列表因此“创造了一个空间”。
从无上下文到GF语法
语法分为两部分模块
- 一个摘要模块,判断表
猫
和乐趣
- 一混凝土模块,判断表
林肯猫
和林
猫 C类 |
C类是一个类别 |
乐趣 (f):T型 |
(f)是类型为的函数T型 |
林肯猫 C类 = L(左) |
C类具有线性化类型L(左) |
林 f x x = t吨 |
f x x具有线性化t吨 |
抽象语法,示例
抽象零={猫S;NP;副总裁;V2;乐趣预测:NP->VP->S;完成:V2->NP->VP;玛丽·约翰:NP;爱情:V2;}
具体语法,英语
混凝土零工程={林肯猫S、 NP,VP,V2=结构;林Pred np vp=np++vp;完成v2 np=v2++np;约翰=“约翰”;玛丽=“玛丽”;Love=“爱”;}
注意:Str公司
(标记列表,“字符串”)作为唯一的线性化类型。
使语法多语言
一个抽象+许多具体
可以给出相同的树系统
具体语法,法语
混凝土零频率={林肯猫S、 NP,VP,V2=结构;林Pred np vp=np++vp;完成v2 np=v2++np;约翰=“Jean”;玛丽=“玛丽”;爱=“aime”;}
只需使用不同的单词
翻译和多语言生成
导入许多具有相同抽象语法的语法
>i ZeroEng.gf零频率.gf语言:ZeroEng ZeroFre
转换:管道线性化到解析
>p-lang=ZeroEng“约翰爱玛丽”|l-lang=ZeroFre让-艾梅-玛丽
多语言生成:线性化为所有语言
>克|lPred Mary(完全爱Mary)玛丽爱玛丽玛丽艾美玛丽
多语言树库
树库:显示树及其线性化
>gr | l-树库零:Pred Mary(Compl Love Mary)零英:玛丽爱玛丽ZeroFre:Marie aime玛丽
具体语法,拉丁语
零的具体零纬度={林肯猫S、 VP,V2=Str;NP=案例=>Str;林Pred np vp=np!标称++vp;完成v2 np=np!Acc++v2;John=表{Nom=>“Ioannes”;Acc=>“Ioannem”};玛丽=表格{Nom=>“玛丽亚”;Acc=>“玛利亚”};爱=“业余”;参数案例=Nom|Acc;}
不同的语序,不同的线性化类型,参数。
线性化中的参数
拉丁语有案例主语为主语,宾语为宾语。
- 伊安妮斯·玛丽亚姆·阿玛“John-Nom爱Mary-Acc”
- 玛丽亚·伊奥尼姆·阿玛“Mary-Nom爱John-Acc”
参数类型对于案例(拉丁语的6个案例中只有2个案例):
param Case=Nom|Acc
表格类型和表格
线性化类型NP公司
是一个肉用:来自案例
到Str公司
,
lincat NP=案例=>Str
线性化约翰
是一个屈折表,
lin John=表{Nom=>“Ioannes”;Acc=>“Ioannem”}
使用NP时,选择(!
)表中的适当情况,
Pred np vp=np!标称++vp完成v2 np=np!Acc++版本2
具体语法,荷兰语
混凝土零度={林肯猫S、 NP,VP=Str;V2={v:Str;p:Str};林Pred np vp=np++vp;完成v2 np=v2.v++np++v2.p;John=“Jan”;玛丽=“玛丽”;爱={v=“heeft”;p=“lief”};}
动词后背褶皱是一个不连续成分.
记录类型和记录
线性化类型第2版
是一个记录类型有两个领域
lincat V2={v:Str;p:Str}
线性化爱
是一个记录
lin Love={v=“hat”;p=“lieb”}
字段值由投影(.
)
lin Compl v2 np=v2.v++np++v2.p
具体语法,希伯来语
零的混凝土ZeroHeb={标志编码=utf8;林肯猫S=Str;NP={s:Str;g:性别};VP,V2=性别=>Str;林Pred np vp=np.s++vp!np.g;Compl v2 np=表{g=>v2!g++“”++np.s};约翰={s=“ג”;g=Masc};玛丽={s=“”;g=Fem};爱=表{Masc=>“”;Fem=>“”};参数性别=Masc|Fem;}
动词同意主题的性别。
可变和固有特征、协议
NP具有性别固有特性-记录中的字段
lincat NP={s:Str;g:性别}林玛丽={s=“mry”;g=Fem}
副总裁的性别可变特征-表的参数
lincat VP=性别=>性别
在谓语中,VP接受NP的性别
lin Pred np-vp=np.s++vp!净重(np.g)
功能设计
确定变量和固有特性是GF编程的核心。
好的提示:字典给出了各种形式的可变特性和固有特性的值。
示例:法语名词
- 雪弗牌手表请参阅。切沃(chevaux)马斯克。名词
由此我们推断法语名词有可变的数字和固有的性别
lincat N={s:Number=>Str;g:性别}
可视化树和单词对齐

从抽象树到解析树
链接间隔单词用它最小生成子树
更换间隔构造函数函数用它价值类别
生成单词对齐
在L1和L2中:用最小的生成子树链接每个单词
删除中间树,直接合并从L1到L2的链接
通知:一般来说,这会给短语对齐
通知:链接可以交叉,短语可以不连续
通过树对齐单词

>解析“约翰爱玛丽”|aw-view=open
更复杂的单词对齐

构建应用程序
将语法编译为PGF:
$gf-使ZeroEng.gf ZeroFre.gf ZeroLat.gf Zero Ger.gf ZerorHeb.gf
结果文件零磅/平方英尺
例如,可以包含在冰箱磁铁中:

按比例放大语法
零gf
是资源语法的一小部分
当前的资源语法有80个类别,200个句法功能,最小词汇量为500个单词。
偶数S、 NP、VP、V2
将需要更丰富的线性化类型。
关于句子的更多内容
类别S公司
必须照顾好
- 时态:约翰爱上了玛丽
- 否定:约翰不爱玛丽
- 语序(荷兰语):als Jan Marie lief heeft,heeft Marie Jan lief
此外:疑问句、祈使句、关系从句
名词短语的更多操作
NP公司
还包括
- 代词:我,你,她,我们
- 限定符:那个男人,每个地方
此外:常见名词、形容词
练习
1.安装玻璃纤维
在您的计算机上。
2.学习并尝试命令对齐单词
,空的
,生成_随机
,生成树
,帮助
,进口
,使线性化
,解析
,输入字符串
,退出
,读取文件(_F)
,翻译测验
,unicode表
,可视化解析
,可视化树
,写入文件
.
3.写一个具体的语法零
另一种语言(例如你的暑期学校项目语言)。
4.扩展零
语法中有十个新的名词短语和动词。
5.添加到零
语法一个范畴A类
形容词和函数完成:A->副总裁
,形成动词短语,如是旧的.
形态学范式与词汇构建
目录
形态学、屈折变化、范式-示例:英语动词
规则模式和智能范式
超负荷操作
词汇中的固有特征
构建和引导词典
非连接性形态学:阿拉伯语
形态学
弯曲形态:定义不同形式共个单词
衍生形态学:说出新词是如何从旧词中形成的
我们可以在GF中完成这两项工作,但现在专注于屈折形态学。
资源语法的良好开端
完整的屈折系统:1-6周
综合词典:天或周
形态学分析:每秒多达200000个单词
导出到SQL、XFST。。。
单词是什么?
在抽象语法中:基本类型的对象,例如爱情:V2
在具体语法中,
- 主要是:屈折表,所有表单的集合
- secundaryly:字符串,即单个形式
因此爱,爱,爱是
- 作为字符串的不同单词
- 与屈折表或抽象语法对象相同单词的形式
词汇类别
词性=单词类别=词汇范畴
在GF中,词性被定义为猫
及其关联林肯猫
.
在GF中,词汇和其他词汇之间没有形式上的区别猫
第条。
但在资源语法中,我们保持了一个独立词汇类别的规则。
资源语法中的主要词汇类别
N个 |
名词 |
房子 |
A类 |
形容词 |
小的 |
V(V) |
动词 |
睡觉 |
第2版 |
双位动词 |
爱 |
副词 |
副词 |
今天 |
典型特征设计
N个 |
数字,大小写 |
性别 |
A类 |
人数、病例、性别、学位 |
位置 |
V(V) |
时态、数字、人称。。。 |
辅助的 |
第2版 |
作为V(V) |
补码大小写 |
副词 |
- |
- |
模块结构
资源模块屈折函数为操作
资源形态工程={oper regV:Str->V;…}
词汇:抽象和具体语法
abstract Lex={fun Walk:V;…}Lex的具体LexEng=在{lin Walk=regV“Walk”;…}中打开MorphoEng
可以使用相同的资源(打开
ed)在许多词汇中。
抽象和具体是顶层-他们定义树、解析、线性化。
资源模块和操作人员
s不是顶级的-它们在编译后被“丢弃”(即不保存在PGF中)。
示例:英语动词屈折变化的资源模块
使用库模块前奏曲
.
首先定义参数类型和词类。
resource Morpho=打开前奏曲{参数VForm=VInf|VPres|VPast|VPastPart|VPresPart;操作人员动词:Type={s:VForm=>Str};
判决书操作人员
:辅助操作.
启动:最坏情况功能
为了节省写作并在动词
类型
mkVerb:(_,_,_、_、_:Str)->动词=\go,gos,gone,going->{s=表格{VInf=>去;VPres=>去;VPast=>进行了;VPastPart=>消失;VPresPart=>正在进行}} ;
在资源模块中测试计算
使用导入保持
选项
>i-保留形态.gf
使用命令复写的副本
=计算机_混凝土
>cc mkVerb“use”使用“used”使用“use”{s:形态.VForm=>结构=表格形态.VForm{形态.VInf=>“使用”;Morpho.VPres=>“使用”;Morpho.VPast=>“已使用”;Morpho.VPastPart=>“已使用”;Morpho.VPresPart=>“使用”}}
定义范例
A类范式是类型为的操作
Str->动词
它接受一个字符串并返回一个变形表。
让我们首先定义正则动词的范例:
regVerb:Str->动词=\walk->mkVerb walk(walk+“s”)(walk+“ed”)(walk+“d”)(步行+“ing”);
这将适用于步行,兴趣,玩.
它不适用于唱,吻,使用,哭泣,飞,停止.
更多范例
对于以结尾的动词秒,x个,z(z),中国
s_regVerb:Str->动词=\kiss->mkVerb kiss(kiss+“es”)(kiss+ed)(kiss+“ed”)(亲吻+“ing”);
对于以结尾的动词e(电子)
e_regVerb:Str->动词=\使用->让我们=初始化使用在mkVerb中使用(使用+“s”)(us+“ed”)(us+“ed“)(us+ing);
注意:
- 这个局部定义
让
c(c) =
d日 在里面
...
- 操作
初始化
从前奏曲
,删除最后一个字符
还有更多的范例
对于以结尾的动词年
y_regVerb:Str->动词=\哭->让cr=init哭在里面mk动词cry(cr+“ies”);
对于以结尾的动词即
ie_regVerb:Str->动词=\die->设dy=Predef.tk 2模+“y”在里面mkVerb die(die+“s”)(die+d)(die+“d”)(dy+“ing”);
选择什么样的范式
如果不定式以结尾s、 x、z、ch,选择s_regRerb(重新注册)
:用力咀嚼,咀嚼
如果不定式以结尾年,选择y_regRerb(重新注册)
:哭泣,哭,哭
如果不定式以结尾e(电子),选择e_regVerb(_regVerb)
:使用,习惯于,使用
- 除非我在前面:死亡,临终的
- 或者如果e(电子)在前面:自由的,释放
聪明的范例
让GF通过以下方式选择范例字符串上的模式匹配
smartVerb:Str->Verb=\v->case v of{_+(“s”|“z”|“x”|“ch”)=>s_regVerb v;_+“ie”=>ie_regVerb v;_+“ee”=>ee_regVerb v;_+“e”=>e_regVerb v;_+(“a”|“e”|“o”|“u”)+“y”=>regVerb v;_+“y”=>y_regVerb v;_=>regVerb v} ;
字符串上的模式匹配
格式:案例
一串 第页,共页{
图案 =>
价值 }
模式:
_
匹配任何字符串
- 引号中的字符串与自身匹配:
“ie”
+
拆分为子字符串:_+“y”
|
匹配备选方案:“a”“e”“o”
常见做法:最后的模式是一个全面的_
测试智能范式
>cc-all smartVerb“munch”咀嚼咀嚼>cc-所有smartVerb“死亡”死亡死亡死亡死亡>cc-所有smartVerb“同意”同意同意同意同意>cc-所有smartVerb“部署”部署部署部署部署>cc-所有smartVerb“分类”分类分类分类分类
智能范式尚不完善
不规则动词显然不包括在内
>cc-所有smartVerb“sing”唱歌唱歌唱歌唱歌
有辅音重复的规则动词也不是
>cc-所有smartVerb“停止”停止停止停止停止
最后一个辅音重复范式
使用Prelude函数最后的
dupRegVerb:Str->动词=\stop->let stop=停止+最后一次停止在里面mkVerb停止(停止+“s”);
字符串模式:以元音开头的相关辅音
_+(“a”|“e”|“i”|“o”|“u”)+(“b”|“d”|“g”|“m”|“n”|“p”|“r”|“s”|“t”)=>dupRegVerb v;
测试辅音重复
现在它工作了
>cc-所有smartVerb“停止”停止停止停止停止
但是怎么办
>cc-所有smartVerb“coat”涂层涂层涂层涂层
解决方案:在最后一个字符之前出现双元音(?
匹配一个字符)
_+(“ea”|“ee”|“ie”|“oa”|”oo“|”ou“)+?=>regVerb v;
没有防水解决方案
重复取决于重音,重音在英语中没有标记:
- 省略【奥米特】:省略,省略
- 呕吐物[呕吐]:呕吐的,呕吐
这意味着我们有时必须提供多个表单。
对于不规则动词,我们已经知道了这一点。我们也不能为每一个都写模式,因为例如。躺两者都可以谎言,谎言,谎言或谎言,谎言,谎言.
不规则动词范例
论点:三种形式,而不是一种。
正则动词中完成的模式匹配可以重用。
不规则动词:(_,_,_:Str)->动词=\sing,sang,sung->让v=smartVerb唱歌在里面mkVerb sing(v.s!VPres)sang sung(v.s.!VPresPart);
把所有这些放在一起
我们有三个功能:
smartVerb:Str->动词不规则动词:Str->Str->Str->VerbmkVerb:Str->Str->Str->Str->Str->Str->动词
由于所有类型都不同,我们可以使用过载给他们起一个相同的名字。
超载的范例
对于文档:显示参数示例的变量名。
mkV=过载{mkV:(cry:Str)->动词=smartVerb;mkV:(sing,sang,sing:Str)->动词=不定式动词;mkV:(go,gos,goes,gone,going:Str)->动词=mkVerb;} ;
测试过载的范例
>cc-所有mkV“谎言”谎言谎言谎言谎言>cc-所有mkV“谎言”“谎言”谎言谎言谎言谎言>cc—所有mkV“忽略”省略省略省略>cc-所有mkV“呕吐”呕吐呕吐呕吐呕吐>cc-所有mkV“呕吐”“呕吐”呕吐呕吐呕吐呕吐>cc-所有mkV“呕吐”“呕吐”呕吐物呕吐物呕吐
当然我们可以做得更好呕吐物...
形态实施阶段
1.线性化类型,具有参数化和固有特性。
2.最坏情况函数。
3.一套范例,传统上每一个都有一个论点。
4.聪明的范例,具有相关数量的参数。
5.用户功能过载,收集智能范例。
其他词类
通常建议的顺序:
1.名词,最简单的类。
形容词,通常使用名词屈折,添加性别和程度。
动词,通常是最复杂的类别,在分词中使用形容词。
形态语音功能
许多操作对不同的语音部分是通用的。
示例:添加秒英语名词或动词。
add_s:Str->Str=\v->case v of{_+(“s”|“z”|“x”|“ch”)=>v+“es”;_+(“a”|“e”|“o”|“u”)+“y”=>v+“s”;cr+“y”=>cr+“ies”;_=>v+“s”} ;
这应该单独定义,而不是直接在动词连词中定义。
注意:模式变量铬
匹配,如_
但被束缚住了。
构建词典
令人厌烦的是,我们甚至需要一种语言的抽象和具体模块。
abstract Lex={concrete LexEng=open中的Morpho{V类;lincat V=动词;有趣的林播放_V:V;play_V=mkV“播放”;睡眠_V:V;sleep_V=mkV“sleep”“sleed”“sleped”;}
幸运的是,这些模块可以从带有POS标签的单词列表中以机械方式生成
V播放V睡眠睡眠
引导词典
备选方案1。从形态POS标记的单词列表中:平凡
已播放V播放V睡眠睡眠
备选方案2。从一个简单的单词列表中,POS-tagged:开始假设规则性,通过迭代生成、更正和添加表单
V向播放===>V向播放V睡眠V睡眠V睡觉V睡眠
例如:芬兰语名词平均需要1.42种形式(生成26种形式)。
非连接性形态学:阿拉伯语
闪族语言,例如阿拉伯语:卡塔巴具有表单卡阿提布,雅克图布, ...
传统分析:
- 单词=根+图案
- 根=三个辅音(激进分子)
- pattern=从根到字符串的函数(符号:带变量的字符串F、 C、L对于部首)
例子:雅克图布=千桶+亚菲库鲁
单词是数据结构,而不是字符串!
阿拉伯语数据结构
根是字符串的记录。
根:类型={F,C,L:Str};
模式是从根到字符串的函数。
模式:类型=根->结构;
填充是一种特殊情况:字符串填充根中四个插槽的记录。
填充:类型={F,FC,CL,L:Str};
除了中辅音重复(例如。FaCCaLa公司).
应用图案
从填充物中获得的图案将记录交织在一起:
填充:填充->图案=\p,r->p.F+r.F+p.FC+r.C+p.CL+r.L+p.L;
中辅音重复也使用填充,但重复了C类根的辅音:
数据填充:填充->图案=\p,r->p.F+r.F+p.FC+r.C+r.C+p.CL+r.L+p.L;
用字符串编码根
这只是为了便于编程和编写词典。
F=第一个字母,C=第二个字母,L=其余字母。
getRoot:Str->Root=\s->cases of{F@?+C@?+L=>{F=F;C=C;L=L};_=>Predef.error(“无法从”++s获取根)} ;
这个按图案显示 x@p
比赛第页
并绑定x个
.
这个误差函数 预定义错误
停止计算并显示字符串。这是一个典型的全面价值观。
按字符串编码模式
图案是用字母编码的F类
,C类
,L(左)
.
getPattern:Str->Pattern=\s->案例{F+“F”+FC+“CC”+CL+“L”+L=>数据填充{F=F;FC=FC;CL=CL;L=L};F+“F”+FC+“C”+CL+“L”+L=>填充{F=F;FC=FC;CL=CL;L=L};_=>Predef.error(“无法从”++s获取模式)} ;
高级词典构建函数
字典条目:根+模式。
获取单词:Str->Str->Str=\r,p->getPattern p(getRoot r);
现在我们可以尝试:
>抄送getWord“ktb”“yaFCuLu”“牦牛”>抄送getWord“ktb”“muFaCCiLu”“穆卡提布”
阿拉伯语动词类型的参数
时态、数字、人称、性别的屈折。
参数编号=Sg|Dl|Pl;性别=Masc|Fem;时态=Perf|Impf;个人=Per1|Per2|Per3;
但不是在所有组合中。例如:没有第一人称对偶。
(我们省略了大多数时态和语气。)
阿拉伯语动词屈折变化示例

阿拉伯语动词类型:实现
我们使用代数数据类型只包括有意义的组合。
参数VPer=Vp3编号性别|Vp2Sg性别|Vp2Dl公司|Vp2Pl性别|Vp1Sg|Vp1Pl;操作动词:类型={s:时态=>VPer=>Str};
因此,2*(3*2+2+1+2+1+1)=26个形式,而不是2*3*2*3=36。
阿拉伯语动词范例
pattV_u:时态->VPer->Pattern=\t,v->getPattern(第个案例,共个案例{性能=>第v种,共种{Vp3 Sg Masc=>“FaCaLa”;Vp3 Sg Fem=>“FaCaLato”;--o是no-vowel符号(“sukun”)Vp3 Dl Masc=>“FaCaLaA”;-- ...} ;Impf=>第v种情况{-- ...Vp1Sg=>“A?aFoCuLu”;Vp1Pl=>“naFoCuLu”}}) ;u_Verb:Str->动词=\s->{s=\\t,p=>appPattern(获取根)(pattV_u t p)} ;
应用阿拉伯语范例
在资源模块中测试:
>抄送-所有u_Verb“ktb”kataba katabato katabaA katabataA katabuwA katabona katabota kataboutikatabotuma一个katabotum katabotunv2a katabotu katabona一个yakotubu takotubun亚科图巴Ani takotuba Ani yakotubuwna yakotubna takotubu takotubiynatakotubaAni takotubuwna takotubona A?阿科图布-纳科图布
构建词典:
趣味ktb_V:V;lin ktb_V=u_Verb“ktb”;
我们如何进行打印(娱乐性GF黑客攻击)
我们定义了一个HTML打印操作
操作verbTable:动词->字符串
并将其用于特殊类别表
由建造
趣味选项卡:V->表格;lin选项卡v=verbTable v;
然后我们使用
>l选项卡ktb_V|ps-env=引号-to_arabic|ps-to_html|wf-file=ara.html> ! tr“\”“”“<ara.html>ar.html
练习
1.学会使用命令计算机_混凝土
,形态分析
,形态测验
.
2.尝试资源库文件中的一些智能范例范例
对于一些你知道(或还不知道)的语言。使用命令复写的副本
为了这个。
3.为目标语言中的一些词类和一些范例编写一个词法实现。从功能设计开始,以智能范式结束。
4.用你的目标语言引导一个包含100个单词的GF词典(抽象+具体)。
5.(娱乐GF黑客。)编写一个类似于verb表格
用于在HTML中打印漂亮的屈折表。
语言句法实现基础
目录
关键类别和规则
形态-语法界面
英语、意大利语、法语、芬兰语、瑞典语、德语、印地语的示例和变体
微型资源语法:意大利语
模块扩展和依赖关系图
印地语/乌尔都语的发音
如果这个讲座的细节让人感到困难,不要担心! 语法是困难,这就是为什么资源语法如此有用!
资源语法中的语法
“语言本体论”:语言常见的句法结构
80个类别,200个函数,迄今为止适用于所有资源语言
足以表达意思:数学、技术文档、对话系统
必须通过特定于语言的规则进行扩展,以允许解析任意文本(英语中大约多10%?)
工作量大,容易出错!
关键类别和功能
关键类别
氯 |
条款 |
每个年轻人都爱玛丽 |
副总裁 |
动词短语 |
爱玛丽 |
第2版 |
双位动词 |
爱 |
NP公司 |
名词短语 |
每个年轻人 |
中国 |
普通名词 |
年轻人 |
Det公司 |
测定器 |
每一个 |
AP公司 |
形容词短语 |
年轻的 |
关键功能
预处理VP:NP->VP->Cl |
预测 |
每个男人都爱玛丽 |
完成2:V2->NP->VP |
互补 |
爱玛丽 |
DetCN:Det->CN->NP |
决心 |
每个人 |
AdjCN:亚太地区->中国->中国 |
修改 |
年轻人 |
功能设计
氯 |
紧张的 |
- |
副总裁 |
时态,agr |
- |
第2版 |
时态,agr |
案例 |
NP公司 |
案例 |
农业土地储备 |
中国 |
数字,大小写 |
性别 |
Det公司 |
性别,案例 |
数 |
AP公司 |
性别、数量、案例 |
- |
农业土地储备=协议功能:性别、人数、人
谓词:构建子句
功能之间的相互作用
param时态,格,农业lincat Cl={s:时态=>Str}lincat NP={s:Case=>Str;a:Agr}lincat VP={s:时态=>Agr=>Str}fun PredVP:NP->VP->Cllin PredVP np-vp={s=\\t=>np.s!sub++vp.s!t!np.a}操作主题:案例
功能传递
一般来说,组合规则只通过特征:无案例分析(桌子
表达式)。
因此,特殊符号很有用:
\\p、 q=>t===表{p=>表{q=>t}}
它类似于lambda抽象(\x、 y->t
在函数类型中)。
预测:示例
英语
Sg每1 |
我睡觉 |
我睡着了 |
我会睡觉的 |
Sg每3 |
她睡觉了 |
她睡着了 |
她会睡着的 |
Pl每1 |
我们睡觉 |
我们睡着了 |
我们会睡觉的 |
意大利语(“我累了”、“她累了”和“我们累了”)
每1个Masc Sg |
伊奥·索诺·斯坦索 |
io ero斯坦索 |
io saróstanco公司 |
Fem Sg每3 |
莱耶斯坦察 |
雷时代的立场 |
利萨塔 |
Fem Pl每1 |
noi siamo止血 |
noi eravamo站姿 |
非剖宫产止血 |
预测:变化
语序:
产品投放:
发射率:
可变主题案例:
- 米纳奥伦·拉皮斯与。膝盖上的小步舞曲(芬兰语,“我是孩子”(主格)vs.“我有孩子”(adessive))
补语:构建动词短语
功能之间的相互作用
lincat NP={s:Case=>Str;a:Agr}lincat VP={s:时态=>Agr=>Str}lincat V2={s:时态=>Agr=>Str;c:格}乐趣完成2:V2->NP->VPlin CompleV2 v2 vp={s=\\t,a=>v2.s!t!a++np.s!v2.c}
补充:示例
英语
芬兰语
可指责的 |
塔瓦塔小步舞 |
“见我” |
分词 |
拉卡斯塔·米努阿 |
“爱我” |
激动人心的 |
皮塔瓦努斯塔 |
“像我一样” |
属格+每个州 |
katsoa minun peräni村 |
“照顾我” |
补充:变化
介词:两位动词通常在加法格中包含介词
lincat V2={s:时态=>Agr=>Str;c:大小写;prep:Str}lin CompleV2 v2 vp={s=\\t,a=>v2.s!t!a++v2.prep++np.s!v2.c}
Clitics公司:主题的位置可能不同,如意大利语:
- 玛丽亚·阿马·乔瓦尼与。玛丽亚·米亚玛(“玛丽爱约翰”vs.“玛丽爱我”)
确定:构建名词短语
功能之间的相互作用
lincat NP={s:Case=>Str;a:Agr}lincat CN={s:数字=>案例=>结构;g:性别}lincat Det={s:性别=>案例=>结构;n:数字}乐趣DetCN:Det->CN->NPlin DetCN det cn={s=\\c=>详细信息!中国!c++cn.s!详细信息!c;a=agr cn.g det.n Per3}运营经理:性别->人数->人数->农业
确定:示例
英语
意大利语(“这款葡萄酒”、“这款披萨”、“那些披萨”)
Sg公司 |
马斯克 |
奎斯托葡萄酒 |
Sg公司 |
股骨 |
奎斯塔披萨 |
Pl公司 |
股骨 |
平息披萨 |
芬兰语(“每间房子”、“这些房子”)
Sg公司 |
约凯尼·塔罗 |
约凯塞萨·塔洛萨 |
Pl公司 |
纳梅塔洛 |
näissätaloissa村 |
确定:变化
系统数变化:
- 这个-这个,the-the公司,白介素-1(意大利语“the-the”)
“零”限定符:
- 塔罗牌手表(“房子”)vs。塔罗牌手表(“房子”)(芬兰语)
- 房子与。房屋(英语),尤恩·梅森与。des maisons公司(法语)
名词的特异性参数:
- 瓦杰·胡斯与。德赫塞特(瑞典语,“每家”vs.“那家”)
修饰:给名词添加形容词
功能之间的相互作用
lincat AP={s:性别=>数量=>案例=>结构}lincat CN={s:数字=>案例=>结构;g:性别}趣味AdjCN:AP->CN->CNlin-AdjCN-ap-cn={s=\\n,c=>ap.s!中国!不!c++cn.s!不!c;g=立方厘米}
修改:示例
英语
意大利语(“红酒”、“红屋”)
马斯克 |
红葡萄酒 |
红葡萄酒 |
股骨 |
卡萨·罗萨 |
凯斯·罗斯 |
芬兰语(“红房子”)
修改:变化
形容词短语的位置
- 意大利语:卡萨·罗萨,维基亚casa(“红房子”、“老房子”)
- 英语:旧房子,与此类似的房子
形容词的特异性参数
- 德语:ein rotes Haus公司与。das rote Haus公司(“红房子”vs.“红房子“)
词汇插入
要“开始”每个类别,请使用词典中的单词。
有词汇插入函数对于每个词汇类别:
用法N:N->CN使用A:A->AP使用V:V->VP
线性化规则通常很简单,因为林肯猫
s匹配
lin使用n n=nlin使用a a=alin使用v v=v
然而,对于使用V
尤其是,这通常会更加复杂。
短语的开头
插入的单词是头从中构建的短语:
通常有很多例外和修改,
- 可变特征从短语传递到标题
- 头部的固有特征由名词继承
这适用于向心的短语:标题与完整短语的类型相同。
名词短语的词头是什么?
在一个NP公司
形式的检测CN
,是Det公司
或中国
头部?
实际上两者都不是,因为功能是双向传递的:
lin DetCN det cn={s=\\c=>详细信息!中国!c++cn.s!详细信息!c;a=agr cn.g det.n Per3}
此外,这NP公司
是偏心的:没有任何部分与整体的类型相同。
结构词
结构词=虚词,具有特殊语法功能的单词
- 限定符:这个,这,每一个
- 代词:我,她
- 连词:和,或,但是
通常是的成员封闭类这意味着从未(或很少)向他们介绍新单词。
线性化类型通常是特定的,屈折变化是不规则的。
意大利语小型资源文法
我们将其分为五个模块——比全部资源少得多!
抽象语法——句法猫和笑话abstract Lang=语法**…--添加到语法中的测试词典resource ResIta--意大利语资源具体语法Ita of Grammar=open ResIta in…--意大利语语法语言的具体语言=语法**在…--It.lexicon中打开ResIta
延伸与开放
模块扩展:N=M1、M2、M3**{…}
模块打开:N=打开{…}中的R1、R2、R3
- 模块
N个
可以使用来自R1、R2、R3
(但没有继承它们)
模块依赖性

矩形=抽象,实心椭圆=具体,虚线椭圆=资源
生成依赖关系图
使用命令分布式电源
=依赖关系图
和graphviz
>i-保留LangIta.gf>依赖关系图在文件gfdepgraph.dot中写入图形> ! dot-Tjpg_gfdepgraph.dot>测试dep.jpg
通话前点
,卸下模块Predef公司
以节省空间。
语法模块
抽象语法={猫氯;NP;副总裁;AP;中国;检测;N;A;V;V2;乐趣PredVP:NP->VP->Cl;完成2:V2->NP->VP;DetCN:Det->CN->NP;ModCN:CN->AP->CN;使用V:V->VP;用法N:N->CN;使用A:A->AP;a_Det,即_Det:Det;this_Det,these_Det:检测;i_NP,she_NP,we_NP:NP;}
参数
参数定义见ResIta.gf公司
56种动词形式中只有11种。
编号=Sg|Pl;性别=Masc|Fem;案例=Nom|Acc|Dat;Aux=Avere|Essere;--动词的助动词时态=Pres|Perf;个人=Per1|Per2|Per3;Agr=Ag性别编号人员;VForm=VInf|VPres编号人员|VPart性别编号;
意大利语动词短语
动词短语在句法上的时态和一致性
Ag Masc Sg Per1公司 |
阿利沃 |
索诺·阿里瓦托 |
Ag-Fem Sg Per1(Ag-Fem-Sg Per1) |
阿利沃 |
到达声 |
Ag Masc Sg Per2公司 |
到达 |
地震到达 |
Ag-Fe-Sg-Per2 |
到达 |
sei arrivata公司 |
Ag Masc Sg Per3公司 |
到达 |
艾瑞瓦托 |
Ag Fem Sg Per3每3 |
到达 |
艾瑞瓦塔 |
Ag Masc Pl每1 |
到达 |
斯亚莫·阿里瓦蒂 |
Ag-Fem Pl每1 |
到达 |
西莫·阿里维尔 |
Ag Masc Pl Per2公司 |
无公害的 |
到达锡耶特 |
Ag-Fem Pl-Per2 |
无公害的 |
siete arrivate公司 |
Ag Masc Pl每3 |
到达 |
索诺·阿里瓦蒂 |
Ag-Fem Pl每3 |
到达 |
索诺·阿里维尔 |
VInf公司 |
到达 |
VPres序列Per1 |
阿利沃 |
VPres序列Per2 |
到达 |
VPres序列Per3 |
到达 |
VPres Pl每1 |
到达 |
VPres Pl每2 |
无公害的 |
VPres Pl每3 |
到达 |
VPart Masc Sg公司 |
到达 |
VPart女性Sg |
到达 |
VPart Masc公共有限公司 |
到达 |
VPart女性Pl |
无公害的 |
固有特征:辅助的
是埃塞尔.
动词短语类型
词汇插入图V(V)
到副总裁
.
两种可能性副总裁
:要么接近氯
,
lincat VP={s:时态=>Agr=>Str}
或接近V(V)
,只需在动词中添加一个clitic和一个object,
lincat VP={v:Verb;clit:Str;obj:Str};
我们选择后者。它的解析效率更高。
词汇插入是微不足道的。
lin UseV v={v=v;clit,obj=[]}
互补假设NP公司
有一个阴蒂和一个普通的客体部分。
lin完成2=让nps=np.s!v2.c版英寸{v={s=v2.s;aux=v2.aux};clit=nps.clit;对象=nps.obj}
意大利语名词短语
性欲取决于具体情况
lincat NP={s:Case=>{clit,obj:Str};a:农业};
示例:
lin-she_NP={s=表格{Nom=>{clit=[];obj=“lei”};帐户=>{clit=“la”;对象=[]};日期=>{clit=“le”;对象=[]}} ;a=Ag-Fem Sg Per3}lin John_NP={s=表格{Nom|Acc=>{clit=[];obj=“Giovanni”};Dat=>{clit=[];obj=“乔瓦尼”}} ;a=Ag-Fem Sg Per3}
名词短语:或者
使用特征而不是单独的字段,
lincat NP={s:Case=>{s:Str;isClit:Bool};a:农业};
单独字段的使用效率更高,并且可以更好地扩展到多个气候位置。
确定
没有惊喜
lincat Det={s:性别=>案例=>结构;n:数字};lin DetCN det cn={s=\\c=>{obj=det.s!cn.g!c++cn.s!det.n;clit=[]};a=Ag cn.g det.n Per3} ;
建筑限定符
通常来自形容词:
lin this_Det=adjDet(mkA“questo”)Sg;lin these_Det=adjDet(mkA“questo”)Pl;oper prepCase:案例->Str=\c->案例c,共个{Dat=>“a”;_ => []} ;运算adjDet:调整->数字->决定符=\Adj,n->{s=\\g,c=>prepCase c++adj.s!克!n;n=n} ;
文章:参见语法Ita.gf
形容词修饰
回忆位置的固有特征
lincat AP={s:性别=>数量=>结构;isPre:Bool};lin ModCN cn ap={s=\\n=>preOrPost ap.isPre(ap.s!cn.g!n)(cn.s!n);g=立方厘米} ;
显然,可以使用单独的前部件和后部件来代替。
意大利形态学
复杂但最有趣的是:
regNoun:Str->Noun=\vino->case vino of{fuo+c@(“c”|“g”)+“o”=>mkNoun vino(fuo+c+“hi”)Masc;ol+“io”=>mkNoun vino(ol+“i”)Masc;vin+“o”=>mkNoun vino(vin+“i”)Masc;cas+“a”=>mkNoun vino(cas+“e”)Fem;pan+“e”=>mkNoun vino(pan+“i”)Masc;_=>mkNoun vino vino Masc(葡萄酒大师)} ;
请参见ResIta公司
了解更多详细信息。
最后是预言
放置宾语和连接词,并选择动词形式。
lin PredVP副总裁=让sub=(np.s!Nom).obj;obj=vp.obj;clit=vp.clit;动词=表格{压力=>agrV vp.v np.a;性能=>agrV(auxVerb vp.v.aux)np.a++agrPart vp.v np.a}英寸{s=\\t=>sub++clit++动词!t++对象} ;
我们需要现在时态
oper agrV:动词->农业->Str=\v,a->第a种情况{Ag _ n p=>v.s!VPres n p公司} ;
如果助词是埃塞尔
操作agrPart:动词->Agr->Str=\v,a->case v.aux,共{Avere=>v.s!VPart Masc Sg;Essere=>案例a{Ag g n _=>v.s!V零件g n}} ;
待办事项
有关核心资源语法的详细信息,请参阅ResIta公司
(150 loc)和语法Ita
(80处)。
有一件事还没有做对:分词与宾语从句的一致性:现在它给出了io-la-ho-amato先生,而不是io la ho amata先生.
这是一个练习!
印地语/乌尔都语的发音
通常,主语是主格,动词与主语一致。
然而,在完成时态中:
- 及物动词的主语是作格“格”(助词)氖)
- 动词与宾语一致
示例:“男孩/女孩吃苹果/面包”
马斯克 |
马斯克 |
拉德卡:塞布·卡:塔:海 |
ladke ne seb Ka:你: |
马斯克 |
股骨 |
拉德卡:罗蒂:卡:塔:海 |
ladke ne roTi:Ka:yi(拉丁语): |
股骨 |
马斯克 |
ladki:seb Ka:ti:海 |
ladki:ne seb Ka:你: |
股骨 |
股骨 |
ladki:roTi:Ka:ti:hai |
ladki:ne roTi:Ka:yi(拉丁语): |
不同时态的印地语从句

练习
1.学习命令依赖关系图
,打印语法
,系统逃逸!
、和系统管道?
.
2.写下目标语言关键句法功能的示例表,尽量包括所有可能的形式。
3.实施语法
和冗长的
针对您的目标语言。
4.即使你不懂意大利语可以试试这个:在中添加参数或其他内容语法Ita
执行完成时态分词与宾格连词在性别和数量上一致的规则。用句子测试一下雷拉哈阿玛塔和雷次哈马蒂(当前语法给出阿马托在这两种情况下)。
5.学习一些语言学!我最喜欢的书是理论语言学导论约翰·莱昂斯(剑桥,1968年,至少14个版本)。
在应用程序中使用资源语法库
目录
软件库:程序员与用户视图
语义语法与句法语法
语义语法示例及其实现
接口和参数化模块
自由变化
资源语法API概述
软件库
可重用函数/类型/类的集合
美国石油学会=应用程序设计员界面
示例:Haskell、C++、Java…中的映射(查找表、散列映射)。。。
类型映射查找:键->映射->val更新:key->val->Map->Map
隐藏:类型的定义地图
和函数的查找
和更新
.
软件库的优势
程序员有
- 编写的代码更少(例如。怎样查找)
- 需要学习的技术较少(例如高效的地图数据结构)
可以继承改进和错误修复
语法作为软件库
作为形态学API的智能范式
mkN:(talo:Str)->N
抽象语法作为语法组合的API
预处理VP:NP->VP->Cl完成2:V2->NP->VP数字CN:Num->CN->NP
使用库:自然语言输出
任务:在电子邮件程序中,生成以下短语您有n条消息(秒)
问题:避免你有一条消息
解决方案:使用库
PredVP youSg_NP(CompleV2 have_V2(NumCN two_Num(UseN(mkN“消息”)))===>您有两条消息PredVP youSg_NP(CompleV2 have_V2(NumCN one_Num(UseN(mkN“消息”)))===>您有一条消息
软件本地化
将电子邮件程序改编为意大利语、芬兰语、阿拉伯语。。。
PredVP youSg_NP(CompleV2 have_V2(NumCN two_Num(UseN(mkN“消息”)))===>hai到期消息PredVP youSg_NP(CompleV2 have_V2(NumCN two_Num(UseN(mkN“viesti”)))卡克西·维埃斯蒂的辛努拉PredVP youSg_NP(CompleV2 have_V2(NumCN two_Num(UseN(mkN“risaAlat.u.”)))卡克西·维埃斯蒂的辛努拉
新语言比英语更复杂,但只是内部语言,而不是API级别的语言!
阿拉伯数字正确

(摘自Ali Dada的《阿拉伯数字及其语法在GF中的实现》,ACL阿拉伯语研讨会,布拉格,2007年)
语法库的用例
语法需要非常许多的非常专业知识,以及许多对于软件库来说,这是一个很好的主题!
语法已被证明有用的一些应用程序:
- 软件本地化
- 自然语言生成(从形式化内容)
- 技术翻译
- 口语对话系统
两种语法学家
应用程序语法与。资源语法学家
专业知识 |
应用程序域 |
语言学 |
编程技能 |
一般编程 |
GF编程 |
语言技能 |
实际使用 |
理论知识 |
我们想要一个分工.
两种语法
应用程序语法与。资源语法
抽象语法 |
语义的 |
句法 |
具体语法 |
使用资源API |
参数、表格、记录 |
词典 |
惯用、技术 |
只是为了测试 |
大小 |
小或大 |
大的 |
也就是说。语义语法与。句法语法.
有意义的翻译
翻译必须保留意义。
它不需要保留句法结构。
有时甚至是不可能的:
语义语法中的抽象语法是一个逻辑谓词:
趣味爱好:人物->人物->事实lin喜欢x y=x++“喜欢”++y--英语lin喜欢x y=y++“piace”++“a”++x--意大利语
翻译和资源语法
为了获得正确的语法细节,我们使用资源语法而不是字符串
lincat Person=NP;事实=Cl;lin Like x y=PredVP x(CompleV2 Like _V2 y)--英语lin Like x y=PredVP y(CompleV2 piacere_V2 x)--意大利语
从句法角度来看,我们执行转移即结构变化。
GF有编译时传输,并在运行时使用中间语言(语义抽象语法)。
领域语义
“英语语义学”,或任何其他自然语言的整体语义学,从未建立。
具有以下语义更可行碎片-自然语言中理解力强的小部分。
这种语言被称为领域语言及其语义,领域语义.
领域语义=本体论在语义Web术语中。
域语义示例
用各种形式语言表达
- 谓词逻辑中的数学
- 软件功能,在UML/OCL中
- SISR中的对话系统操作
- OWL中的博物馆对象描述
GF抽象语法可以用于任何这些!
社区页面上可以表达什么信息?
抽象面={标志startcat=消息;猫消息;人;对象;编号;乐趣有:人->号码->对象->消息;--p没有例如:人员->对象->消息;--p喜欢o你:人;朋友,邀请:对象;一、二、百:数字;}
请注意启动
标志,因为起始类别不是S公司
.
呈现资源语法
实际上,资源语法的抽象语法很不方便
我们的操作与形态学中的操作相同:重载操作,命名为百万
C类哪里C类是值类别。
资源定义了例如。
mkCl:NP->V2->NP->Cl=\sub,动词,obj->PredVP sub(CompleV2动词obj)mkCl:NP->V->Cl=\sub,动词->PredVP sub(UseV动词)
“脸”资源语法API的相关部分
使用这些功能(其中一些是结构词)。
mkCl:NP->V2->NP->Cl |
约翰爱玛丽 |
mkNP:数字->CN->NP |
五辆汽车 |
mkNP:数量->中国->NP |
那辆车 |
mkNP:Pron->NP |
我们 |
mkCN:N->中国 |
汽车 |
this_Quant:数量 |
这个,这些 |
youSg_Pron:Pron |
你(单数) |
n1_Numeral,n2_Numeral:数字 |
一,二 |
n100_数字:数字 |
一百 |
有_V2:V2 |
有 |
英语的具体语法
如何使用库来表达消息?
concrete FaceEng of Face=开放语法Eng,ParadigmsEng in{林肯猫消息=Cl;人=NP;对象=CN;数字=数字;林使p n o=mkCl p Have_V2(mkNP n o);Like p o=mkCl p Like _V2(mkNP this_Quant o);You=mkNP-youSg_Pron;Friend=mkCN Friend_N;邀请=mkCN Invitation_N;一=n1_Numeral;二=n2_Numeral;百=n100_数字;操作人员like_V2=mkV2“喜欢”;invitation_N=mkN“邀请”;friend_N=mkN“朋友”;}
芬兰语的具体语法
如何使用库来表达消息?
concrete FaceFin of Face=开放语法Fin,ParadigmsFin in{林肯猫消息=Cl;人=NP;对象=CN;数字=数字;林使p n o=mkCl p Have_V2(mkNP n o);Like p o=mkCl p Like _V2(mkNP this_Quant o);You=mkNP-youSg_Pron;Friend=mkCN Friend_N;邀请=mkCN Invitation_N;一=n1_Numeral;二=n2_Numeral;百=n100_数字;操作人员like_V2=mkV2“pitää”relative;invitation_N=mkN“kutsu”;friend_N=mkN“ystävä”;}
函数和接口
英语和芬兰语:相同的组合规则,只有不同的单词!
我们能避免重复林肯猫
和林
代码?对!
新模块类型:函子,又名。不完整的或参数化的模块
不完整的具体FaceI of Face=开放语法,LexFace in。。。
函子可以打开接口.
接口具有操作人员
声明只包含一个类型,没有定义。
在这里,语法
和LexFace公司
是接口。
域词典接口
语法
是资源语法接口,并提供
中未给出内容词语法
,但在领域词典
interface LexFace=open语法{操作人员类似于V2:V2;邀请编号:N;好友N:N;}
具体语法函子“FaceI”
不完整的具体FaceI of Face=开放语法,LexFace in{林肯猫消息=Cl;人=NP;对象=CN;数字=数字;林使p n o=mkCl p Have_V2(mkNP n o);Like p o=mkCl p Like _V2(mkNP this_Quant o);You=mkNP-youSg_Pron;Friend=mkCN Friend_N;邀请=mkCN Invitation_N;一=n1_Numeral;二=n2_Numeral;百=n100_数字;}
领域词典的英语实例
定义英语领域单词
example LexFaceEng of LexFace=打开SyntaxEng,ParadigmsEng in{操作人员like_V2=mkV2“喜欢”;invitation_N=mkN“邀请”;friend_N=mkN“朋友”;}
将所有内容放在一起:函数实例化
实例化函子人脸I
通过为其接口提供实例
--#-路径=。:目前混凝土面工程面=面I(语法=SyntaxEng),(LexFace=LexFaceEng);
还要注意域搜索路径。
将语法移植到芬兰语
1.领域词汇:使用芬兰语范型和单词
instance LexFaceFin of LexFace=打开SyntaxFin,ParadigmsFin in{操作人员like _V2=mkV2(mkV“pitää”)相关;invitation_N=mkN“kutsu”;friend_N=mkN“ystävä”;}
2.函数实例化:机械改变工程
到翅片
--#-路径=。:目前混凝土面面鳍=面I(语法=SyntaxFin),(LexFace=LexFaceFin);
领域语法模块:“Face”社区
1.抽象语法,面对
2.参数化的具体语法:人脸I
3.领域词典接口:LexFace公司
4.对于每种语言L(左):域词典实例LexFace公司
L(左)
5.对于每种语言L(左):具体语法实例化面对
L(左)
模块依赖关系图

红色=待办事项,橙色=待办(琐碎),蓝色=待办事务(一次),绿色=库
将语法移植到意大利语
1.领域词汇:使用意大利语范例和单词
instance LexFaceIta of LexFace=打开语法Ita,ParadigmsIta in{操作人员like _V2=mkV2(mkV(piacere_64“piacere”)日期;invitation_N=mkN“invito”;friend_N=mkN“朋友”;}
2.函数实例化:限制继承,不包括喜欢
混凝土面Ita of Face=FaceI-[Like](语法=SyntaxIta),(LexFace=LexFaceIta)**在中打开SyntaxIta{lin喜欢p o=mkCl(mkNP this_Quant o)类似于V2 p;}
自由变化
可能有许多的表达给定语义结构的方式。
这可以用变体操作人员|
.
趣味购物券:城市->城市->请求lin购买票x y=((“我想要”++((“买”|[])++(“票”)|“去”))|((“你能”|[])++“给我”++“一张票”)|[]) ++“从”++x++“到”++y
这些变体当然也可以是资源语法表达式。
资源语法API概述
有关完整故事,请参阅资源语法概要在里面
语法框架.org/lib/doc/synopsis.html
主要部门:
语法
,所有语言通用
范例
L(左),特定于语言L(左)
主要类别及其依赖关系

复杂短语的类别
文本 |
语序 |
约翰走路吗?对。 |
乌特 |
言语 |
约翰走路吗 |
Imp公司 |
命令 |
不要走路 |
S公司 |
衰老(固定时态) |
约翰不会走路 |
质量体系 |
疑问句 |
没有走路的人 |
氯 |
子句(可变时态) |
约翰走路 |
QCl公司 |
疑问句 |
不会走路的人 |
副总裁 |
动词短语 |
爱她 |
AP公司 |
形容词短语 |
非常年轻 |
中国 |
常用名词短语 |
年轻人 |
副词 |
状语短语 |
在房子里 |
构建谓词的词汇类别
A类 |
一位形容词 |
- |
聪明的 |
A2类 |
两位形容词 |
NP公司 |
已婚的(对她来说) |
副词 |
副词 |
- |
在这里 |
N个 |
普通名词 |
- |
男人 |
氮气 |
关系名词 |
NP公司 |
朋友(约翰的) |
NP公司 |
名词短语 |
- |
老板 |
V(V) |
一位动词 |
- |
睡觉 |
第2版 |
双位动词 |
NP公司 |
爱(她) |
第3版 |
三位动词 |
NP公司 ,NP公司 |
显示(对我来说) |
VS公司 |
句子复合动词 |
S公司 |
说(我在跑步) |
VV公司 |
动词补语动词 |
副总裁 |
希望(运行) |
用于构建谓词子句的函数
mkCl公司 |
NP->V->Cl |
约翰走路 |
mkCl公司 |
NP->V2->NP->Cl |
约翰爱她 |
mkCl公司 |
NP->V3->NP->NP->氯 |
约翰把它寄给了她 |
mkCl公司 |
NP->VV->VP->Cl |
约翰想走路 |
mkCl公司 |
NP->VS->S->Cl |
约翰说这很好 |
mkCl公司 |
NP->A->Cl |
约翰老了 |
mkCl公司 |
NP->A->NP->Cl |
约翰比玛丽大 |
mkCl公司 |
NP->A2->NP->Cl |
约翰和她结婚了 |
mkCl公司 |
NP->AP->Cl |
约翰很老了 |
mkCl公司 |
NP->N->Cl |
约翰是个男人 |
mkCl公司 |
NP->CN->Cl |
约翰是个老人 |
mkCl公司 |
NP->NP->Cl |
约翰就是那个人 |
mkCl公司 |
NP->高级->氯 |
约翰来了 |
名词短语和常用名词
mkNP公司 |
数量->中国->NP |
这个男人 |
mkNP公司 |
数字->CN->NP |
五个人 |
mkNP公司 |
PN->NP |
约翰 |
mkNP公司 |
前->NP |
我们 |
mkNP公司 |
数量->数量->CN->NP |
这(五)个人 |
mkCN公司 |
N->中国 |
男人 |
mkCN公司 |
A->N->中国 |
老人 |
mkCN公司 |
亚太地区->中国->中国 |
非常老的中国人 |
mk编号 |
数字->数字 |
五 |
n100_数字 |
数字 |
一百 |
plNum编号 |
号码 |
(复数) |
问题和疑问句
mkQCl公司 |
Cl->QCl |
约翰走路吗 |
mkQCl公司 |
IP->V->QCl |
谁会走路 |
mkQCl公司 |
IP->V2->NP->QCl |
谁爱她 |
mkQCl公司 |
IP->NP->V2->QCl |
她爱谁 |
mkQCl公司 |
IP->AP->QCl |
谁老了 |
mkQCl公司 |
IP->NP->QCl |
谁是老板 |
mkQCl公司 |
IP->高级->QCl |
谁在这里 |
mkQCl公司 |
IAdv->Cl->QCl |
约翰走在哪里 |
mkIP公司 |
中国->IP |
哪辆车 |
谁(_IP) |
IP(IP) |
谁 |
为什么是IAdv |
IAdv公司 |
为什么? |
其中_高级 |
IAdv公司 |
哪里 |
mkS公司 |
氯->硫 |
他走路 |
mkS公司 |
(时态)->(Ant)->(Pol)->Cl->S |
他就不会走路了 |
mkQS公司 |
QCl->QS |
他走路吗 |
mkQS公司 |
(时态)->(Ant)->(Pol)->QCl->QS |
他不会走路吗 |
条件时态 |
时态 |
(他会走路) |
未来时态 |
时态 |
(他会走路) |
过去时态 |
时态 |
(他走路了) |
present时态 |
时态 |
(他走路)[默认] |
前蚂蚁 |
蚂蚁 |
(他已经走了) |
阴性Pol |
波尔 |
(他不会走路) |
言语和命令
mkUtt公司 |
Cl->Utt(氯->Utt) |
他走路 |
mkUtt公司 |
S->Utt公司 |
他没有走路 |
mkUtt公司 |
QS->Utt公司 |
没有走路的人 |
mkUtt公司 |
Imp->Utt(输入->输出) |
步行 |
mkImp公司 |
V->增强 |
步行 |
mkImp公司 |
V2->NP->Imp |
找到它 |
mkImp公司 |
AP->Imp公司 |
勇敢 |
更多
文本:谁会走路?厕所。在哪里?在这里!
关系子句:拥有一头驴的人
副词:在房子里
次级连接:如果一个人拥有一头驴
协调:约翰和玛丽是英国人还是美国人
练习
1.编译并提供最新版本的资源语法库。编译依据制作
在里面GF/库/src
。通过设置使其可用GF_LIB_PATH
到GF/库
.
2.编译和测试语法面/面
L(左)(在课程源文件中提供)。
3.写一个具体的语法面对
对于其他一些资源语言,通过添加域词典和函子实例化。
4.将函数添加到面对
并至少为某些语言编写具体的语法。
5.设计你自己的领域语法,并为一些语言实现它。
开发GF资源语法
目录
模块结构
统计
如何开始构建新语言
如何测试资源语法
任务
主要模块结构

实体=API,虚线=内部,椭圆=抽象+具体,矩形=资源/实例,菱形=接口,绿色=给定,蓝色=机械,红色=待办
分工
由资源语法师编写:
- 排的混凝土
结构
到动词
- 混凝土
猫
和词典
范例
- 抽象与具体
额外
,不规则
已经机械给出或推导:
- 所有抽象模块,除了
额外
,不规则
- 混凝土
通用
,语法
,冗长的
,全部
建造师
,语法
,尝试
模块的角色:库API
语法
:句法组合和结构词
范例
:形态学范式
尝试
:(几乎)所有东西都放在一起
建造师
:仅语法组合
不规则
:不规则屈折词(主要是动词)
模块的角色:顶级语法
冗长的
:常见语法和词汇
全部
:通用语法和依赖语言的扩展
语法
:通用语法
结构
:结构词词典
词典
:测试300个内容词的词典
猫
:通用类型系统
通用
:语言常用的具体语法
模块的角色:短语类别
形容词 |
形容词 |
AP公司 |
副词 |
副词片语 |
AdN、Adv |
汇合点 |
协调 |
高级、AP、NP、RS、S |
成语 |
习惯用语 |
Cl、QCl、Utt副总裁 |
名词 |
名词短语和名词 |
卡片、中国大陆、德国、NP、数字、订单 |
数字 |
基数和序数 |
数字,数字 |
短语 |
超句子短语 |
PConj、Phr、Utt、Voc |
问题 |
疑问句和疑问句 |
IAdv、IComp、IDet、IP、QCl |
相对 |
相对。从句和代词 |
RCl、RP |
句子 |
从句和句子 |
Cl、Imp、QS、RS、S、SC、S闪存 |
文本 |
多短语文本 |
文本 |
动词 |
动词短语 |
公司、副总裁、副总裁 |
类型纪律和一致性
生产商:每个短语类别模块都是上一张幻灯片中列出的价值类别的生产者。
消费者:所有模块都可以使用任何类别作为参数类型。
合同:模块猫
定义消费者和生产者通用的类型系统。
不同的语法学家可以安全地为不同的制作人工作。
这甚至适用于类别的相互依赖:
句子.UseCl:Temp->Pol->Cl->S——S使用Cl句子.PredVP:VP->NP->Cl——使用VP动词ComplVS:VS->S->VP——使用S
辅助模块
资源
库提供的模块:
前奏曲
和Predef公司
:字符串操作,布尔值
协调
:列表连词的一般形式
参数X
:常用参数,如编号=Sg|Pl
资源
语法学家编写的模块:
雷斯
:特定于语言的参数类型、形态学、VP形成
吗啡
,Phono(电话)
,...: 可能的划分雷斯
到更多模块
依赖关系
大多数短语类别模块:
动词的具体动词=CatGer**打开ResGer,前奏。。。
连接:
连接的具体连接Ger=CatGer**开放式协调、ResGer、前奏曲。。。
词汇:
Lexicon=CatGer的具体LexiconGer**打开ParadigmsGer,在中打开IrregGer{
函数式编程风格
黄金法则:每当你发现自己通过复制和粘贴进行编程时,就写一个函数!
在一个定义中重复:使用让
表达
在一个模块内重复:定义一个操作人员
在同一模块中
在许多模块中重复:定义操作人员
在中雷斯
模块
- 重复整个模块:编写一个函子
资源语法库中的函数
在语系中使用
- 浪漫:加泰罗尼亚语、法语、意大利语、西班牙语
- 斯堪的纳维亚语:丹麦语、挪威语、瑞典语
结构:
通用
,家庭的共同资源
差异
,通过接口扩展的最小接口雷斯
猫
和短语结构模块是上的函子雷斯
成语
,结构
,词典
,范例
是普通模块
示例:DiffRomance
当然,单词和词法是不同的,我们还没有尝试过形式化。
在语法上,只有八个参数从根本上起了作用:
与文章融合的介词(Fre,Spa判定元件,一; Ita也反对的论点,数据采集,在里面,苏).
param Prepos;
就助词而言,存在哪些类型的动词。(法语,意大利语阿维尔,存在,存在和refl;仅限水疗哈伯和ref)。
参数VType;
派生词,如果/当分词与主语一致时。(弗雷elle est党,意大利莱耶·帕提塔,水疗不)
oper-partAgr:VType->VPAgr;
分词是否同意前面的clitic。(弗雷我爱你,水疗悠悠乐和远景)
运营vpAgrClit:农业->VPAgr;
介词是否与连词(Fre)重复第三天晚上和第四天晚上,意大利拉索玛di 3 e 4).
操作连接案例:NPForm->NPForm;
不定式和阴蒂是如何相对放置的(Fre拉沃瓦,意大利维德拉). 这个布尔
用于指示是否有阴蒂。
操作clitInf:Bool->Str->Str->Str;
将代词变元表示为修饰语和/或普通补语。退换商品真的
如果有阴蒂。
操作pronArg:数字->人->CAgr->CAgr->Str*Str*Bool;
表达命令(用阴蒂等)。
操作mkImperative:Bool->Person->VPC->{s:Polarity=>AAgr=>Str};
函子的正反
+
智力满足:语言概括
+
代码可以共享:语法代码中,罗曼斯语占75%,斯堪的纳维亚语占85%
+
bug修复和维护通常也可以共享
+
添加同一家族的新语言非常容易
-
很难从正确的抽象开始
-
新语言可能需要扩展接口
工作流:不要从functor开始,而是通常使用一种语言,并将其重构为接口、functor和实例。
关于新语言函子的建议
浪漫:葡萄牙语可能使用functor,罗马尼亚语可能独立
日耳曼语:荷兰语可能来自德语,冰岛可能独立
斯拉夫语:保加利亚人和俄罗斯人不是模仿者,可能是西斯拉夫人(捷克人、斯洛伐克人、波兰人)和南斯拉夫(保加利亚人)的模仿者
芬诺-美国:爱沙尼亚语可能是芬兰语的仿词
印地语:印地语和乌尔都语肯定是通过仿函数
闪米特语:阿拉伯语、希伯来语、马耳他语可能独立
工作量统计,完成的语言
常见的 |
413 |
- |
- |
413 |
2 |
2001 |
摘要 |
729 |
- |
468 |
1197 |
24 |
2001 |
保加利亚语 |
1200 |
2329 |
502 |
4031 |
三 |
2008 |
英语 |
1025 |
772 |
506 |
2303 |
6 |
2001 |
芬兰语 |
1471 |
1490 |
703 |
3664 |
6 |
2003 |
德国的 |
1337 |
604 |
492 |
2433 |
6 |
2002 |
俄语 |
1492 |
3668 |
534 |
5694 |
18 |
2002 |
浪漫 |
1346 |
- |
- |
1346 |
10 |
2003 |
加泰罗尼亚语 |
521 |
*9000 |
518 |
*10039 |
4 |
2006 |
法语 |
468 |
1789 |
514 |
2771 |
6 |
2002 |
意大利人 |
423 |
*7423 |
500 |
*8346 |
三 |
2003 |
西班牙的 |
417 |
*6549 |
516 |
*7482 |
三 |
2004 |
斯堪的纳维亚语 |
1293 |
- |
- |
1293 |
4 |
2005 |
丹麦语 |
262 |
683 |
486 |
1431 |
2 |
2005 |
挪威语 |
281 |
676 |
488 |
1445 |
2 |
2005 |
瑞典的 |
280 |
717 |
491 |
1488 |
4 |
2001 |
全部的 |
12545 |
*36700 |
6718 |
*55963 |
103 |
2001 |
2009年4月的源代码行,粗略估计人月数。*=生成的代码。
如何开始构建语言,例如马拉地语
1.创建目录GF/lib/src/马拉地
2.查看ISO 639-3语言代码:3月
3.从最接近的相关语言复制文件,例如。印度语
4.重命名文件马拉地语/*Hin.gf
到马拉地语/*三月
5.变更进口Hin公司
要导入的模块3月
模块
6.注释掉中间的每一行收割台 {
和决赛}
7.现在您可以导入(空)语法:i马拉地语/LangMar.gf
继续使用语言的建议顺序
1ResMar公司
:名词所需的参数类型
2CatMar公司
:林卡特N
三。范例Mar
:一些常规名词范例
4LexiconMar公司
:新范式涵盖的一些单词
5.(1.-4.)用于V(V)
,也许用现在时态
6ResMar公司
:所需的参数类型Cl、CN、Det、NP、Quant、VP
7CatMar公司
:lincat Cl、CN、Det、NP、Quant、VP
8名词马尔
:lin DetCN、DetQuant
9动词Mar
:使用中V
10判刑标志
:林PredVP
非ASCII语言的字符编码
GF内部:32位unicode
生成的文件(.gfo型
,.pgf(磅/平方英尺)
):UTF-8
源文件:任何您想要的,但如果不是isolatin-1,则使用标记。
UTF-8和cp1251(西里尔文)可以在字符串中使用,但不能在标识符中使用。模块必须包含
标志编码=utf8;--OR编码=cp1251
音译可用于许多字母(请参见帮助unicode表(_T)
).
使用音译
这是你必须添加的内容GF/src/GF/文本/音译.hs
音译希伯来语::音译transHebrew=mk音译allTrans-allCodes,其中allTrans=单词$“A b g d h w z h T y K l M M N”++“n S O P P Z.Z q r S t----”++“w2 w3 y2 g1 g2”所有代码=[0x05d0..0x05f4]
还编辑中的几个位置GF/src/GF/Command/Commands.hs
.
您可以稍后将文件转换为UTF-8(请参见帮助put_string
).
沿途的诊断方法
确保你有一个compilable朗玛
任何时候!
使用GF命令pg-缺失
检查缺少哪些功能。
使用GF命令gr-cat=C|l-表格
测试C类
使用树库进行回归测试
建立和维护树库:一组树及其线性化:
1.创建文件测试树
只有树,一棵接一棵。
2.将每棵树线性化为所有形式,可能使用英语进行比较。
>i英语/LangEng.gf>i马拉地语/LangMar.gf>rf-lines-tree-file=测试树|l-all-treebank | wf-file=test.treebank
3.创建金本位制 金树银行
从测试树库
通过手动修正马拉地线性化。
4.与Unix命令进行比较差异测试.treebank gold.treebanks
5.每次更改具体语法后,重新运行(2.)和(4.);在每个新实现的功能之后,扩展树集和黄金标准。
来源
A类好的语法书
A类好的词典
- 单词的屈折变化信息
- 动词次范畴化(即补语的格和介词)
维基百科关于语言的文章
谷歌作为“金标准”:是吗芝麻菜或巧克力?
谷歌翻译建议(但不可信!)
编译库
当前开发库源位于GF/库/src
.
使用制作
在此目录中编译库。
使用runghc生成lang-api-langs=Mar
只编译语言3月
.
任务:良好的开端
1.为目标语言构建一个目录和一组文件。
2.实现一些类别、形态范式和语法规则。
3.给出林
规则中至少有100个条目词典
.
4.发送给我们:您的源文件和一个包含100棵树的树库,并用英语和您的目标语言进行线性化。这些线性化应该是正确的,并且直接从语法实现中生成。