|
|
|
檢索測試 |
#1 |
|
白明弘
發信站:
獅子吼站
(Lion , 信區: BudaTech)
|
看到你們努力研究的成果,我心中也感到十分的興奮。
我上站稍微測試了一下,目前有發現一個問題,當我用一個單字
去檢索的時候,例如「必」,內碼是A5B2,結果檢索時會可能會找到
XXA5 B2XX,這個問題在佛光大辭典的第一版中也是如此。
我想這個問題可能就是前面文章所討論到的中文識別函示的問題
,我在想你們可能已經在處理這個問題了,不過還是提醒你們一下。
非常謝謝你們的努力!!
Mon Dec 29 19:57:07 1997
|
|
|
|
|
Re: 檢索測試 |
#2 |
|
光音天
發信站:
獅子吼站
(Lion , 信區: BudaTech)
|
我們知道這個問題,因為底層的檢索函式是以byte 為單位,
考慮到以一個中文字查詢的情況並不多
可以改,但會損失一些速度,我們再想想看有
沒有辦法好了。
Thanks for your advice.
Abhasvara, OPEN 98 taskforce.
Tue Dec 30 12:43:31 1997
|
|
|
|
|
Re: 檢索測試 |
#3 |
|
邱大剛
發信站:
獅子吼站
(Lion , 信區: BudaTech)
|
==> 於 光音天 (open98@Lion) 文中述及:
: 我們知道這個問題,因為底層的檢索函式是以byte 為單位,
: 考慮到以一個中文字查詢的情況並不多
: 可以改,但會損失一些速度,我們再想想看有
: 沒有辦法好了。
如前所述, 有個辦法是再加上中文 filter,
先以 byte 為單位找出所有 "可能" 的 candidates,
然後再用中文 filter function 將誤判的部分去除
即可。
Ps. 根據我的經驗, 如果一開始就用中文專用的搜尋
函式的話, 在以 byte 為單位的程式語言中可能速
度會受很大的影響, 因此用 filter 的方式蠻不錯的,
可能只要多花幾十分之一秒,即可將誤判的去除。
祝 福慧雙修!
--
﹉﹊﹉﹊ � ﹉﹊﹉﹊﹉﹊﹉﹊﹉﹊﹉﹊﹉﹊﹉﹊﹉﹊﹉﹊﹉﹊﹉﹊﹉﹊﹉﹊﹉﹊﹉﹊
幻 陽焰 夢
影 化城 � 響 水月
浮泡 眼花 旋火輪
﹍﹎﹍﹎﹍﹎﹍﹎﹍﹎﹍﹎﹍﹎﹍﹎﹎﹍﹎﹍﹎﹍﹎﹍﹎﹍﹎﹍﹎﹍﹎﹍ � ﹎﹍﹎﹍
Ξ Origin: 獅子吼站 <cbs.ntu.edu.tw> [FROM: 168.95.104.43]
Tue Dec 30 13:14:37 1997
|
|
|
|
|
Re: 檢索測試 |
#4 |
|
Heaven
發信站:
獅子吼站
(Lion , 信區: BudaTech)
|
==> 於 邱大剛 (DavidChiou@Lion) 文中述及:
: ==> 於 光音天 (open98@Lion) 文中述及:
: 如前所述, 有個辦法是再加上中文 filter,
: 先以 byte 為單位找出所有 "可能" 的 candidates,
: 然後再用中文 filter function 將誤判的部分去除
: 即可。
能否介紹一下中文 filter 的原理為何?
很好奇說...
heaven
Tue Dec 30 16:22:05 1997
|
|
|
|
|
Re: 檢索測試 |
#5 |
|
邱大剛
發信站:
獅子吼站
(Lion , 信區: BudaTech)
|
==> 於 Heaven (Heavenchow@Lion) 文中述及:
: ==> 於 邱大剛 (DavidChiou@Lion) 文中述及:
: : ==> 於 光音天 (open98@Lion) 文中述及:
: : 如前所述, 有個辦法是再加上中文 filter,
: : 先以 byte 為單位找出所有 "可能" 的 candidates,
: : 然後再用中文 filter function 將誤判的部分去除
: : 即可。
: 能否介紹一下中文 filter 的原理為何?
: 很好奇說...
可能是我沒講清楚,這其實很簡單:
假設總共有 10000 筆資料。
先用原先的(英文)search方式,找到 50 筆可能符合的。
然後再用一個嚴謹的函式,以 ascii 128 等原理,將這
50 筆中真正完全符合的給挑出來(或許有 48 筆。)
這樣子比起從頭到尾改成中文搜尋來得簡單許多。
我個人的作法是加上個函式,會傳回 0 or 1, 如果是 1 的話
就表示這筆資料的確有符合,如果傳回 0 的話則表代是誤判。
不過當然戲法人人會變巧妙各有不同,僅供參考:)
新年快樂!!
--
﹉﹊﹉﹊ � ﹉﹊﹉﹊﹉﹊﹉﹊﹉﹊﹉﹊﹉﹊﹉﹊﹉﹊﹉﹊﹉﹊﹉﹊﹉﹊﹉﹊﹉﹊﹉﹊
幻 陽焰 夢
影 化城 � 響 水月
浮泡 眼花 旋火輪
﹍﹎﹍﹎﹍﹎﹍﹎﹍﹎﹍﹎﹍﹎﹍﹎﹎﹍﹎﹍﹎﹍﹎﹍﹎﹍﹎﹍﹎﹍﹎﹍ � ﹎﹍﹎﹍
Ξ Origin: 獅子吼站 <cbs.ntu.edu.tw> [FROM: 168.95.103.140]
Tue Dec 30 17:51:40 1997
|
|
|
|
|
Re: 檢索測試 |
#6 |
|
光音天
發信站:
獅子吼站
(Lion , 信區: BudaTech)
|
謝謝大剛的說明,基本上OPEN 98的檢索方式是介於
暴力法(從頭找到尾)與索引法之間,而是考慮
檢索與閱讀同等重要,是針對網路有限的頻寬而設計的,
並有語法檢驗的機制方便做動態文字替換(以應付補字
的不同版本的HTML檔案的需要)
核心檢索還有可以改進的地方,但目前因重心
放在字型資料庫上,所以沒有太多時間改良。
不過我想目前的功能應可符合一般需要
待補字資料庫完成後再添入regular expression
同音查詢等功能。
ABHASVARA, OPEN 98
Tue Dec 30 18:30:11 1997
|
|
|
|
|
Re: 檢索測試 |
#7 |
|
Heaven
發信站:
獅子吼站
(Lion , 信區: BudaTech)
|
==> 於 邱大剛 (DavidChiou@Lion) 文中述及:
: 然後再用一個嚴謹的函式,以 ascii 128 等原理,將這
: 50 筆中真正完全符合的給挑出來(或許有 48 筆。)
: 這樣子比起從頭到尾改成中文搜尋來得簡單許多。
和大剛討論後, 大概了解其所謂中文 filter , 的確是不錯的方法.
因為之前的作法, 必需要從頭判斷是否為中文, 也就是每一個字都要
if asc(xx) > 128 then .....
這種判斷的確花時間.
若是改成先找到可能是我們要的, 再向前反尋找.
若是在奇數個找到 asc(xx) < 128 的字元, 則剛才找到的為中文字無誤.
若是在偶數個找到, 則此為其它中文的後半字元.
我覺得這方法不錯, 讓大家參考. 至於判別中文字, 有比 > 128 更精確
的方法, 不過我都是這樣用而已. :)
heaven
Mon Jan 5 09:21:11 1998
|
|
|
|
|
Re: 檢索測試 |
#8 |
|
發信站:
(cc.nsysu.edu.tw>, 信區: BudaTech)
|
Heaven <Heavenchow.bbs@buddha.cbs.ntu.edu.tw> 次寫入到主題
<0000Ql$Wyx@buddha.cbs.ntu.edu.tw>...
> ==> 於 邱大剛 (DavidChiou@Lion) 文中述及:
> : 然後再用一個嚴謹的函式,以 ascii 128 等原理,將這
> : 50 筆中真正完全符合的給挑出來(或許有 48 筆。)
> : 這樣子比起從頭到尾改成中文搜尋來得簡單許多。
> 和大剛討論後, 大概了解其所謂中文 filter , 的確是不錯的方法.
> 因為之前的作法, 必需要從頭判斷是否為中文, 也就是每一個字都要
> if asc(xx) > 128 then .....
> 這種判斷的確花時間.
差不多只是把兩行程式順序巔倒而已.
if (match) then
if (asc(char) > 128) then
endif
endif
if (asc(char) > 128) then
if (match) then
endif
endif
其實可以不要用 c 內建的 strchr/strstr/index 等,
那些廣用的函式有時也是 delay 的原因, 況且若用
的是 c 的話, 根本就可以用 if (char > 128) ....
犯不著 asc(char) 去多轉一次 ascii 碼.
甚至就直接合為一行了...
你到鹿苑主機中的 bbs 程式中去找一個 match()
的函式, 速度很快的... 我現在是離線寫信, 沒辦法
查. 用 grep match *.c 應該就可以看到了.
應該是在 Feeling-x/MAIL2BBS 目錄下吧? 找一下應該
就可以找到了. good luck.
NEWS/INFO National Sun Yat-San University Fri Jan 16 16:05:31 1998
|
|
|
|
|
Re: 檢索測試 |
#9 |
|
Heaven
發信站:
獅子吼站
(Lion , 信區: BudaTech)
|
==> 於 ("羅雲") 文中述及:
: > 因為之前的作法, 必需要從頭判斷是否為中文, 也就是每一個字都要
: > if asc(xx) > 128 then .....
: > 這種判斷的確花時間.
: 差不多只是把兩行程式順序巔倒而已.
: if (match) then
: if (asc(char) > 128) then
: endif
: endif
羅雲大哥趕場太累了.... :)
若我們要找中文, 則 match 時, 一定是 > 128 :p
而且若不一個一個找, 則在中間找到時, 難以判定是否為中文,
這在相關前後文有討論過了..
: if (asc(char) > 128) then
: if (match) then
: endif
: endif
: 其實可以不要用 c 內建的 strchr/strstr/index 等,
: 那些廣用的函式有時也是 delay 的原因, 況且若用
: 的是 c 的話, 根本就可以用 if (char > 128) ....
: 犯不著 asc(char) 去多轉一次 ascii 碼.
是的, asc(xx) 只是讓別人了解那是 ascii 碼而已. :)
: 應該是在 Feeling-x/MAIL2BBS 目錄下吧? 找一下應該
嗯! 去挖寶看看..
heaven
Fri Jan 16 17:28:15 1998
|
|
|
卍 台大獅子吼佛學專站 http://buddhaspace.org
| |