• 沒有找到結果。

改良Boyer-Moore搜尋演算法於中文之應用

N/A
N/A
Protected

Academic year: 2021

Share "改良Boyer-Moore搜尋演算法於中文之應用"

Copied!
4
0
0

加載中.... (立即查看全文)

全文

(1)

改良 Boyer-Moore 搜尋演算法於中文之應用

李炯三

1

陳瑞成

台北護理學院資訊管理研究所 csl@mail1.ntcn.edu.tw1

摘要

本論文發表一個改良的 Boyer-Moore(BM)搜尋演 算法,主要觀念是利用中文字出現頻率不同的特 性,來修改比對的順序,使其在中文字串的搜尋上 發揮更大的效能。本方法是以先比對搜尋字串中 「最不常使用字」的方式,讓比對的次數降低,以 增進搜尋的效率。根據 BM 演算法作者所定義的效 能指標,計算比對字串所需次數與搜尋到字串前跳 過字數之比值,本方法效能指標約為 BM 演算法的 一半。 關鍵字:中文字串搜尋、Boyer-Moore 演算法、最 不常使用字 Abstract

This paper proposed a searching heuristic for Chinese Texts based on Boyer-Moore (BM)algorithm, using the characteristic of Chinese texts that the characters occur with unequal frequency to modify comparative sequence. It makes better performance when searching Chinese patterns. In the proposed heuristic, the character in the pattern with the least used frequency will be checked first. Thus, we can reduce the comparisons, and improve performance. According to the performance index defined by BM's authors, dividing the number of comparisons by the number of characters passed before the pattern was found, the proposed heuristic's performance index is about half of the original BM algorithm.

Key words: Chinese string searching, Boyer-Moore algorithm, least frequently used character I. 前言 在電腦軟體應用的領域中,搜尋是一項很重要 的議題。不管是用來尋找文件中的某些文字,或者 是在網路上找尋特定關鍵字的網頁,我們都會使用 到搜尋的功能。隨著網際網路的發展以及儲存媒體 容量的增大,我們也能夠從網路上獲得大量的數位 化內容;除了提供各種資訊的網頁,另外像是電子 書、電子期刊,更將原有紙本的內容以數位化文字 的方式重新呈現。數位化所帶來的好處,不僅讓資 訊傳播的速度更加快速,運用搜尋的功能也讓我們 能更快速的找到我們想要的資訊。因此,如何在大 量的文字之中,找到特定的字串(pattern),便是 我們所關心的事情。 許多研究也都致力於從文字中尋找特定字串 的過程,也已經有許多演算法針對其效率做改進。 暴力搜尋法(brute force searching)是從文字的 開頭比對字串,並從字串的最左邊一個字元開始比 對[1],如果這兩個字元是一樣的話,就向右繼續 比對下一個字元;如果不一樣的話,就將整個字串 沿著文字向右移動一個字元,並且重覆上面的步 驟。而 KMP 演算法(Knuth-Morris-Pratt algorithm) 是以暴力演算法為基礎,並從字串比較之中獲得字 串的特性,依此改善搜尋效率[2]。BM 演算法 (Boyer-Moore algorithm)則是從搜尋字串的最右 邊一個字元開始比對,並試圖跳過一些不可能具有 該搜尋字串的字元[3]。而 Hume 與 Sunday 則為字 串搜尋演算法提供分類與組織架構並且評估其效 能[5]。 目前有許多字串搜尋的技巧都是針對英文字 來做改良,因為有大量的文章、電子期刊、網頁都 是以英文撰寫而成。同樣的,中文字也可用數位化 的方式呈現,據估計有 70%的中文出版品在印行之 前也都是以數位化的格式儲存[6]。而且在網路上 中文的資料更是快速的成長。因此絕對有必要發展 適合中文字特性的字串搜尋方法。 在本篇論文中,將使用一個修改自 BM 演算法 的方法,用來尋找特定中文字串出現在文章中的位 置。這個方法是基於 BM 演算法[3]來改進,以增加 比對不吻合(mismatch)的機率來減少比對的次數。 文章的其他部份將如下所述。第二部份將會描 述中文字的特性,我們將應用此一特性來改進搜尋 的方法。第三部份則敘述改良的搜尋方法。在第四 部份中,我們將評估此一改良搜尋方法的效能。最 後第五部份則是結論。 II. 中文字的特性 中文與英文有許多地方不同,主要的差異在 於,英文單字是由 26 個英文字母構成;而中文字 是由單一的字元所組成,而且每個字都具有獨立的 意義。在 CNS11643 中文標準交換碼中,中文字總

(2)

計有 48,027 字[7],其中大部份為異體字或罕用 字。因此,中文字需要以 16 個 bit 來編碼,而英 文字僅需要 7 個 bit 的 ASCII 碼就足夠表示。另 外,中文是一種相黏的語言,也就是詞與詞之間並 沒有用符號分隔,不像英文單字間會以空白分隔, 讀者必須以自己對中文的了解來正確的斷詞。 中文字的另一個特徵就是每個字出現的頻率 都不一樣,而且某些字的出現頻率遠較其他字為 高。在教育部的常用國字標準字體表[8]中,共列 出常用字 4,808 字。在蔡登傳、羅書宜的台灣地區 中文新聞常用字彙的調查研究中[9],統計 3,600 餘則新聞共 260 餘萬字後,發現這些新聞共用到 5,235 字,另外,95%的中文字是由 1,519 的最常 用字所組成的。而其中最常用的字是「的」,佔了 3.37%。 我 們 也 對 網 路 上 的 Yahoo! 奇 摩 新 聞 (http://tw.news.yahoo.com)的用字做調查,統計 的期間從 2005-11-20 到 2005-11-26。在分析了這 一週內的 1,042 則新聞共 442,601 字後,發現總共 使用了 4,051 個中文字,最常使用的字是「的」, 佔了文章總字數的 2.56%。另外,最常出現的標點 符號是「,」,佔了 3.02%。而佔總字數 95%的最常 用字是由 1,449 個中文字所組成的。所以,從表一 可以知道,每個中文字出現的頻率都不一樣,而且 某些字的出現頻率遠較其他字的頻率為高。而在英 文字中並沒有這樣的特性,英文字母的出現頻率並 不會有如此大的差異性。所以接下來我們將運用此 一特性,來改善 BM 演算法在搜尋中文字串時的效 率。 表一:中文字使用頻率不同的特性 項目 中文報紙[9] 網路新聞 文章的文字總數 2.61*106 字 4.4*105 字 最常用字出現次 數 78170 (3.37%) 11346 (2.56%) 最罕用字出現次 數 1 (0.000038%) 1 (0.0002%) 總共所使用的中 文字 5235 字 4051 字 佔總字數 95%的 最常用字 1519 字 1449 字 III. BM

演算法

及其改良方法 在這個部份,我們將要介紹一種改良自 BM 演 算 法 (Boyer-Moore algorithm) 的 字 串 搜 尋 方 法 [4]。BM 演算法試圖跳過一些不可能具有該搜尋字 串的字元,並且是從搜尋字串的最右邊一個字元開 始比對,如果這兩個字元是一樣的話,就向左回來 比對前一個字元;如果不一樣的話,則檢查這個字 是不是曾出現在要搜尋的字串中,有出現則移動字 串將該字元與該字元最右一次出現在字串的位置 對齊;如果比對的字元沒有出現在要搜尋的字串 中,也就是所謂的比對不吻合(mismatch),則可以 直接跳過與字串等長的字元,因為其中必不存在我 們要尋找的字串。因為 BM 演算法是從搜尋字串的 最右邊的字元開始比對,所以如果該字元經常出現 在文章中,將會使得比對的次數增加。在圖一中, 我們使用這個繞口令做為搜尋的文章,因為它是由 較少的相異中文字(四、個、十、共、幾)所組成, 而且每個中文字出現的頻率差異較大(四:9 次、 個:6 次、十:7 次、共:1 次、幾:1 次)。假設 我們要搜尋的字串是「幾個四」,那麼在 BM 演算法 中的比對順序就是「四」,接著是「個」,最後比對 「幾」。這麼一來,需要比對三次,如圖一中的○1 到 ○3,才能跳過開頭的「四個四」,因為先比對的「四」 和「個」在我們要搜尋的文字中,出現的頻率很高, 所以會增加比對的次數。在○12、○13和○14中也有一樣 的情形。最後 BM 演算法總共需要比對 20 次才能找 到搜尋字串「幾個四」出現在文字中的位置。 圖一:使用 BM 演算法搜尋字串「幾個四」 因此,我們將 BM 演算法做一些修改,讓比對 字串的順序不再是從最右邊的字元開始,而是從最 不常用字開始比對,因為這樣可以增加比對不吻合 的機率,進而減少比對的次數。在實做時,將需要 建立一個中文字的出現頻率表,從頻率表中出現次 數最少的字,也就是最不常用字開始比對;而在圖 二中,我們依照「幾」「個」「四」出現在文章中的 次數來安排比對的順序,也就是從最少出現的「幾」 開始比對,然後是「個」,最後才比對「四」。所以 我們比對的結果便如圖二所示,共需要比對 15 次 才會找到搜尋的字串。 圖二;使用改良的 BM 演算法搜尋字串「幾個四」 為了便於解釋比對的概念,我們定義每次在文 字中要與搜尋字串比對的一組文字為一個比對的 區間,其長度為搜尋字串的長度。比對區間將隨著 要搜尋的字串移動,然後依照最不常用字先比對的 順序,檢查比對區間中的字元是否相同。當檢查到 字元不同時,就移動到下一個比對的區間。在圖二 中,因為前三個比對區間中的第一個字元不是 「幾」,所以我們可以順利的跳過,並且移動到第 四個比對區間。在第四個比對區間中,第一個字元 是「個」,雖然不是「幾」,但是他出現在我們要搜 尋的字串「幾個四」中,有可能是我們要找的。因

(3)

此我們就產生一個暫時的比對區間,將「個」與搜 尋字串中的「個」對齊,然後重新檢查第一個字元 是不是「幾」。結果第一個字元是「四」,於是我們 便放棄這個比對區間,回到之前比對的下一個比對 區間。到了第○13次比對時,因為「幾」出現在要搜 尋的字串中,而且正與「幾」在搜尋字串中的位置 相符,所以我們便繼續比對這個比對區間中的其他 文字,直到我們依照比對順序在最後找到「幾」、 「個」、「四」,並且傳回字串所在的位置。 這樣的方法通常可以減少比對的次數,而發 揮比 BM 演算法更好的效能。在中文字的比對中更 是如此,通常我們只需要兩次的比對就可以跳過含 有部份搜尋文字的比對區間;第一次是產生一個暫 時的比對區間與該組文字對齊,第二次比對則可以 找到與搜尋字串相異的字元,也就是可以跳過該比 對區間。舉例來說,當我們在圖二中比對「十四個 四十四」這組文字時,我們需要比對○9 、○10、○11三 次,就可以發現其中不含有要搜尋的字串而跳過這 組文字;而在圖一中以 BM 演算法比對時,則需要○10 到○15共六次才能跳過該組文字。然而,在改良的方 法中,如果搜尋字串的比對順序與 BM 演算法相同 時,則比對的效能可能不會有明顯的增加。 改進方法的步驟如圖三所示。在步驟一中所 使用的中文字出現頻率表,可以從一些相關的文獻 [9],或是一些統計資料中取得,在本文第四部分 中,將使用一個可以動態更新的頻率表。步驟四可 以減少在 BM 演算法中重覆比對某些字元的問題。 當我們在比對區間中檢查的第一個字元曾經 出現在搜尋字串中時,會產生一個暫時的比對區 間,然後繼續比對其中的字元。但是,如果這個字 元不只一次出現在搜尋字串中時,我們就要產生許 多暫時的比對區間來繼續比對的動作。在文獻[3] 中的例子,搜尋字串「AT-THAT」包含了兩個「A」 與三個「T」,而應用我們的方法,比對的順序則為 H、A、A、T、T、T、-。如圖四所示,第五個比對 的字元是第四個比對區間的○5 「T」。因此,我們需 要三個暫時的比對區間來對齊「T」並繼續比對, 分別是「-THAT-P」、「AT-THAT」和「.--AT-T」。在 第一個暫時的比對區間「-THAT-P」中,因為第一 個檢查的字元,也就是比對區間中的倒數第三個字 元○6 ,並不是「H」,所以我們就跳過這個暫時的比 對區間。接著第二個暫時的比對區間「AT-THAT」, 按照比對順序從○7 到○13,就可以找到搜尋字串的位 置。我們改良的方法共比對了 13 次,比原本的 BM 演算法少了一次。 圖四:使用改良的 BM 演算法來搜尋字串「AT-THAT」 IV. 評估改良方法的效率 首 先 , 我 們 以 網 路 上 的 Yahoo! 奇 摩 新 聞 (http://tw.news.yahoo.com)為文章的來源。該新 聞共分十二大類(政治、社會、國際、兩岸、財經、 影視、體育、生活、休閒、科技、健康、新奇), 每則新聞的內容是由不同的平面或電子媒體所提 供。我們將新聞內容按照日期存入資料庫,同時也 計算每一篇蒐集到的新聞中,每個中文字的使用頻 率。我們每天會更新一次資料庫,一天約有 150 則新聞,一個星期所蒐集到的新聞約有 43 萬個中 文字。因為中文字的使用頻率,會隨著時間的不同 而異,所以我們每天更新一次資料庫,並且在搜尋 時從資料庫取出最新一週的中文字累積出現頻 率,來排列搜尋字串的比對順序。 評估的方法是讓 BM 演算法與我們改良的方法 同時尋找所有含有搜尋字串的新聞,然後計算找到 這些新聞所需要的總比對次數。在不考慮 BM 演算 法在實做時需要製作每個字元可跳過長度表的時 間以及改良的演算法從資料庫中搜尋不常用字頻 率的時間和程式執行所需的時間的前提下,針對兩 種搜尋方法的總比對次數進行比較。 在開始搜尋前,我們先利用之前統計的中文字 出現頻率表,以執行搜尋時一週內的資料為基礎, 來安排搜尋字串的比對順序。譬如,搜尋字串是「我 們」,「我」在中文字出現頻率表中的次數是 382 次,「們」是 337 次。依照不常用字先搜尋的規則, 搜尋的順序是「們」→「我」,其比對順序恰與 BM 演算法相同。而如果搜尋字串是「你的」,「你」在 1. 從中文字出現頻率表中,找出搜尋字串裡 每個字元出現的頻率,由先比對不常用字 的原則來建立比對的順序 2. 從要搜尋的文章開頭,產生一個比對區間 3. 依照比對順序檢查區間中的字, If 第一個比對的字元有出現在搜尋字串 中, Then 產生一個暫時的比對區間 並且將該字元與他在搜尋字串中的位置 對齊 然後依照比對順序檢查區間中的字 If 與搜尋字串完全符合的話 Then 傳 回字串在文章中的位置 4. 移動距離 = MAX(用 BM 演算法計算的值, 下一個比對區間) 5. If 已經比對到了文章的結尾 Then 傳 回找不到的訊息 Else 回到步驟 2. 圖三:改良方法的步驟

(4)

中文字出現頻率表中的次數是 105 次,「的」是 6,644 次,所以搜尋的順序是「你」→「的」,比 對順序與 BM 演算法不同。 然後從中研院現代漢語平衡語料庫的雙音節 頻率前 5000 詞表[10]中,取出 100 個二字詞(如: 我們、你的、台灣、公司、研究)為搜尋字串。比 對結果發現,在這 100 個二字詞中,兩者的比對次 數有 29 個是相同的,而有 71 個是改良後的演算法 比對次數較少,也就是效能較佳;在這 71 個比對 的二字詞中,BM 演算法總比對次數為 202,154 次, 而改良後的演算法總比對次數為 196,408 次,減少 的次數為 5,746 次。 另外,我們也從中研院現代漢語平衡語料庫的 三音節頻率前 3000 詞表[11]中,取出 100 個三字 詞(如:為什麼、小朋友、研究所、教育部)為搜尋 字串。結果發現,在這 100 個三字詞中,有 54 個 是改良後的演算法比對次數較少,也就是效能較 佳;在這 54 個比對的三字詞中,BM 演算法總比對 次數為 173,431 次,而改良後的演算法總比對次數 為 168,653 次,減少的次數為 4,778 次。也就是說, 依照中文字出現頻率的不同,來改變比對字串順序 的方法,能夠增進比對的效能。 同樣的,我們也比較在搜尋兩個字到六個字 的搜尋字串時,與 BM 演算法比對效能的差別。我 們各選出 20 個長度從兩個字到六個字的搜尋字 串,讓 BM 演算法與我們改良的方法同時尋找所有 含有搜尋字串的新聞,根據文獻[3]所定義的效能 指標,計算找到搜尋字串所需要的比對次數與在找 到字串前跳過的字數之比值,當比對次數越少時, 效能指標也越小。比較 BM 演算法與本論文提出的 方法效能指標的差別。結果如圖五所示,可以發現 改良後的方法之效能指標約為 BM 演算法的一半, 而兩者之間顯著的差距表示,本方法確實能有效的 增進搜尋的效率,而且應用在中文環境中的效果更 好。 圖五;BM 演算法與改良方法的效能指標比較 V. 結論 本文呈現了一種利用中文字出現頻率的不同 來改良 BM 演算法的中文字串搜尋方法。因此本方 法也承襲自 BM 演算法的基礎,來跳過一些不可能 含有搜尋字串的組合。在搜尋的過程中將會形成一 比對區間,並且先比對較不常用的字以增加比對不 吻合的機率,進而減少比對的次數來增進搜尋的效 率。 參考文獻

[1] S. Baase, Computer Algorithms – Introduction to design and analysis, Addison Wesley (1988).

[2] D.E. Knuth, J.H. Morris and V.R. Pratt, “Fast pattern matching in strings," SIAM Journal of Computing, Vol.6, pp. 323-350 (1990).

[3] R.S. Boyer and J.S. Moore, “A Fast String Searching Algorithm," Communication of the ACM, NO. 10, Vol. 20, pp. 762-772 (1997)

[4] A. Apostolico and R. Giancarlo, “The

Boyer-Moore-Galil string searching strategies revisited, ” SIAM Journal on Computing, vol. 15,

no. 1, pp. 98-105, Feb. 1986.

[5] A. Hume and D. Sunday, “Fast String Searching," Software – Practice and Experience, Vol. 21, pp. 1221-1248 (1991) [6] J.N. Chang and M.H. Chen, “Using World-segmentation model for compression of Chinese text," Computer processing of Chinese and oriental Languages, Vol. 9, No. 1, pp. 17-30 (1995) [7] CNS11643 中 文 標 準 交 換 碼 , http://www.cns11643.gov.tw [8] 教育部,常用國字標準字體表,正中出版社, 第 2 頁,台北 (1985) [9] 蔡登傳, 羅書宜,台灣地區中文新聞常用字彙 的調查研究,科技學刊,第 8 卷,第 4 期,第 312-332 頁 (1999) [10] 中研院現代漢語平衡語料庫 3.1 版(xml 版) 雙 音 節 頻 率 前 5000 詞 表 http://www.sinica.edu.tw/SinicaCorpus/ (2004) [11] 中研院現代漢語平衡語料庫 3.1 版(xml 版) 三 音 節 頻 率 前 3000 詞 表 http://www.sinica.edu.tw/SinicaCorpus/ (2004)

參考文獻

相關文件

Normalization by the number of reads in the sample, or by calculating a Z score, should be performed on the reported read counts before comparisons among samples. For genes with

You are given the wavelength and total energy of a light pulse and asked to find the number of photons it

After the Opium War, Britain occupied Hong Kong and began its colonial administration. Hong Kong has also developed into an important commercial and trading port. In a society

好了既然 Z[x] 中的 ideal 不一定是 principle ideal 那麼我們就不能學 Proposition 7.2.11 的方法得到 Z[x] 中的 irreducible element 就是 prime element 了..

volume suppressed mass: (TeV) 2 /M P ∼ 10 −4 eV → mm range can be experimentally tested for any number of extra dimensions - Light U(1) gauge bosons: no derivative couplings. =>

For pedagogical purposes, let us start consideration from a simple one-dimensional (1D) system, where electrons are confined to a chain parallel to the x axis. As it is well known

The observed small neutrino masses strongly suggest the presence of super heavy Majorana neutrinos N. Out-of-thermal equilibrium processes may be easily realized around the

incapable to extract any quantities from QCD, nor to tackle the most interesting physics, namely, the spontaneously chiral symmetry breaking and the color confinement.. 