首页 百科知识 学习分词程序

学习分词程序

时间:2022-09-17 百科知识 版权反馈
【摘要】:按照“离散编程法”的思想,我又设计了一个学习分词程序。从分词表中调出第一个词汇,然后交给“比较检索操作”处理。(5)分词表整理操作:把分词表按词频大小重新排列,整理时,同字头词汇仍旧顺序排在一起。程序运行后,先进入分词阶段,操作者输入语句。这种学习方式将大大降低操作者的工作强度。(2)程序运行结束前,“分词表整理操作”会按词频对分词表重新排序,词频高的词汇会放在前面,以便加快检索。

按照“离散编程法”的思想,我又设计了一个学习分词程序。这是一个“有教学习程序”。与证明“正弦平方加余弦平方等于一”的程序一样,这个程序也不依赖任何数学为基础,也不建立任何数学模型,也是在毫不理解的基础上,处理语句、词汇这样一些字符串。

首先该程序要用到这样一些计算机元操作:

(1)字符串比较操作:作为计算机元操作,系统具有字符串的比较能力,该比较只能确定字符的相同或不同。

(2)字符串长度统计操作:作为计算机元操作,系统应该具有计算字符长度能力和比较字符长短的能力。

(3)移位操作:作为计算机元操作,系统应该具有移位能力,即移动比较指针的能力。

(4)写操作:作为计算机元操作,系统应具有向指定地址写入数据的能力。

(5)累加操作:作为计算机元操作,系统应具有把指定数字加一的能力。

其次该程序应该有一些大脑元操作,它们是计算机元操作的后代操作,却是大脑操作的元操作。

(1)“检索比较操作”:它由计算机的“字符串比较操作”、“字符串长度统计操作”、“移位操作”三个操作联合而成。

它操作时,先计算两个字符串的长度,再用短的字符串与长字符串比较。比较结果相同,停止比较。给出位置信息,转入后面的操作。

比较结果为不同时,计算剩余字符串的长度,如能继续比较,用后移操作使长字符指针后移,继续与短字符串比较。比较再不同再计算剩余字符串的长度,再后移,再比较……直到找到相同字符串,或不能比较了,终止操作。给出相同字符的指针信息或给出失败信息,转入后面的操作。

(2)存储操作:它由计算机的写操作附加条件构成。它要把比较指针指示的字符串写入数组变量(分词表)之中。

(3)“分词操作”:它是一个组合操作,是检索比较操作”的后代操作它的比较指针一个指向分词表,另一个指向输入语句。从分词表中调出第一个词汇,然后交给比较检索操作”处理。如果调出的词汇能够在输入语句中找到相同词汇的位置,则计算该词汇的首尾位置,把该词汇用空格与前后字符串隔开。显示出来。

如果一个词汇在输入语句中找不到匹配的词汇,则移动比较指针,从分词表中调用下一个词汇,交给比较检索操作”处理。直到找到匹配的词汇或者失败。失败时,仍旧用空格把词汇与不匹配的字符串分开,显示出来,但要返回失败信息。

(4)词频统计操作:这是一个由计算机累加操作附加条件构成的操作。在分词表(二维数组)每个词汇的后面,为词频统计值,没有词汇时,初始值为0。该词汇在分词过程中每出现一次,就在该值上加一。

(5)分词表整理操作:把分词表按词频大小重新排列,整理时,同字头词汇仍旧顺序排在一起。该操作结构比较复杂,就不详细分析了。

(6)同字头词汇插入操作:在建分词表的同时,把同字头词汇顺序排列在一起,按词频大小排列。该操作结构也比较复杂,不详细分析了。

(7)重复词汇删除操作:该操作检索分词表,把重复词汇的重复部分删除。

程序结构:本程序由两个阶段组成:分词阶段和学习词汇阶段。分词阶段,主要由“分词操作”工作,对比输入语句和分词表,进行分词处理;学习词汇阶段,主要由“存储操作”工作,它把输入词汇写入分词表中。

程序运行后,先进入分词阶段,操作者输入语句。如果分词成功(语句被全部分成词汇),显示分词结果,再次进入分词阶段;如果分词不成功(语句不能全部分成词汇),自动转入学习词汇阶段,同时扩展分词表。

程序运行前,分词表为空。

下面我们看这样一个简单的程序如何自建分词表,如何扩展分词表,如何分词。程序运行有这样几种情况:

A、正常情况:

(1)程序运行后,输入一个语句。例如输入:我是一个中国人。

(2)程序进入分词阶段。由于分词表为空,“分词操作”失败,发出失败信息。

(3)接到失败信息后,程序自动进入学习词汇阶段。

(4)输入:“我”,“存储操作”把它读入写进分词表。

(5)再输入:“是”,“存储操作”把它读入写进分词表。

(6)再输入:“一个”,“存储操作”把它读入写进分词表。

(7)再输入:“中国”,“存储操作”把它读入写进分词表。

(8)再输入:“人”,“存储操作”把它读入写进分词表。

(9)再输入:“。”,“存储操作”把它读入写进分词表。

(10)再次输入:“我是一个中国人。”,程序又进入分词阶段。“分词操作”工作,输出结果:

我 是 一个 中国 人 。 

这样,程序便完成一轮学习词汇和分词的过程,同时系统内建立了一个由五个词汇(包括标点)组成的分词表。

继续这样输入,程序就会不断扩展分词表。如果每次语句的词汇都含有不同词汇,程序就会这样一轮轮地进行下去,分词表也会不断扩展。

B、输入语句中,只有一部分能被分词。

如果一个输入语句只能有部分被分词,我们看一下程序会如何处理?假设我们接着上面的继续做:

(11)输入语句:我是北京人。

(12)程序进入分词阶段。由于分词表不空“分词操作”可以进行

(13)分词显示:我 是 北京 人 。但是“北京”不是分词表的词汇,“分词操作”发出失败信号,即把“北京”字符串不断闪耀。并转入学习词汇阶段。

(14)输入:北京,“存储操作”把它读入写进分词表。

如果再次输入“我是北京人。”,分词操作还会显示出:我 是 北京 人 。

但是不会再有失败信息出现,也不会自动转入学习词汇阶段。

这样的输入过程还会保证分词表内不会有重复的词汇出现。

在一个词汇学习阶段,我们也可以输入大量词汇,也容许它们与输入语句无关,这时输入的词汇也会被记入分词表中,但是程序不保证分词表内没有重复词汇(这个问题可以改进)。

C、同字头多分词的处理。

这是一个常见现象。例如“门把手坏了。”,可能有两种分词方法:

一种是:门 把 手 坏 了 。

另一种是:门把手 坏 了 。

但是在学习词汇后,如果仅学会前一种分词方式,它可能就只按前一种方式分词。而且当程序做完第一种分词后,也不会显示失败,不会再进入学习词汇阶段。如何学会后一种分词呢?

我们此时设置一个不常用键,作为人为断定分词错误键。程序接到此键的信息,便被动地转入学习词汇阶段。我们再把新词汇(门把手)输入就可以了。

在扩展分词表时,程序用“同头词汇插入操作”把新词汇插入,与其它同头词汇顺序并列在一起。并且把词频高的排列在前。

在分词时,如果程序有语言理解能力,凭着对语言的理解,可以选择。但是由于我的这个小程序没有语言理解功能,它不会在这几种分词方式间选择,因此它会把几种分词的结果同时显示出来,由操作者来选择。

 D、批量学习。

如果把输入语句和词汇制成文字文件,读入计算机,就可以实现批量学习。这种学习方式将大大降低操作者的工作强度。

有人想使用现成的分词库,又想利用本程序的可扩展性,也可以用成批学习的方法,读入一个现成的分词库。成批读入时对分词库要做适当的技术处理,使之适合本程序扩展分词表。 

E、词频统计和词汇表排序。

程序运行前后还需要做到下面四点:

(1)在程序运行时,“词频统计操作”会随时进行词频统计,并把数值记在分词表上。

(2)程序运行结束前,“分词表整理操作”会按词频对分词表重新排序,词频高的词汇会放在前面,以便加快检索。

(3)程序运行结束前,“重复词汇删除操作”将检索分词表清除重复词汇。

(4)程序结束前,程序将建立文件把分词表在硬盘加以保存。对应于此,下次程序开始运行时,要把以前的分词表文件从硬盘调出。

F、对词组的处理。

词组也可以作为同头词汇输入。由于本程序不具有选择能力,在有词组存在的情况下,把各种分词方式都显示出来,供操作者选择。因此本程序不考虑匹配规则。

至于多种分词方式的自动选择权,我想等程序学会理解词语的意义后,再由程序自行处理。因为依赖任何计算方法来选择某种分词形式,都不如真正理解语句含义后的选择准确。

 


免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈