基于易语言的非连续双项语法构式计算机检索程序的设计研究

2020-01-18 05:51张超
电子技术与软件工程 2019年24期
关键词:词项用例构式

文/张超

在基于语料库的语法研究中,我们常常需要检索统计语法项在语料中的出现频率。就当前主流的语料库前端检索功能来看,对于连续文本串的语法项的检索统计倒是很方便,只需用语法项作为关键词在语料中进行检索即可轻松获得该语法项在语料库中的出现频次。比如检索现代汉语语气词“呢”的应用情况,只需将“呢”作为关键词输入检索即可。而对于非连续多项语法构式而言,当前语料库前端程序往往无法一次性检索出结果,而要通过两次以上的检索,甚至还要将检索结果集导出后再辅以人工排检才能得到所需要的结果。比如,要检索“怎么……法”这个语法构式的出现情况,按目前语料检索的常规技术方案,可以先检索含有“怎么”的用例,然后再从结果集中检索含有“法”的用例。这样二次检索后,得到的仍然不是最终想要的结果,因为“法”位于“怎么”之前的用例并不符合要求,但也会出现在二次检索结果集之中,比如“法人代表怎么能这样说话”这样的例句就无法在二次检索结果集中自动排除,只能依靠人工来排检。这就比较耗时耗力。因此,探究一种专门针对“怎么……法”之类非连续多项语法构式的检索程序方案,对语法研究将有积极的意义。本文拟专门探讨非连续双项语法构式的检索程序设计方案,程序设计工具为易语言V5.9版。

1 关于非连续双项语法构式

Adele E.Goldberg(2003)将构式定义为“当且仅当C是一个形式-意义匹配对应体<Fi,Si>,且该匹配对应体的形式或意义的某些方面不能通过C的组成成分或者其他先前已知结构形式而完全预测出来,那么C就是构式”。德国学者马丁·休伯特(Martin Hilpert)(2016:16)进一步指出,“如果一个表达形式的意义不能从其各组成部分的意义之中推断出来,那就毫无疑问地得出结论,即人们必须得把这个表达形式本身当作一个形式-意义匹配对应体来学习,换言之,它就是一个构式”。根据构式的定义,现代汉语中像“虽然......但是......”、“如果.....就.....”等关联词结构,像“怎么/如何.....法”等都属于构式。我们把含有两个项目且两个项目之间有其他文本存在的构式称为非连续双项语法构式。比如“怎么......法”,实际应用中往往是“怎么V法”的模式,即两个项之间要插入动词,所以“怎么......法”就是一个非连续双项语法构式。

2 非连续双项语法构式检索需求分析

基于语料库的语法研究中,常常需要统计一些语法项的出现频次。对于单词项的语法项,按传统的关键词检索方式即可解决,但对于非连续双项语法构式,用传统的关键词检索技术无法满足需求,即便采取结果集中二次关键词检索的手段,也难以检索出完全符合要求的结果。这是因为,传统的关键词检索技术并不是为非连续双项语法构式的检索需求而生的。

在语法研究中,非连续双项语法构式的检索需求可概括为以下几点:

A.构式中的两个词项必须在同一个句子中同现,并且出现顺序不能颠倒;

B.两个词项之间存在一定的距离,即两个词项之间应当有其他词语,存在一定量的间隔文字;

C.在检索时应当允许自主设定词项之间的间隔文字数量,以便进行更细致深入的考察分析。

D.检索结果集要能够导出为TXT文档或EXCEL文档,以便进一步分析处理。

比如检索询问行为方式的 “怎么……法……”这个非连续双项语法构式,符合要求的句子应当是如下这类(用例来自国家语委现代汉语语料库):

(1)有1、2、3这三个数字,还有一个小数点,至于怎么排法,全忘了。

(2)国王问:"怎么个好法?"

(3)黄莉娅把纸高帽往头上一扣,笑嘻嘻地,“怎么个游法?”

而像如下三类用例则不能被列入检索结果集之中。

1.词项顺序与检索构式不一致用例,如:

(4)这就是说法不是一般的行为规则,它与习惯或道德不同,法是一种特殊的行为规则,是统治阶级基于经济上的生产、交换、分配关系和政治上统治与被统治关系,把自己的意志客观化、条文化,以便使社会上的人们不仅知道应该怎么做,而且也知道必须怎么做。

(5)他威胁刘法说:"当年你在京城时,曾亲手从皇帝那里接过命令,你并且说一定能取胜,怎么现在不想出兵了呢?

2.只包含第一个词项的用例,如:

(5)我们的人民怎么能够沉默?

(6)试回想一下看,他们是怎么钻空子的。

3、两个词项紧邻的用例,如:

(7)怎么法国那时也是八国联军之一?

(8)怎么法不容情?

由以上需求可知,传统的关键词匹配检索技术的确不能满足需求,得根据非连续双项语法构式的特点,设计专门的检索程序来实现。

3 非连续双项语法构式检索的程序实现

“易语言是中国人自主开发,适合国情,不同层次不同专业的人员易学易用的汉语编程语言。”在易语言中,本程序的实现要用到 “寻找文本()、倒找文本()、GBK_取文本长度()、取文本右边()、取文本左边()”等命令。

考虑到用户应用上的方便,检索输入界面设计力求简洁,并允许用户设置关键词左侧和右侧要显示的字数;如果是双关键词,还要允许用户自定义两关键词之间间隔的字数。界面如图1所示。

检索非连续双项语法构式用例时,在关键词文本框中输入两个词项,词项之间加一个空格即可。在检索代码中,通过“寻找文本()”命令搜寻关键词内部的空格,如果找到空格,则判定为非连续双项语法构式关键词,也可称为双关键词。建立局部变量“第一关键词”和“第二关键词”分别记录空格前后的关键词项,并通过“GBK_取文本长度()”确定好关键词的长度,为后续提取语句作准备。代码如下:

第一关键词=取文本左边 (搜索关键词,寻找文本 (搜索关键词,“ ”,,假) -1)

第二关键词=取文本右边 (搜索关键词,取文本长度 (搜索关键词) -倒找文本 (搜索关键词,“ ”,,假))

第一关键词长度=GBK_取文本长度 (第一关键词)

第二关键词长度=GBK_取文本长度 (第二关键词)

关键词之间间隔字符数=到整数 (编辑框_字数.内容)

然后将语料文件内容读到到超级文本框,再计算被搜寻文本的总长度。

为方便检索和测算文字长度等,可以在软件界面放一个超级文本框,设置可视属性值为假。

超级编辑框3.内容=删全部空 (到文本 (读入文件 (要搜索的路径数组 [n])))

被搜寻文本总长度=超级编辑框3.取文本长度 ()

接下来用超级文本框的“寻找()”命令搜寻第一关键词,用变量记录所找到的关键词出现位置。

当前找到的关键词起始位置=超级编辑框3.寻找 (起始搜寻位置,,,第一关键词)

接着根据用户设定的两关键词间隔字数搜寻第二关键词。先在指定位置区域取和第二关键词同等长度的文本串,判断所取值是否与第二关键词相同,创建一个逻辑变量“是否取得第二关键词”存储判断结果。

第二关键词起始位置=当前找到的关键词起始位置+第一关键词长度+关键词之间间隔字符数

超级编辑框3.起始选择位置=第二关键词起始位置-1

超级编辑框3.被选择字符数=第二关键词长度

第一关键词后的取值-超级编辑框3.被选择文本

.如果 (第一关键词后的取值-第二关键词)

是否取得第二关键词 = 真

.否则

是否取得第二关键词 = 假

如果变量“是否取得第二关键词”的值为“真”,通过超级文本框取出含关键词的语句并加入到检索结果列表框,然后将起始搜寻位置移到所找到的第一关键词之后。具体代码如图2所示。

变量“当前找到的关键词起始位置”值如果不为-1,且起始搜寻位置也小于被搜寻文本总长度时,程序要循环执行以上过程,直到搜索至被搜寻文本最末位置且找不到相应关建词为止。

以上程序执行完毕后,可能还会检索出如下这样的用例:

(1)这笔账谁负责还?怎么还?

“我没办法,要命有命!”长顺的泪已在眼圈中转。

图1

图2

图3

很显然,这个例子中的“怎么”与“法”分属于不同的句子,并不是一个非连续双项语法构式,却被列入到检索结果中。这是因为,以上程序中没有排除“怎么”和“法”之间有换行符的情况。因此,以上程序执行中取得含关键词的语句在输出前应当增加检测是否含有换行符的情况,不含换行符的才予输出。含关键词语句输出部分代码优化如图3所示。

如此一来,就减少了不合要求的语句的干扰输出。

4 非连续双项语法构式检索的程序应用测试

笔者选择《红楼梦》全本语料进行测试,全文90余万字,设置两关键词间隔字数为2,检索完成并输出结果集共耗时10秒左右,运行速率有待提升,但对语法研究来说,这个速率当在可接受范围。

检索测试也发现了如下这样的不合要求的语例:

将此事告诉与尤二姐,又说我怎么操心打听,又怎么设法子,须得如此方救下众人无罪。

此例中的“怎么”和“法”显然不是要检索的非连续双项语法构式,“法”只是构成“法子”这个名词的一个实语素。可见,程序的后续设计应当还要在排除这类语例上下功夫。

5 结语

针对非连续双项语法构式的计算机检索程序的设计,对语法构式研究有非常重要的应用价值。本文基于易语言来设计的计算机程序,检索结果集基本符合要求,运行速率也在可接受范围,当可以在语法构式研究实践中尝试采用。

猜你喜欢
词项用例构式
UML用例间包含关系与泛化关系的比较与分析
UML用例模型中依赖关系的比较与分析
联锁软件详细设计的测试需求分析和用例编写
從出土文獻用例看王氏父子校讀古書的得失
自然种类词项二难、卡茨解决与二维框架
从语法构式到修辞构式再到语法构式
“XV的(不)是Y”构式探微
英语词项搭配范围及可预见度
依据语篇中多层次信息的句法分析方法
语段中词项共现现象的认知研究