您有新信

 
檢索測試
#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