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