编译程序实质上不是专家系统。尽管编译器可以使用一些类似于专家系统的技术,比如基于规则的机器学习方法,但它们并不一定要使用这些技术。编译器是一种将高级语言转换为计算机可执行代码的程序,它需要遵循特定的逻辑和算法来完成这个过程。
专家系统是指一种人工智能技术,它基于知识库和推理机制,能够解决某个特定领域内的问题。与编译器相比,专家系统更注重知识的表示和推理,以便能够给出正确的答案或建议。虽然编译器也能够在一定程度上处理语义和推理,但它主要的目标是将高级语言翻译成机器码,而不是提供专业的领域知识。
因此,虽然编译程序使用了一定的自动化技术,但它不能完全等同于专家系统,两者在目标、机制和应用范围等方面都存在较大的差异。
如何度量句子的语义相似度,很容易想到的是向量空间模型(VSM)和编辑距离的方法,比如A:“我爸是李刚”,B:“我儿子是李刚”,利用VSM方法A(我,爸,是,李刚)B(我,儿子,是,李刚),计算两个向量的夹角余弦值,不赘述;编辑距离就更好说了将“爸”,“儿子”分别替换掉,D(A,B)= replace_cost;
这是两种相当呆的方法,属于baseline中的baseline,换两个例子看一下就知道A:“楼房如何建造?”,B:“高尔夫球怎么打?”,C:“房子怎么盖?”,如果用VSM算很明显由于B,C中有共同的词“怎么”,所以BC相似度高于AC;编辑距离同理;
解决这种问题方法也不难,只要通过同义词词典对所有句子进行扩展,“如何”、“怎么”,“楼房”、“房子”都是同义词或者近义词,扩展后再算vsm或者edit distance对这一问题即可正解。这种方法一定程度上解决了召回率低的问题,但是扩展后引入噪声在所难免,尤其若原句中含有多义词时。例如:“打酱油”、“打毛衣”。在汉字中有些单字词表达了相当多的意义,在董振东先生的知网(hownet)中对这种类型汉字有很好的语义关系解释,通过hownet中词语到义元的树状结构可以对对词语粒度的形似度进行度量。
问题到这里似乎得到了不错的解答,但实际中远远不够。VSM的方法把句子中的词语看做相互独立的特征,忽略了句子序列关系、位置关系对句子语义的影响;Edit Distance考虑了句子中词语顺序关系,但是这种关系是机械的置换、移动、删除、添加,实际中每个词语表达了不同的信息量,同样的词语在不同词语组合中包含的信息量或者说表达的语义信息大不相同。What about 句法分析,计算句法树的相似度?这个比前两种方法更靠谱些,因为句法树很好的描述了词语在句子中的地位。实际效果要待实验证实。
对了,还有一种方法translation model,IBM在机器翻译领域的一大创举,需要有大量的语料库进行训练才能得到理想的翻译结果。当然包括中间词语对齐结果,如果能够利用web资源建立一个高质量的语料库对两两相似句对通过EM迭代词语对齐,由词语对齐生成句子相似度,这个。。想想还是不错的方法!
地理信息除了在数据结构上存在异构,在语义上也存在异构。地理信息语义上的异构可以分为空间数据的异构和非空间数据的异构,以下分别对这两种语义异构进行阐述。
5511 空间数据语义分析与空间关系构建
地理信息中空间数据的语义关系主要可分为以下三种。
(1)拓扑关系: 主要指地理对象间相离(DT)、相接(TO)、重叠(OV)、覆盖(CO)、包含(CT)、相等(EQ)、被覆盖(CB)、在内部(IN)八种关系。其中覆盖(CO)与被覆盖(CB),包含(CT)与在内部(IN)为逆反关系。
(2)方位关系: 主要指一个地理实体相对于另一个地理实体的方向关系。众所周知的八个方位关系为: 北(N)、西北(NW)、西(W)、西南(SW)、南(S)、东南(SE)、东(E)、东北(NE)。以图形(像)中央的地理实体作为第一个起始位置来确定其他地理实体相对于此起始位置地理实体的方位关系; 然后以第一个起始位置为圆心,在周围找一个地理实体作为参照,依此类推,确定地理实体之间的相互位置关系。
如图 538 所示,首先选 A 作为第一个起始参照实体,建立其他地理实体与 A 地理实体的空间方位关系; 然后在地理实体(F、G、H)中再选择一个作为下一个参照实体,依顺时针方向选择 F 作为第二个参照实体,建立其他地理实体(除去已经建立方位关系的 A 实体)与 F 地理实体之间的空间方位关系,依此类推,用同样的方法建立地理实体之间的空间方位关系。
图 538 地理实体的参照关系
图 539 空间方位之间的推理关系
如上图 539 所示,在方位关系中,A 实体和 B 实体的空间方位存在以下关系。
若 B 位于 A 的北方向,则 A 位于 B 的南方向;
若 B 位于 A 的西北方向,则 A 位于 B 的东南方向;
若 B 位于 A 的西方向,则 A 位于 B 的东方向;
若 B 位于 A 的西南方向,则 A 位于 B 的东北方向;
若 B 位于 A 的南方向,则 A 位于 B 的北方向;
若 B 位于 A 的东南方向,则 A 位于 B 的西北方向;
若 B 位于 A 的东方向,则 A 位于 B 的西方向;
若 B 位于 A 的东北方向,则 A 位于 B 的西南方向。
以上方位关系在空间推理时会用到。用 OWL 建立其相互关系后,就可以用 Jena 推理出相互关系。
(3)距离关系: 通常人们用远、近、较远和较近等来形容两个地理实体之间的距离,但这样的形容不准确且容易引起歧义。对于距离关系,我们采用对象质心之间的标准欧氏距离。
针对上述空间数据的语义异构问题,提出用属性关系图(Attribute Relational Graph,ARG),来描述地理实体及其空间关系信息。参照图 540 的图形和它的 ARG,ARG 的结点标有对象的标号。两个结点之间的边标有两个结点间的关系信息。结点 N1 与 N2 之间的边标有(N1,D,67,89,N2),这表明 N1 与 N2 之间的拓扑关系为相离(Disjoint),它们之间的角度为 67°(随下标递增顺序测量),它们之间的距离为 89 个单位。
图 540 图形与其属性关系图 ARG 的映射过程
为每幅图形创建 ARG 之后,ARG 要映射到特征空间的一个多维点,特征空间中的点按照某种预先指定的顺序进行组织(以中央地理实体为第一个起始参照实体)。首先是第一个地理实体,其后是该地理实体与所有其他地理实体之间的关系; 然后是第二个地理实体以及第二个地理实体与随后所有地理实体间的关系,依此类推,直至建立完整的 ARG。在这个阶段,对象之间的方位角也转换为方位谓词。如图 540,N1 与 N2 之间的角度 67°就映射为西南方位(SW)。
5512 非空间数据语义分析与关系构建
非空间数据中的语义异构,主要由于人们对同一或相同类的地理实体在表述概念上存在差异,如对于南京,有人称之为金陵,又有人称之为石头城; 而一些国家地理划分中的州在中国等同于省的概念。非空间数据中表示相等或相似的语义关系又称为同主体语义关系。非空间数据的语义异构一般分为以下两种: 异形同义词,既不同的词汇表达同一个含义,如南京,又可称为金陵或石头城; 同形异义词,即同一个词汇表达不同的含义。
其中同形异义词间的关系可以用 OWL 中的以下语义标签描述: differentFrom(个体不同),两个个体可以显式声明为不同; allDifferent(全不同)和 distinctMembers(不同成员),这两个词配合使用表示一定数量的个体两两不同。
异形同义词的关系可以用以下标签描述: equivalentClass(等价类),两个类可以声明为等价,即使它们尽管名字不同,但拥有相同的实例,等价类可以用来创建同义类; sameAs(个体相同),两个个体可以声明为相同,用它可以创建一系列指向同一个个体的不同名字。
对于一些属性关系可以用 equivalentProperty(等价属性),inverseOf(逆反属性),TransitiveProperty(传递属性),SymmetricProperty(对称属性),FunctionalProperty(函数属性),inverseFunctionalProperty(反函数属性)等来描述。在建立非空间数据的语义关系时,本研究按照 ARG 中地理实体出现的顺序构建非空间数据语义关系,这样便于利用第
552 部分的算法自动生成应用本体实例。
目录
第1章 编译器概述
11 为什么要学习编译技术
12 编译器和解释器
13 编译器的功能分解和组织结构
14 编译器的伙伴
15 编译器的复杂性
16 编译器的设计与实现
17 编译器的测试与维护
第2章 一个微型编译器
21 基础知识
22 ToyL语言
23 ToyL语言词法分析器
24 ToyL语言语法分析器
25 ToyL语言解释器
26 ToyL语言编译器
第3章 有穷自动机与词法分析
31 词法分析基础
311 词法分析器的功能
312 单词识别
313 词法分析的复杂性
314 字符串
315 保留字处理
316 空格符、回车符、换行符
317 括号类配对预检
318 词法错误修正
319 词法分析独立化的意义
32 有穷自动机
321 确定有穷自动机的定义
322 确定有穷自动机的实现
323 非确定有穷自动机
324 NFA到DFA的转换
325 确定有穷自动机的极小化
326 自动机状态转换表的实现
33 正则表达式
331 正则符号串集
332 正则表达式的定义
333 正则表达式的局限性
334 正则定义
335 正则表达式到有穷自动机的转换
34 词法分析器的构造
341 用DFA人工构造词法分析器
342 词法分析器的生成器Lex
练习
第4章 文法与语法分析
41 语法分析
411 语法分析器的输入
412 语法分析的任务
413 语法分析方法分类
42 文法和文法分析
421 上下文无关文法和语言
422 最左推导和最右推导
423 语法分析树与二义性
424 文法分析算法
425 自顶向下方法概述
426 自底向上方法概述
43 递归下降法——自顶向下分析
431 递归下降法原理
432 消除公共前缀
433 代入
434 消除左递归
44 LL分析方法——自顶向下分析
441 LL(1)文法
442 LL(1)分析表
443 LL(1)分析的驱动器
444 LL(1)中的If-Then-Else问题
445 LL(1)分析器的自动生成器LLGen
446 LL(1)分析法与递归下降法的比较
447 正则文法
45 LR方法——自底向上分析
451 句柄
452 活前缀
453 归约活前缀识别器——LR(0)自动机
454 LR(0)文法及其分析算法
455 SLR(1)文法及其分析算法
456 LR(1)文法
457 LALR(1)文法
458 二义性文法的处理
459 另一种Shift-Reduce分析技术:简单优先法
4510 LL(1)和LALR(1)方法比较
46 LR分析器的生成器
461 LALR分析器的生成器YACC
462 LALR分析器的生成器LALRGen
47 语法错误处理
471 错误恢复和修复
472 递归下降分析的错误恢复
473 LL分析的错误恢复
474 LR分析的错误恢复
练习
第5章 语义分析
51 语义分析基础
511 语义分析内容
512 标识符信息的内部表示
513 类型信息的内部表示
514 运行时值的表示
52 符号表
521 符号表查找技术
522 符号表的局部化
523 二叉式局部符号表
524 散列式全局符号表
525 嵌套式全局符号表
526 符号表界面函数
53 类型分析
531 类型的等价性和相容性
532 类型分析的总控算法
533 类型名分析
534 枚举类型分析
535 数组类型分析
536 记录类型分析
537 联合类型分析
538 指针类型分析
539 递归类型分析
54 声明的语义分析
541 声明的语法结构
542 标号声明部分的语义分析
543 常量声明部分的语义分析
544 类型声明部分的语义分析
545 变量声明部分的语义分析
546 过程、函数声明的语义分析
55 执行体的语义分析
551 执行体的语义分析
552 带标号语句和转向语句的语义分析
553 赋值语句的语义分析
554 条件语句的语义分析
555 while循环语句的语义分析
556 for循环语句的语义分析
557 过程调用语句的语义分析
558 表达式的语义分析
559 变量的语义分析
练习
第6章 运行时的存储环境
61 运行时的存储空间结构与分配
611 运行时的存储空间基本结构
612 静态区的存储分配
613 栈区的存储分配
614 堆区的存储分配
615 堆区空间管理
62 过程活动记录与栈区组织结构
621 过程活动记录
622 活动记录的填写
623 栈区组织结构——AR链
63 运行时的变量访问环境
631 可访问活动记录
632 局部Display表方法
633 静态链方法
634 全局Display表方法和寄存器方法
635 无嵌套时的AR及访问环境
64 分程序和动态数组空间
641 无动态数组时的分程序空间
642 动态数组空间
练习
第7章 面向语法的语义描述
71 动作文法
711 动作文法定义
712 动作文法的递归实现
713 动作文法的LL实现
714 动作文法的LR实现
72 动作文法应用
721 用动作文法描述表达式计算
722 用动作文法描述表达式抽象树的构造
723 用动作文法描述语句抽象树的构造
73 抽象动作文法及其应用
731 抽象变量
732 抽象动作文法
733 栈式LL动作文法驱动器
734 抽象动作文法到栈式LL动作文法的转换
735 栈式LR动作文法驱动器
736 抽象动作文法到栈式LR动作文法的转换
74 属性文法
741 属性文法定义
742 属性语法树和属性依赖图
743 计算顺序
744 属性值的计算方法
745 拷贝型属性文法
75 属性文法在编译器设计中的应用
751 类型树的属性文法描述
752 表达式中间代码的属性文法描述
753 变量中间代码的属性文法描述
754 语句中间代码的属性文法描述
755 正则表达式到自动机转换的属性文法描述
76 S-属性文法及其属性计算
761 S-属性文法
762 S-属性文法的递归实现
763 S-属性文法的LR实现
77 L-属性文法及其属性计算
771 L-属性文法
772 L-属性文法的递归实现
773 L-属性文法的LR(1)实现
78 语义分析器的自动生成系统
781 YACC
782 LALRGen
783 Accent系统
练习
第8章 中间代码生成
81 中间代码
811 中间代码的种类
812 后缀式中间代码
813 三地址中间代码
814 抽象语法树和无环有向图
815 多元式中间代码
816 中间代码分量ARG结构
82 表达式的中间代码生成
821 表达式的语义信息
822 表达式的中间代码
823 变量的中间代码
824 表达式的中间代码生成
825 变量的中间代码生成
826 布尔表达式的短路中间代码
83 原子语句的中间代码生成
831 输入/输出语句的中间代码生成
832 goto语句和标号定位语句的中间代码生成
833 return语句的中间代码生成
834 赋值语句的中间代码生成
835 函数(过程)调用的中间代码生成
84 结构语句的中间代码生成
841 条件语句的中间代码生成
842 while语句的中间代码生成
843 repeat语句的中间代码生成
844 for语句的中间代码生成
845 case语句的中间代码生成
846 函数声明的中间代码生成
练习
第9章 中间代码优化
91 引言
911 优化的目标和要求
912 优化的必要性
913 优化的内容
914 局部优化和全局优化
915 基本块和程序流图
92 常表达式优化
921 常表达式的局部优化
922 基于常量定值分析的常表达式全局优化
923 常量定值分析
93 公共表达式优化
931 基于相似性的公共表达式局部优化
932 基于值编码的公共表达式局部优化
933 基于活跃代码分析的公共表达式全局优化
934 活跃运算代码分析
94 程序流图循环
941 循环的基本概念
942 支撑结点
943 自然循环
944 可归约程序流图
945 基于文本的循环及其处理
95 循环不变代码外提
951 代码外提的基本概念
952 循环不变代码的判定
953 循环不变代码外提的条件
954 基于文本循环和定值表的不变代码外提
955 一种简单的外提优化方案
956 别名分析
957 过程与函数的副作用分析
96 循环内归纳表达式的优化
961 归纳变量
962 归纳变量计算的优化算法原理
练习
第10章 目标代码生成
101 目标代码
1011 虚拟机代码
1012 目标机代码
1013 窥孔优化
102 临时变量
1021 临时变量的特点
1022 临时变量的存储空间
1023 临时变量的存储分配
1024 变量状态描述
103 寄存器
1031 寄存器分类及其使用准则
1032 寄存器分配单位
1033 寄存器状态描述
1034 寄存器分配算法
104 基于三地址中间代码的目标代码生成
1041 目标地址生成
1042 间接目标地址的转换
1043 表达式中间代码的目标代码生成
1044 赋值中间代码的目标代码生成
1045 其他寄存器分配法
1046 标号和goto语句中间代码的目标代码生成
1047 return中间代码的目标代码生成
1048 变量中间代码的目标代码生成
1049 函数调用中间代码的目标代码生成
105 基于AST的代码生成
1051 三地址中间代码到AST的转换
1052 标记需用寄存器个数
1053 从带寄存器个数标记的AST生成代码
106 基于DAG的代码生成
1061 从AST到DAG的转换
1062 DAG排序和虚寄存器
1063 从带序号和虚寄存器标记的DAG生成代码
107 代码生成器的自动生成
1071 代码生成器的自动化
1072 基于指令模板匹配的代码生成技术
1073 基于语法分析的代码生成技术
练习
第11章 对象式语言的实现
111 引言
112 SOOL语法
1121 程序
1122 分程序
1123 类声明
1124 类型
1125 变量声明
1126 函数声明和方法声明
1127 语句
1128 变量
1129 表达式
11210 程序示例
113 SOOL语义
1131 声明的作用域
1132 Class声明的语义
1133 语句的语义
114 SOOL语义分析
1141 标识符的符号表项
1142 符号表结构
1143 符号表的局部化
115 SOOL目标代码
1151 对象空间
1152 当前对象——self
1153 活动记录
1154 成员变量的目标地址
1155 表达式的目标代码
1156 Offset原理
1157 类的多态性
1158 目标代码区
1159 方法的动态绑定
11510 快速动态绑定目标代码
主要参考文献
众所周知,英文是以词为单位的,词和词之间是靠空格隔开,而中文是以字为单位,句子中所有的字连起来才能描述一个意思。例如,英文句子I am a student,用中文则为:“我是一个学生”。计算机可以很简单通过空格知道student是一个单词,但是不能很容易明白“学”、“生”两个字合起来才表示一个词。把中文的汉字序列切分成有意义的词,就是中文分词,有些人也称为切词。我是一个学生,分词的结果是:我 是 一个 学生。
中文分词技术属于自然语言处理技术范畴,对于一句话,人可以通过自己的知识来明白哪些是词,哪些不是词,但如何让计算机也能理解?其处理过程就是分词算法。
现有的分词算法可分为三大类:基于字符串匹配的分词方法、基于理解的分词方法和基于统计的分词方法。
1、基于字符串匹配的分词方法
这种方法又叫做机械分词方法,它是按照一定的策略将待分析的汉字串与一个“充分大的”机器词典中的词条进行配,若在词典中找到某个字符串,则匹配成功(识别出一个词)。按照扫描方向的不同,串匹配分词方法可以分为正向匹配和逆向匹配;按照不同长度优先匹配的情况,可以分为最大(最长)匹配和最小(最短)匹配;按照是否与词性标注过程相结合,又可以分为单纯分词方法和分词与标注相结合的一体化方法。常用的几种机械分词方法如下:
1)正向最大匹配法(由左到右的方向);
2)逆向最大匹配法(由右到左的方向);
3)最少切分(使每一句中切出的词数最小)。
还可以将上述各种方法相互组合,例如,可以将正向最大匹配方法和逆向最大匹配方法结合起来构成双向匹配法。由于汉语单字成词的特点,正向最小匹配和逆向最小匹配一般很少使用。一般说来,逆向匹配的切分精度略高于正向匹配,遇到的歧义现象也较少。统计结果表明,单纯使用正向最大匹配的错误率为1/169,单纯使用逆向最大匹配的错误率为1/245。但这种精度还远远不能满足实际的需要。实际使用的分词系统,都是把机械分词作为一种初分手段,还需通过利用各种其它的语言信息来进一步提高切分的准确率。
一种方法是改进扫描方式,称为特征扫描或标志切分,优先在待分析字符串中识别和切分出一些带有明显特征的词,以这些词作为断点,可将原字符串分为较小的串再来进机械分词,从而减少匹配的错误率。另一种方法是将分词和词类标注结合起来,利用丰富的词类信息对分词决策提供帮助,并且在标注过程中又反过来对分词结果进行检验、调整,从而极大地提高切分的准确率。
对于机械分词方法,可以建立一个一般的模型,在这方面有专业的学术论文,这里不做详细论述。
2、基于理解的分词方法
这种分词方法是通过让计算机模拟人对句子的理解,达到识别词的效果。其基本思想就是在分词的同时进行句法、语义分析,利用句法信息和语义信息来处理歧义现象。它通常包括三个部分:分词子系统、句法语义子系统、总控部分。在总控部分的协调下,分词子系统可以获得有关词、句子等的句法和语义信息来对分词歧义进行判断,即它模拟了人对句子的理解过程。这种分词方法需要使用大量的语言知识和信息。由于汉语语言知识的笼统、复杂性,难以将各种语言信息组织成机器可直接读取的形式,因此目前基于理解的分词系统还处在试验阶段。
3、基于统计的分词方法
从形式上看,词是稳定的字的组合,因此在上下文中,相邻的字同时出现的次数越多,就越有可能构成一个词。因此字与字相邻共现的频率或概率能够较好的反映成词的可信度。可以对语料中相邻共现的各个字的组合的频度进行统计,计算它们的互现信息。定义两个字的互现信息,计算两个汉字X、Y的相邻共现概率。互现信息体现了汉字之间结合关系的紧密程度。当紧密程度高于某一个阈值时,便可认为此字组可能构成了一个词。这种方法只需对语料中的字组频度进行统计,不需要切分词典,因而又叫做无词典分词法或统计取词方法。但这种方法也有一定的局限性,会经常抽出一些共现频度高、但并不是词的常用字组,例如“这一”、“之一”、“有的”、“我的”、“许多的”等,并且对常用词的识别精度差,时空开销大。实际应用的统计分词系统都要使用一部基本的分词词典(常用词词典)进行串匹配分词,同时使用统计方法识别一些新的词,即将串频统计和串匹配结合起来,既发挥匹配分词切分速度快、效率高的特点,又利用了无词典分词结合上下文识别生词、自动消除歧义的优点。
到底哪种分词算法的准确度更高,目前并无定论。对于任何一个成熟的分词系统来说,不可能单独依靠某一种算法来实现,都需要综合不同的算法。笔者了解,海量科技的分词算法就采用“复方分词法”,所谓复方,相当于用中药中的复方概念,即用不同的药才综合起来去医治疾病,同样,对于中文词的识别,需要多种算法来处理不同的问题。
以上就是关于为什么说编译程序实质上是专家系统全部的内容,包括:为什么说编译程序实质上是专家系统、如何度量两个词之间的语义相似度、地理信息语义分析与关系构建等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)