阿不都克里木·玉素甫,楊 琴,王亮亮
(1.新疆教育學(xué)院 現(xiàn)代教育技術(shù)中心,新疆 烏魯木齊 830043;2.新疆教育云技術(shù)與資源實驗室,新疆 烏魯木齊 830043;3.新疆教育學(xué)院 信息科學(xué)與技術(shù)學(xué)院,新疆 烏魯木齊 830043)
常用字是現(xiàn)代漢語中經(jīng)常用到的字,即字頻和使用度最高的字。隨著社會的發(fā)展,常用字的使用頻率也在不斷的變化。而常用字最基本的選字原則就是根據(jù)字的使用頻度,選取使用頻度高的字。除此之外還有其他的選字原則,如:根據(jù)字的使用分布選取分布均勻的字,選取構(gòu)字能力和構(gòu)詞能力強的字,根據(jù)漢字的實際使用情況斟酌取舍等。目前計算機選字主要采用統(tǒng)計字頻的方法,并以字頻高低逐一排序。字頻指的是漢字的使用頻率,即某個漢字在抽樣統(tǒng)計資料里出現(xiàn)的次數(shù)在統(tǒng)計總字?jǐn)?shù)中所占的比例。字頻統(tǒng)計對識字教學(xué)、字書編纂以及漢字的機械處理和信息處理等都十分重要。1988年1月,國家語委和國家教委聯(lián)合發(fā)布《現(xiàn)代漢語常用字表》[1],共收錄常用字3 500個,其中常用字2 500個,次常用字1 000個。1988年3月發(fā)布《現(xiàn)代漢語通用字表》[1]共收錄通用字7 000個(包括《現(xiàn)代漢語常用字表》的3 500字),這兩種表都是以字頻的高低來排序的。為了了解常用字在文本中的使用情況,以計算機信息處理的方式來獲取統(tǒng)計信息,并且本研究作為新疆高校教育資源安全審查信息化系統(tǒng)研究項目的基礎(chǔ)研究部分,主要研究了常用字在電子文本中的覆蓋率統(tǒng)計,使用率統(tǒng)計和字頻統(tǒng)計的數(shù)學(xué)算法以及計算機程序算法,并根據(jù)得出的研究方法研發(fā)常用字覆蓋率統(tǒng)計分析系統(tǒng),最后做一個統(tǒng)計實驗,即分別通過《現(xiàn)代漢語常用字表》中的頻度最高的581個常用字[2],1 000個常用字和2 500個常用字對電子文本進行統(tǒng)計分析,并獲取覆蓋率、使用率、字頻統(tǒng)計信息,以此了解文本中常用字的使用情況。
覆蓋率統(tǒng)計的主要任務(wù)就是統(tǒng)計出給定文本中常用字的覆蓋情況,根據(jù)統(tǒng)計信息結(jié)果就可以知道常用字在文本中的覆蓋率或者說是比率。為此在前期研究中[3]首先將電子文本中非漢字元素取出后,再對所剩下的漢字元素進行統(tǒng)計分析。但是在計算機處理中該方法還不是很實用。因為為了先抽取文本中除了漢字以外的元素,對于計算機來說需要先定義大量字符元素,以便計算機可以識別并分類。如:數(shù)字、各種符號以及其他未知符號等。這對實現(xiàn)計算機程序算法帶來了一些困難,也有可能由于程序無法識別文字字符產(chǎn)生統(tǒng)計誤差等問題。因此對前期所使用的數(shù)學(xué)公式進行優(yōu)化處理,以便適用于計算機程序算法[4-6]的實現(xiàn)。
覆蓋率是閱讀教材里被包含的在字表里的漢字與閱讀教材里的全部漢字的比率[7]。在優(yōu)化后的算法中不再對文本中的非漢字字符進行統(tǒng)計和抽取操作,而是直接對文本中的漢字字符[8]進行統(tǒng)計,這也更符合計算機的處理。具體數(shù)學(xué)表達式如式(1)所示。
(1)
其中,F(xiàn)為常用字在電子文本中的出現(xiàn)次數(shù),L為文本的長度;C為常用字,Ci為常用字表中下標(biāo)為i的漢字,N為常用字字?jǐn)?shù);T為電子文本,Tj為電子文本中下標(biāo)為j的漢字。出現(xiàn)次數(shù)F主要是通過常用字和電子文本中的漢字逐一對比后獲取的統(tǒng)計結(jié)果,即當(dāng)Ci=Tj時,X(Ci,Tj)=1,當(dāng)Ci≠Tj時,X(Ci,Tj)=0,X函數(shù)的值將會累計計算,運算結(jié)束后作為F的值。
(1)程序處理流程。
根據(jù)式(1)可以通過計算機程序來實現(xiàn)覆蓋率統(tǒng)計。首先將程序處理流程定義如下:
第一步:統(tǒng)計出文本中漢字的個數(shù)L。
第二步:統(tǒng)計常用字在文本中的出現(xiàn)次數(shù)F,具體流程如圖1所示。
圖1 常用字出現(xiàn)次數(shù)統(tǒng)計流程
該流程圖中進行循環(huán)操作將對常用字和電子文本中的漢字逐一進行對比,符合條件C[i]=T[j]時X的值加1,不符合時先判斷j 第三步:根據(jù)式(1)計算覆蓋率。 (2)程序算法的實現(xiàn)。 根據(jù)式(1)和程序處理流程,覆蓋率統(tǒng)計核心Java[9-11]程序算法如下: intX; //統(tǒng)計常用字在文本中的出現(xiàn)次數(shù) public int getCiShu_tongji(String text) {//獲取出現(xiàn)次數(shù)的函數(shù) X=0; //出現(xiàn)次數(shù)賦值為0 for (inti=0;i for (intj=0;j if (C[i].equals(T.charAt(j)+"")) {X++;} }} return X; //返回出現(xiàn)次數(shù)的值 } (3)程序統(tǒng)計流程示例。 下面將通過一個簡單示例來說明程序覆蓋率統(tǒng)計的過程,首先需要一個常用字表和文本。為了簡化,只抽取了頻度最高的14個常用字。具體覆蓋率統(tǒng)計示例如下: 常用字:的,一,是,不,了,在,有,人,這,上,大,來,和,我 文本:這些是不是你的? 可以算出文本長度L的值為7,常用字N的值為14。那么首先計算常用字在文本中的出現(xiàn)次數(shù)F,具體流程如表1所示。 表1 覆蓋率統(tǒng)計流程示例 上述表1所示,常用字與文本中的漢字逐一對比后的常用字出現(xiàn)次數(shù)F的值為5,那么根據(jù)覆蓋率統(tǒng)計公式計算結(jié)果如下: 常用字使用率是指電子文本中所出現(xiàn)的常用字在常用字中的比率。 通過統(tǒng)計電子文本中的常用字使用率,可以了解到文本中所使用的常用字使用比率,具體數(shù)學(xué)表達式如式(2)所示。 (2) 其中,G為文本中常用字使用次數(shù)(該值不計算重復(fù)出現(xiàn)的常用字),N為常用字?jǐn)?shù),Ci為常用字表中下標(biāo)為i的漢字,Tj為電子文本中下標(biāo)為j的漢字。電子文本中使用次數(shù)G是通過常用字與電子文本逐一對比后獲得的結(jié)果,但與式(1)的出現(xiàn)次數(shù)F還有一定區(qū)別。G在統(tǒng)計過程中不計算重復(fù)出現(xiàn)的常用字,因為常用字與電子文本漢字對比時,只要有一個符合條件,它就代表該常用字已經(jīng)使用,因此無需與下一個文本漢字對比。即當(dāng)Ci=Tj時,Y(Ci,Tj)=1且j=L,當(dāng)Ci≠Tj時,Y(Ci,Tj)=0。j=L表示一旦符合條件將文本T的下標(biāo)j賦值為文本長度L,此時就會重新開始從下一個常用字進行對比,避免了重復(fù)計算,保證了統(tǒng)計結(jié)果的準(zhǔn)確性。 (1)程序處理流程。 根據(jù)式(2)使用率程序處理流程定義如下: 第一步:獲取常用字字?jǐn)?shù)N。 第二步:計算文本中的常用字使用次數(shù)G,流程如圖2所示。 圖2 常用字使用次數(shù)統(tǒng)計流程 圖2中單個常用字C[i]在循環(huán)對比過程中如果滿足條件C[i]=T[j],首先將Y的值加1,再用break命令結(jié)束內(nèi)循環(huán),這樣就可以保證每個常用字統(tǒng)計結(jié)果不重復(fù)。然后i的值加1,再從下一個常用字C[i]開始統(tǒng)計。 第三步:根據(jù)式(2)計算使用率。 (2)程序算法的實現(xiàn)。 以下為使用率統(tǒng)計核心算法。 intX; //統(tǒng)計常用字在文本中的個數(shù) public int getShiYong_tongji(String text) {//獲取使用次數(shù)的函數(shù) Y=0; //使用次數(shù)賦值為0 for (inti=0;i for (intj=0;j if (C[i].equals(T.charAt(j)+ "")) {Y++; break; } }} returnY;//返回出現(xiàn)次數(shù)的值 } 字頻是指每個常用字在文本中的出現(xiàn)頻度[12-14]。 為了計算字頻,首先需要統(tǒng)計每一個常用字在文本中的出現(xiàn)次數(shù),然后再將每個漢字的出現(xiàn)次數(shù)除以文本長度,具體字頻統(tǒng)計數(shù)學(xué)表達式如式(3)所示: (3) 其中,Pi為每個常用字在文本中的出現(xiàn)次數(shù),Ci為常用字表中下標(biāo)為i的漢字,Tj為電子文本中下標(biāo)為j的漢字。每次對比后X(Ci,Tj)累計值作為Pi的值,再計算下一個常用字Pi的值,即當(dāng)Ci=Tj時,X(Ci,Tj)=1,當(dāng)Ci≠Tj時,X(Ci,Tj)=0,直到j(luò) (1)程序處理流程。 字頻統(tǒng)計程序流程如圖3所示。 圖3 常用字字頻統(tǒng)計流程 在此流程中首先還是要對單個常用字C[i]進行逐一對比,如果滿足條件C[i]=T[j],X的值加1并將該值賦給負(fù)責(zé)存儲每個常用字頻度的數(shù)組P[i],然后判斷下一個條件j (2)程序算法的實現(xiàn)。 字頻統(tǒng)計核心程序算法如下: intX; //統(tǒng)計每個常用字在文本中的個數(shù) int[]P=new int[N];//該數(shù)組用于獲取下標(biāo)為i的常用字在文本中的使用次數(shù)。 public int[] getPinDu_tongji(String text) { X=0; //使用次數(shù)賦值為0。 for (inti=0;i for (intj=0;j if (C[i].equals(T.charAt(j) + "")) {X++;} } P[i]=X; //將使用次數(shù)X的值賦給數(shù)組P X=0;} returnX; //返回出現(xiàn)次數(shù)的值 } 服務(wù)器操作系統(tǒng):CentOS 7; 使用編程語言:Java,JavaScript,XML[15-16]; 使用開發(fā)工具:Eclipse; 系統(tǒng)框架:主要采用B/S架構(gòu)。 系統(tǒng)可以根據(jù)輸入的文本進行統(tǒng)計分析,可以統(tǒng)計文本中常用字的覆蓋率、使用率、字頻等。可根據(jù)需要選擇目標(biāo)常用字,即可以選常用581、1 000、2 500個常用字表對文本進行統(tǒng)計分析。圖4為常用字覆蓋率統(tǒng)計分析系統(tǒng)的字頻統(tǒng)計功能界面。 圖4 常用字在文本中的字頻統(tǒng)計 為了測試系統(tǒng),以四大名著和新華網(wǎng)、人民網(wǎng)共116篇文章作為統(tǒng)計對象,分別統(tǒng)計分析了字頻最高的581個常用字、1 000個常用字和2 500個常用字在這些統(tǒng)計對象中的覆蓋率、使用率以及字頻,具體統(tǒng)計結(jié)果如表2所示。 表2 常用字統(tǒng)計分析 那么再來看一下統(tǒng)計對象中常用字字頻的情況。在統(tǒng)計結(jié)果中只抽取了使用頻度最高的前10個漢字,具體統(tǒng)計結(jié)果如表3所示。 表3 字頻統(tǒng)計 從表3中可以看出,根據(jù)不同的統(tǒng)計對象常用字的使用頻度也會有所不同。 對常用字在教育資源電子文本中的覆蓋率統(tǒng)計,使用率統(tǒng)計,頻度統(tǒng)計相關(guān)的統(tǒng)計算法進行了研究,并結(jié)合相關(guān)程序算法,以計算機程序的方式來實現(xiàn)一個常用字覆蓋率統(tǒng)計分析系統(tǒng),并通過統(tǒng)計分析系統(tǒng)對四大名著和新華網(wǎng)、人民網(wǎng)116篇文章中所使用的常用字進行了統(tǒng)計分析。結(jié)果表明常用字在文本中的覆蓋率和使用率相當(dāng)高,即581個常用字在文本中的覆蓋率平均在68.9%以上,1 000個常用字在文本中的覆蓋率平均在81.4%以上,2 500個常用字在文本中的覆蓋率平均在96%以上,并且常用字在不同統(tǒng)計對象文本中的使用頻度也會有所不同。因此常用字不管是在生活中還是在工作中都無處不在,對人們的學(xué)習(xí)、生活、工作起著至關(guān)重要的作用。2 使用率統(tǒng)計算法
2.1 使用率統(tǒng)計數(shù)學(xué)算法
2.2 使用率統(tǒng)計程序算法的實現(xiàn)
3 字頻統(tǒng)計算法
3.1 字頻統(tǒng)計數(shù)學(xué)算法
3.2 字頻統(tǒng)計程序算法的實現(xiàn)
4 常用字覆蓋率統(tǒng)計分析系統(tǒng)
4.1 系統(tǒng)框架
4.2 系統(tǒng)功能
5 常用字統(tǒng)計實驗
6 結(jié)束語