專利名稱:一種海量中文文件名快速模糊拼音查詢方法
技術(shù)領(lǐng)域:
本發(fā)明涉及計算機系統(tǒng)應(yīng)用技術(shù)領(lǐng)域,具體來講涉及一種支持中文模糊拼音快速查詢計算機中所有文件的方法。
背景技術(shù):
隨著存儲系統(tǒng)容量的不斷增長,計算機系統(tǒng)中保存的文件也越來越多?,F(xiàn)在的普通個人筆記本電腦都會有超過100G的存儲,保存著超過百萬計的文件。如何從這些海量文件中快速找到符合查詢要求的文件成為一個越來越重要的問題。海量信息查詢通常采用全文檢索的方法。但是全文檢索對文件名不合適,對中文文件名就更不合適。全文檢索的必要條件是有一個合適的分詞系統(tǒng),然后根據(jù)分詞結(jié)果對原始文檔進行倒排序索引。但是文件名因為歷史習(xí)慣/程序兼容性等多方面原因,基本沒有采用空格進行分詞,所以對西文文件名也無法建立倒排序索引,至于中文則更不存在類似西文空格那樣的天然的分詞方案。目前的快速文件名查詢方法往往基于快速字符串匹配算法。比如GNU Gr印是最知名的字符串精確匹配程序,其采用內(nèi)循環(huán)展開的Boyer-Moore算法。AGrep程序則是一個知名的近似串匹配程序,其采用mi-Manber算法?,F(xiàn)有的針對文件名的快速查詢方法中所存在的不足有
1、 針對海量文件名的查詢速度不理想。即使針對個人用的普通電腦,利用Windows 自帶的文件名查詢工具進行查詢耗時也在1分鐘以上。如果針對云計算的存儲中心或者企業(yè)級的文件存儲服務(wù)器,查詢速度會更慢。2、 文件名索引時太過簡單?,F(xiàn)有的文件名快速查詢工具,比如Iinux下的 locate以及windows下的loCate32都建立文件名索引庫。但是這些索引庫只是簡單的保存所有的文件名,沒有對文件名進行任何預(yù)處理。3、對中文模糊拼音查詢支持不好?,F(xiàn)有的知名文件查詢工具中還沒有支持中文模糊拼音查詢的,一些信息檢索系統(tǒng)中雖然有模糊拼音匹配功能,但是基于的是距離向量的近似字符串匹配方法。針對模糊拼音匹配問題,近似字符串匹配方法在性能上和精確度上都不如基于factor的多模式字符串匹配方法。
發(fā)明內(nèi)容
本發(fā)明的目的是針對上述技術(shù)問題,提出一種用于快速查詢所有匹配文件的支持中文模糊拼音查詢的方法。為了解決上述技術(shù)問題,本發(fā)明的技術(shù)方案如下 一種海量中文文件名快速模糊拼音查詢方法,包括如下步驟
1)判斷查詢字符串是否為中文拼音,如果為中文拼音則根據(jù)模糊拼音規(guī)則進行轉(zhuǎn)換并擴展形成新的查詢字符串,如果不是中文拼音則查詢字符串不變;
2)將上述查詢字符串執(zhí)SktBackward Oracle Matching算法構(gòu)建模式串識別的神諭有限自動機;
3)遍歷文件名數(shù)據(jù)庫,對所述文件名數(shù)據(jù)庫中存儲的文件名進行預(yù)過濾; 所述預(yù)過濾包括如下步驟
在所述文件名數(shù)據(jù)庫中將文件名長度少于查詢字符串長度的文件名進行第一次過濾; 然后判斷查詢字符串中是否有“.”符號,如果不包含“.”符號,則在查詢時只匹配文件名的前綴,如果包含“.”符號,則匹配時以“.”符號的位置為分割匹配文件名的后綴,將后綴不匹配的文件名進行第二次過濾;
4)在文件名數(shù)據(jù)庫中對步驟3)預(yù)過濾后的文件名執(zhí)行SBOM算法匹配,對所有符合條件的查詢結(jié)果進行排序并返回查詢結(jié)果。作為可選方案,所述模糊拼音規(guī)則默認設(shè)置為“zh=z,ch=c, sh=s, ing=in, ang=an, eng=en”,并可根據(jù)用戶自主設(shè)定。作為可選方案,所述文件名數(shù)據(jù)庫中至少存儲有文件名、文件路徑、文件大小、文件時間和預(yù)處理信息,所述預(yù)處理信息包括文件類型、文件名中是否包含中文以及中文漢字個數(shù)、最后一個”.”符號在文件名中的位置;所述文件名、所述文件路徑、所述文件大小、 所述文件時間和所述預(yù)處理信息是通過對文件系統(tǒng)掃描處理后得到的。作為可選方案,所述步驟1)中根據(jù)模糊拼音規(guī)則進行轉(zhuǎn)換并擴展的步驟包括將所述中文拼音根據(jù)所述模糊拼音規(guī)則進行轉(zhuǎn)換,然后將轉(zhuǎn)換后的拼音與對應(yīng)的漢字進行關(guān)聯(lián)擴展。作為可選方案,所述文件名數(shù)據(jù)庫將根據(jù)所述文件系統(tǒng)中的文件信息變化實時更新。一種海量中文文件名快速模糊拼音查詢系統(tǒng),包括文件名索引庫構(gòu)建模塊、字符串快速匹配算法模塊、漢字模糊拼音處理模塊和初始化拼音漢字關(guān)系對應(yīng)表;所述文件名索引庫構(gòu)建模塊用于實現(xiàn)掃描文件系統(tǒng)并建立文件名數(shù)據(jù)庫系統(tǒng);所述字符串快速匹配算法模塊用于將查詢字符串執(zhí)Skt Backward Oracle Matching算法并構(gòu)建模式串識別的神諭有限自動機以及將查詢字符串與文件名數(shù)據(jù)庫中存儲的文件名執(zhí)行SBOM算法匹配; 所述漢字模糊拼音處理模塊用于將中文拼音根據(jù)模糊拼音規(guī)則進行轉(zhuǎn)換,然后將轉(zhuǎn)換后的拼音與對應(yīng)的漢字進行關(guān)聯(lián)擴展,形成新的查詢字符串;所述初始化拼音漢字關(guān)系對應(yīng)表用于存儲所述關(guān)聯(lián)關(guān)系并按漢字詞頻排序。本發(fā)明的有益效果在于 1、海量文件下的查詢速度快。首先由于建立實時的文件名數(shù)據(jù)庫,對文件的查詢無需遍歷整個文件系統(tǒng)。所以該方法的查詢速度遠遠高于windows自帶的文件查詢系統(tǒng),其次由于針對文件名的特性進行預(yù)處理,通常情況下可以減少30%左右的字符串匹配次數(shù)。因為文件名通常是8. 3格式, 而查詢條件中往往沒有”.”符號,所以完全可以只在前綴8中查詢文件名是否符合要求。 此外根據(jù)后綴名可以在用戶選擇了文件類型的情況下快速過濾掉不符合類型的文件,并且采用高效的基于factor的多模式字符串匹配算法,性能上明顯由類似Grep程序中采用的 Boyer-Moore 算法。2、支持中文快速查詢。通常的文件名查詢系統(tǒng)將中文和英文同等對待。但是中文字庫大且文件名中包含中文的少,所以對漢字進行單獨處理能夠明顯加快查詢性能。比如操作系統(tǒng)自帶的大量文件都不包含中文,通過對文件名中的中文字符進行簡單計數(shù)就能夠在進行中文查詢時能夠快速排除這些文件。3、支持模糊拼音精確查詢。常見的模糊拼音查詢方法采用的是基于距離向量的近似字符串匹配方法。比如用戶輸入”shihu”,近似字符串匹配查詢的是在改變一個字母的情況下也能匹配的所有串。這樣雖然也能實現(xiàn)模糊拼音,卻包括的太多不需要的結(jié)果。比如 shahu和sihu都是只改變一個字母,但shahu明顯不屬于期望的查詢結(jié)果集。近似字符串匹配的正確用途是防止用戶輸入錯誤,比如shihu錯誤輸入為hsihu。模糊拼音查詢的本質(zhì)類似于英文大小寫無關(guān)查詢。比如“A”能匹配“a”,但是不能匹配“b”,雖然它們之間的距離都是1。同樣的”shihu”在模糊拼音規(guī)則下只能匹配”sihu”。所以模糊拼音查詢其實就是待查詢字符串擴展后的多字符串精確匹配問題,而不是一個近似匹配問題。本方法采用模糊拼音到詞語的對應(yīng)關(guān)系表擴展查詢字符串,并采用基于factor的多模式字符串匹配算法,能在一次匹配過程中同時匹配多個字符串,顯著提高了模糊拼音查詢的精確度和速度。
圖1系統(tǒng)開發(fā)、部署與運行過程; 圖2文件名匹配方法流程圖。
具體實施例方式下面將結(jié)合附圖和具體實施例對本發(fā)明做進一步的說明。1.首先開發(fā)文件名查詢系統(tǒng),該系統(tǒng)的核心部分包括文件名數(shù)據(jù)庫索引構(gòu)建模塊、漢字模糊拼音處理模塊、字符串快速匹配模塊,其中漢字字庫(詞庫)構(gòu)建拼音到詞語的對應(yīng)關(guān)系表的構(gòu)建在開發(fā)時完成,以減少系統(tǒng)部署和運行時的開銷。對應(yīng)關(guān)系表中根據(jù)詞頻確定關(guān)系權(quán)重。2.當將系統(tǒng)安裝到用戶端計算機時,要求用戶輸入自己的模糊拼音規(guī)則。安裝時同時完成文件系統(tǒng)的掃描以建立文件名數(shù)據(jù)庫。該掃描步驟也可以在系統(tǒng)安裝后第一次啟動時完成。對文件名進行掃描處理時,以“.”為分隔符將文件名分為兩部分,既前綴名和后綴名,對后綴名可以進行文件類型分析,對前綴名對中文字數(shù)進行計數(shù)。當用戶端計算機系統(tǒng)資源充足時,可對文件名按多種排序方式進行排序后保存。文件名查詢和全文查詢的一個區(qū)別是排序方式。文件名查詢后的結(jié)果往往需要按多種條件排序如匹配度、文件名拼音順序、文件大小、文件創(chuàng)建時間、文件修改時間、文件最后訪問時間等。對常用排序進行預(yù)先排序能夠減少查詢后的排序步驟的時間開銷。3.當系統(tǒng)運行時,啟動文件系統(tǒng)監(jiān)視進程動態(tài)監(jiān)控文件系統(tǒng)變化,并相應(yīng)的更新文件名數(shù)據(jù)庫。4.當用戶輸入查詢字符串時,首先判斷該查詢字符串是否為中文拼音。如果是則采用用戶自定義的模糊拼音規(guī)則轉(zhuǎn)換并擴展查詢字符串。針對轉(zhuǎn)換并擴展后的字符串執(zhí)行基于factor的多模式字符串匹配的SBOM算法預(yù)處理步驟。SBOM算法全稱為kt Backward Oracle Matching算法。當然也可以采用其它的基于factor的多模式字符串匹配算法,如 Multiple Shift-Or算法。基于factor的算法在性能上優(yōu)于基于I^refix的算法(比如KMP 算法)和基于suffix的算法(比如Boyer-Moore算法)。然后遍歷所有的文件名數(shù)據(jù)庫,首先根據(jù)文件名長度過濾不符合要求的文件,接著根據(jù)中文字數(shù)過濾不符合要求的文件,最后采用和預(yù)處理步驟同樣的字符串匹配算法過濾出符合條件的文件。如果沒有對文件名數(shù)據(jù)庫進行預(yù)排序,則根據(jù)用戶的排序條件排序查詢結(jié)果集。最后返回符合要求的查詢結(jié)果集。其具體的流程如圖1所示
1、一種海量中文文件名快速模糊拼音查詢系統(tǒng)的三個主要模塊的開發(fā)以及初始化拼音漢字關(guān)系對應(yīng)表。三個主要模塊為
a)文件名數(shù)據(jù)庫索引構(gòu)建模塊開發(fā),實現(xiàn)掃描文件系統(tǒng)構(gòu)建文件名數(shù)據(jù)庫系統(tǒng)功能。b)字符串快速匹配算法模塊開發(fā),基于kt Backward Oracle Matching (SBOM) 算法實現(xiàn)。c)漢字模糊拼音處理模塊開發(fā),實現(xiàn)模糊拼音到漢字對應(yīng)關(guān)系;
d)初始化拼音漢字關(guān)系對應(yīng)表,格式為拼音_>漢字列表,比如”hanzi”-〉”漢字,漢子,寒子,汗?jié)n,憨子,韓資”。漢字列表按詞頻排序。2、部署海量中文文件名快速模糊拼音查詢系統(tǒng)
a)系統(tǒng)安裝時要求用戶輸入自己的模糊拼音規(guī)則。如果用戶不輸入,則采用缺省的模糊拼音規(guī)則“zh=z,ch=c, sh=s, ing=in, ang=an, eng=en"0根據(jù)模糊拼音擴展拼音漢字關(guān)系對應(yīng)表。b)部署時同時完成文件系統(tǒng)的掃描以建立文件名數(shù)據(jù)庫。文件名數(shù)據(jù)庫中至少保持如下字段的信息文件名、文件路徑、文件大小、文件時間、預(yù)處理信息(文件類型、文件名中是否包含中文以及中文漢字個數(shù)、最后一個”.”符號在文件名中的位置)等。對文件名進行掃描處理時,首先找到最后一個”.”符號在文件名中的位置,然后以“.”為分隔符將文件名分為兩部分,即前綴名和后綴名。對后綴名可以進行文件類型分析,比如jpg/jpeg/gif/ bmp都屬于圖片類型、doc/docx/xls/xlsx/ppt/pptx/pps等屬于office文檔類型等。如果是Iinux文件系統(tǒng),則采用file程序調(diào)用判斷文件類型。對前綴名中文字數(shù)進行計數(shù)。3、系統(tǒng)安裝完成后運行時實時監(jiān)控文件系統(tǒng)中文件信息的變更。對于windows操作系統(tǒng),采用ReadDirectoryChanges系統(tǒng)調(diào)用監(jiān)控文件系統(tǒng)的變更;對于Iinux類操作系統(tǒng),采用inotify系統(tǒng)調(diào)用監(jiān)控文件系統(tǒng)的變更。文件系統(tǒng)中文件信息的變更實時更新的文件名索引數(shù)據(jù)庫中。4、查詢時,采用如圖2所示的方法查詢符合條件的文件。主要包括以下步驟
a)當用戶輸入查詢字符串時,首先判斷該查詢字符串是否為中文拼音。如果是則采用用戶自定義的模糊拼音規(guī)則擴展查詢字符串。比如”hanzi”會被識別為漢語拼音,然后轉(zhuǎn)換為” hanzi,hangzi”,然后根據(jù)轉(zhuǎn)換后拼音字符查詢拼音漢字關(guān)系對應(yīng)表,從而擴展得到包括漢字在內(nèi)的新查詢字符串,例如“hanzi,hangzi,漢字,漢子,寒子,汗?jié)n,憨子,韓資”
b)針對擴展后的字符串執(zhí)行kt Backward Oracle Matching (SBOM)算法預(yù)處理步驟。該預(yù)處理步驟主要是構(gòu)建一個模式串識別的一個神諭有限自動機。具體算法偽代碼如下
構(gòu)造神諭(Oracle)自動機步驟(輸入P= \ρ\ ρ2,…,//},為待匹配的多個擴展后
查詢字符串)OR_ trie — TrieO0)單詞查找樹
δ^是它的轉(zhuǎn)移函數(shù)將對應(yīng)于整個字符串//的狀態(tài)為終結(jié)符 I — OR—trie 的根 SOR (/) — θ
For Current in文件遍歷序列Do
Parent 一 0R_trie當前節(jié)點的父節(jié)點 σ 一 hkParent 至Ij Current 的標記 Down 一 Sor (Parent)
While Down Φ θ AND δ 0R (J)own, σ ) = θ Do δ 0R φ own, σ) — Current Down 一 Sor Φ own) End of while If Down 一 θ Then
Sor {Current) 一 δ 0R φ own, σ ) Else Sor {Current) 一 I End of if
End of for
}
c) 遍歷所有的文件名數(shù)據(jù)庫,查詢符合查詢條件的文件。主要步驟包括 1.首先根據(jù)文件名長度過濾不符合要求的文件。比如待查詢串”hanzi”有五個字符, 而文件名為四個字符” XXXX”,則不管是哪四個字符都不可能匹配。2.接著根據(jù)中文字數(shù)過濾不符合要求的文件,其原理同上。3.判斷待查詢串中是否包含”.”符號,根據(jù)判斷結(jié)果采取不同的查詢步驟。如果不包含”.”符號,則在查詢時只匹配文件前綴名。如果包含”.”符號,則匹配時以”.”符號的位置為分割分別匹配文件名數(shù)據(jù)庫中文件名的后綴和前綴。比如查詢串”hanzi”不包含”.”符號,那么可以只匹配文件名前綴。對于常見的8. 3文件格式,只需要匹配8位前綴名,能夠減少1/3的查詢時間。如果待查詢串包含”.”符號,比如“XX. jpg”,那么在匹配文件名時,先匹配后綴部分,如果后綴名符合,再匹配前綴部分。4.對于擴展后的文件名多模式字符串執(zhí)行SBOM算法進行匹配,其具體算法偽代碼如下
SBOM算法(輸入?yún)?shù)f = \p\ p\ ...,pr}為待匹配的多個擴展后查詢字符串,T
=^t2 ... tn代表文件名,η代表文件名長度)
{
min —待匹配串的最大長度 pos 一 0 Il當前比較位置 While pos η - min Do
Current — Or的初始狀態(tài) j 一 min
權(quán)利要求
1.一種海量中文文件名快速模糊拼音查詢方法,其特征在于,包括如下步驟1)判斷查詢字符串是否為中文拼音,如果為中文拼音則根據(jù)模糊拼音規(guī)則進行轉(zhuǎn)換并擴展形成新的查詢字符串,如果不是中文拼音則查詢字符串不變;2)將上述查詢字符串執(zhí)SktBackward Oracle Matching算法構(gòu)建模式串識別的神諭有限自動機;3)遍歷文件名數(shù)據(jù)庫,對所述文件名數(shù)據(jù)庫中存儲的文件名進行預(yù)過濾;所述預(yù)過濾包括如下步驟在所述文件名數(shù)據(jù)庫中將文件名長度少于查詢字符串長度的文件名進行第一次過濾; 然后判斷查詢字符串中是否有“.”符號,如果不包含“.”符號,則在查詢時只匹配文件名的前綴,如果包含“.”符號,則匹配時以“.”符號的位置為分割匹配文件名的后綴,將后綴不匹配的文件名進行第二次過濾;4)在文件名數(shù)據(jù)庫中對步驟3)預(yù)過濾后的文件名執(zhí)行SBOM算法匹配,對所有符合條件的查詢結(jié)果進行排序并返回查詢結(jié)果。
2.根據(jù)權(quán)利要求1所述的一種海量中文文件名快速模糊拼音查詢方法,其特征在于, 所述模糊拼音規(guī)則默認設(shè)置為“zh=z,ch=c, sh=s, ing=in, ang=an, eng=en”,并可根據(jù)用戶自主設(shè)定。
3.根據(jù)權(quán)利要求1所述的一種海量中文文件名快速模糊拼音查詢方法,其特征在于, 所述文件名數(shù)據(jù)庫中至少存儲有文件名、文件路徑、文件大小、文件時間和預(yù)處理信息,所述預(yù)處理信息包括文件類型、文件名中是否包含中文以及中文漢字個數(shù)、最后一個”.”符號在文件名中的位置;所述文件名、所述文件路徑、所述文件大小、所述文件時間和所述預(yù)處理信息是通過對文件系統(tǒng)掃描處理后得到的。
4.根據(jù)權(quán)利要求1所述的一種海量中文文件名快速模糊拼音查詢方法,其特征在于, 所述步驟1)中根據(jù)模糊拼音規(guī)則進行轉(zhuǎn)換并擴展的步驟包括將所述中文拼音根據(jù)所述模糊拼音規(guī)則進行轉(zhuǎn)換,然后將轉(zhuǎn)換后的拼音與對應(yīng)的漢字進行關(guān)聯(lián)擴展。
5.根據(jù)權(quán)利要求1所述的一種海量中文文件名快速模糊拼音查詢方法,其特征在于, 所述文件名數(shù)據(jù)庫將根據(jù)所述文件系統(tǒng)中的文件信息變化實時更新。
6.一種海量中文文件名快速模糊拼音查詢系統(tǒng),其特征在于,包括文件名索引庫構(gòu)建模塊、字符串快速匹配算法模塊、漢字模糊拼音處理模塊和初始化拼音漢字關(guān)系對應(yīng)表;所述文件名索引庫構(gòu)建模塊用于實現(xiàn)掃描文件系統(tǒng)并建立文件名數(shù)據(jù)庫系統(tǒng);所述字符串快速匹配算法模塊用于將查詢字符串執(zhí)行kt Backward Oracle Matching算法并構(gòu)建模式串識別的神諭有限自動機以及將查詢字符串與文件名數(shù)據(jù)庫中存儲的文件名執(zhí)行SBOM算法匹配;所述漢字模糊拼音處理模塊用于將中文拼音根據(jù)模糊拼音規(guī)則進行轉(zhuǎn)換,然后將轉(zhuǎn)換后的拼音與對應(yīng)的漢字進行關(guān)聯(lián)擴展,形成新的查詢字符串;所述初始化拼音漢字關(guān)系對應(yīng)表用于存儲所述關(guān)聯(lián)關(guān)系并按漢字詞頻排序。
全文摘要
本發(fā)明公開了一種海量中文文件名快速模糊拼音查詢方法,包括如下步驟1)判斷查詢字符串是否為中文拼音,如果為中文拼音則根據(jù)模糊拼音規(guī)則進行轉(zhuǎn)換并擴展形成新的查詢字符串,如果不是中文拼音則查詢字符串不變;2)將上述查詢字符串執(zhí)行SetBackwardOracleMatching算法構(gòu)建模式串識別的神諭有限自動機;3)遍歷文件名數(shù)據(jù)庫,對所述文件名數(shù)據(jù)庫中存儲的文件名進行預(yù)過濾;4)在文件名數(shù)據(jù)庫中對步驟3)預(yù)過濾后的文件名執(zhí)行SBOM算法匹配,對所有符合條件的查詢結(jié)果進行排序并返回查詢結(jié)果具有海量文件下的查詢速度快、支持中文快速查詢、支持模糊拼音精確查詢等特點。
文檔編號G06F17/30GK102236706SQ20111016394
公開日2011年11月9日 申請日期2011年6月17日 優(yōu)先權(quán)日2011年6月17日
發(fā)明者李瑩, 袁新宇 申請人:浙江大學(xué)