|
楼主 |
发表于 2006-3-5 02:23:24
|
显示全部楼层
請問是輸入哪個字呢?红色的“叉"是這樣嗎→X?
如果看到的是像上面Images的X↑那是正常的;因為測試資料中沒將這些圖放進去。
瀏覽器(或類似Googlebar....等)的Highlight和繁簡轉換是用PC的ActivX元件作的,原理不同;但流程上還是先要找到要找的資料。
可參考:(都可作全文Highlight,但不支持亞洲語系)
(美國)
http://perlfect.com/freescripts/search/
(俄羅斯)
http://risearch.org/
可參考這篇文章:
http://yukin.blogbus.com/logs/2004/02/82387.html
中文全文檢索技術
現已有許多 free, open-source *英文* 全文檢索引擎,但中文還很少。
大多數 free, open-source 全文檢索引擎無法處理 BIG5 中文資料,因為「英文字」和「中文字」有頗大差異,除編碼上 8bit 和 double byte 外,「字」的組成方式也不同。
簡略說明 Perlfect Search
http://www.perlfect.com/freescripts/search/
的運作流程,例子如下:
* 輸入 "double" 當 keyword
* search.pl 查全文索引 DB (由 indexer.pl 所事先建立),此 DB 記載著"double" 這個字出現在那些檔案。
* 註:由此可知 indexer.pl 建立 full-text DB 的方式為
* Step 1: 讀入 file1
* Step 2: 將 file1 內文解析成一個個的「(英文)字」,將檔案path存進Hash (associate array),也就是 --$FileList{"double"}->AddFile("/usr/local/doc/file1");
* 處理完整篇 file1 內文後,讀入下一檔案 file2, goto Step 1,直到處理完所有待處理檔案。
* grep 由 full-text DB 所查得的檔案列表,查得關鍵字 "double" 所在行區。
由此可知,「字」是全文檢索的關鍵。若 fulltext-indexer 沒有 BIG5 中文字
觀念,將資料當英文處理,顯然會得到錯誤結果。
解決這問題的方法有兩個方向 --
1. 讓 BIG5 中文字 *變成* English words
或
2. 讓 fulltext-indexer 認得 BIG5 中文字
1. 是治標,2. 是治本。唯 2. 的技術複雜度較高,chw 採 1. 的方式來作Perlfect Search 的 BIG5 patch。
Big5
/([\xa1-\xf9](?:[\x40-\x7e]|[\xa1-\xfe]))/
Big5+
/([\x81-\xfe](?:[\x40-\x7e]|[\x80-\xfe]))/
水電工注:
簡體中文是:/([\x81-\xfe][\x40-\xfe])/"
舉例來說 --
「例」 的 BIG5 code 為 A8D2,也就是 0xa8, 0xd2將 0-9 map至 g-p,也就是,將原先的 16 進位編碼0-9, a-f 改成 g-p, a-f 全為 alphabetic, *英文* 字。
0123456789
ghijklmnop
所以「例」對應為 aodi,為避免和「真正的 "aodi" 這個英文字」衝到(若真有這個字的話),加上字首bb、字尾ff,成品是 "bbaodiff "。中文字「例」轉變成道地的英文字"bbaodiff ",就可交給 *英文* full-text indexer 處理了。
缺點是,由原先 2 bytes 變大為 9 bytes (含字尾空白)。
此外,「中文 keyword」和 English keyword 也有些不同,如 「關鍵」得對應成「關」(C3F6, "bbcjfmff") AND「鍵」(C1E4, "bbchekff") 交集,也就是先將 "bbcjfmff"的 file list 和 "bbchekff" file list 作 AND 得到的 smaller file list,再進一步 grep 「關鍵」。
此法可廣泛應用於各式 full-text indexer/engine/db,如 mysql 最近支援 English full-text index,也可由上述方法使其具有中文 BIG5 資料全文檢索能力。
至於 2. 治本方法,可參考 --
http://ourinet.com/oin.pl?op=rea ... urdir=D.969374374.A
[ 本贴由 Artvine 于 2006-3-5 02:34 最后编辑 ] |
|