用拼音輸入法字典庫實現(xiàn)同音字模糊查詢

字號:

在開發(fā)各類應(yīng)用管理系統(tǒng)中,一般都要實現(xiàn)各種查詢功能,如何準(zhǔn)確、快速查找到符合條件的記錄,是實現(xiàn)各種查詢功能的重點。系統(tǒng)的實際開發(fā)過程中,查詢功能一般都是通過對字符進(jìn)行比較、判斷等方法來實現(xiàn)。我們開發(fā)一個人事管理系統(tǒng)中過程中,系統(tǒng)要具有新的查詢方式,即只要知道一個人姓名的讀音,并不知道每個字的具體寫法,通過檢索數(shù)據(jù)庫,就能把所有符合這個讀音的記錄內(nèi)容全部顯示出來。由于漢字存在著大量的同音字,采用常用的字符比較法,如查找一個名叫“李曉軍”的人,數(shù)據(jù)庫中存在的叫“李小君”的數(shù)據(jù)就不能查到,利用常用的查詢方法實現(xiàn)不了同音字的查詢功能。為了解決同音字的模糊查詢問題,筆者借用WINDOWS系統(tǒng)下的輸入法生成器,將系統(tǒng)中的拼音輸入法字典庫,生成了一個拼音查詢字典庫,利用這個拼音查詢字典庫,在使用VFP數(shù)據(jù)庫管理系統(tǒng)編寫的人事管理系統(tǒng)中,輕松實現(xiàn)了按語音進(jìn)行模糊查詢功能,具體思路如下:
    一、首先要生成一個拼音字典查詢數(shù)據(jù)庫
    選擇WINDOWS系統(tǒng)的開始—程序—附件—輸入法生成器,進(jìn)入輸入法生成器窗口,使用鼠標(biāo)點擊逆轉(zhuǎn)換的頁框,點擊打開文件按鈕,選中硬盤WINDOWS\SYSTEM文件夾下的WINPY.MB文件,在碼表原文件中輸入C:\WINPY.TXT,輸入完畢后點擊逆轉(zhuǎn)換,此時系統(tǒng)對全拼字典庫進(jìn)行轉(zhuǎn)換,最后將生成一個純文本文件,利用這個純文本文件編寫一段小程序即可生成一個拼音字典查詢數(shù)據(jù)庫。
    二、進(jìn)入VFP系統(tǒng),編寫一段生成程序命令為ZH.PRG
    程序中的內(nèi)容如下所列:
    CREA TABL B1 (NR C(60),HZ C(2),PY1 C(12),PY2 C(12))&&創(chuàng)建一個臨時數(shù)據(jù)庫
    USE B1 &&打開生成的數(shù)據(jù)庫
    APPE FROM C:\WINPY.TXT SDF
    &&將利用輸入法生成器生成的字典碼文件WINPY.TXT文件內(nèi)容追加到數(shù)據(jù)庫中
    DELE FOR ASC(SUBS(NR,3,1)) >=128
    &&在數(shù)據(jù)庫中刪除全部詞組內(nèi)容,只留下單字 DELE FOR RECN()< 13 &&在數(shù)據(jù)庫刪除編碼庫的頭文件
    PACK &&清除打了刪除標(biāo)記的記錄。
    REPL HZ WITH SUBS(NR,1,2),PY1 WITH SUBS(NR,3,AT(’ ’,NR)-2),;
     PY2 WITH SUBS(NR,AT(’ ’,NR)+1) ALL
    &&將漢字與拼音存放在不同的字段里,這里拼音有兩個字段,其中有一個為同音字。
    REPL NR1 WITH ‘s’+SUBS(NR1,3) FOR “sh”$NR1
    &&為了照顧南方口音的人員使用,可將全部zh,ch,sh替換成z,c,s
    REPL NR1 WITH ‘c’+SUBS(NR1,3) FOR “ch”$NR1
    REPL NR1 WITH ‘z’+SUBS(NR1,3) FOR “zh”$NR1
    REPL NR2 WITH ‘s’+SUBS(NR2,3) FOR “sh”$NR2
    REPL NR2 WITH ‘c’+SUBS(NR2,3) FOR “ch”$NR2
    REPL NR2 WITH ‘z’+SUBS(NR2,3) FOR “zh”$NR2
    COPY TO PYZDK FIEL HZ,PY1,PY2 &&生成一個拼音查詢數(shù)據(jù)庫
    USE &&關(guān)閉打開的數(shù)據(jù)庫
    ERASE ’B1.DBF’ &&刪除生成的臨過數(shù)據(jù)庫
    在VFP中命令窗口中,執(zhí)行上面這段程序系統(tǒng)將自動生成一個拼音查詢庫,并將這個數(shù)據(jù)庫命名為PYZDK.DBF。