您有新信

 
检索测试
#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