您有新信

 
Search 子目录的功能已完成
#1
Post Gateway
发信站: 由 狮子吼站 收信 (ccstudent.ee.ntu.edu.tw , 信区: BudaTech)
【佛教经典系列 WWW】
http://ccbs.ntu.edu.tw/canon/
    昨天完成的版本, 在搜寻子目录时无法完整搜到, 今天
在花了一整天之後, 小弟已将其功能扩充了, 欢迎看一看.

    目前除经文全文检索外, 亦提供经名检索.

    其中目录之问题之所以能解决, 得感谢 kftseng 师兄的帮忙,
特此致谢!

    不过这也显示了一个问题所在: 如果不经编码, 那麽搜寻的速度
在资料量大的时候相形之下会很慢, 也较伤硬碟...  所以这只是愚公的办法,
专业的作法就有待发展罗.


ps. 我在想是否有可能将这些资料摆上 RAMDISK?  那就完全不动到硬碟了.
    不过 UNIX 下面有 RAMDISK 的设法吗?
    不过 ccbs 的记忆体大概总共也没几 MB, 光是 SUTRA 就有近 17 MB了,
    所以除非钱多而且这个搜寻真的有必要用得那麽频繁, 否则可行性不是很大 :Q


Have a nice day!
"'*-._,_.-*'"'*-._,_.-*'"'*-._,_.-*'"'*-._,_.-*'"'*-._,_.-*'"'*-._,_.-*'"

   E-mail: b83050@cctwin.ee.ntu.edu.tw ; david@math.ncu.edu.tw
   邱大刚, Junior of Electrical Engineering Department,NTU.  【台大电机三】
 HomePage: http://www.ee.ntu.edu.tw/~b83050            【刚刚出炉的烘培鸡】
      BBS: telnet://cbs.ntu.edu.tw                         【台大狮子吼站】
Mon Nov 18 19:07:41 1996
回覆 | 转寄 | 返回

Re: Search 子目录的功能已完成
#2
Post Gateway
发信站: 由 狮子吼站 收信 (ccstudent.ee.ntu.edu.tw , 信区: BudaTech)
    不好意思, 由於时值期中考期且要处理的事很多, 所以回信晚了...

On Tue, 19 Nov 1996, Shann Wei-Chang wrote:

> > http://ccbs.ntu.edu.tw/canon/
> 恭喜, 你的效率真高.  我发现, 在做研究的时候也是的, 只有靠高效率的研究生
> 才能有结果.  

    谢谢. 其实只是奋力趁有假日的时候弄出来, 不过功课又落後很多了,
然後连坐几天下来发现连几天签到都是一坐十二小时(还有忙别的),
脊椎有点伤到 :Q

    电脑好口怖.... 我要去念电子学了... :)

> 所以, 看来我又不需要急著改写 cgrep 使其接受多档案的查询了.  我猜你已经用
> shell script 解决这个问题了.  

    嗯! 是靠 csh 的 if ($DIR -d) 这种方式解决的, 由 kftseng 师兄
帮忙的 :)

> 多档案的查询并不会比你现在用的方法更方便.

    OK. 谢谢! (不过 csh 的速度好像稍微慢了些, 比起 sh 来说.. )

> 但一个建议.  例如
> 2DI.TXT       入二谛                [阿底峡著]
> 这一项, HTML anchor 设定在 2DI.TXT 这一项.  但是, 直觉上, 似乎把 anchor
> 设定在中文标题 入二谛 上会比较好.

    嗯, 好主意... 我考完後有空时再改罗 :)
啊.... 现在已都排版完毕了, SUTRA 那页不能再用程式跑了
(要不然就得重编 HTML 的装饰 :P  我再想想办法..... :))

> 此外, 回答你的 RAM disk 的问题.  UNIX 上没有 RAM disk 的做法.  要高速
> 查询, 可以用 RAID 一类的分散式磁碟机柜.  但是, 这要花大把钞票.  但是
> UNIX 的档案 mode 可以用一个 t mode (例如 /usr/ucb/vi 就是), 使用这个 mode
> 的档案, 一旦被读入 RAM 之後就会待在那里久一点 (正常情况下, 一个档案被用完
> 之後就从 RAM 中清除了).  所以使用 t mode 或许会对时常被查询的档案有好处.
> 不过, 你的 RAM 必须够大, 否则 t mode 设了等於没设.

    原来是酱子! 谢谢!!

    请问是不是 chmod a+t 档名
这样子下呢?

> 下一步怎麽走.  如果你能设计一些旁助程式, 为这个资料库的使用方式留下
> 一些记录, 那就更好了.

    嗯... 使用时东拼西凑很迂回的凑出此功能, 现在只接受 NDX.REF
的格式, 只要有 NDX.REF 就搞定了, 没有的话就没辄了 :P

    在移植来说很容易, 只要可以 compile cgrep 的机器都可以很方便
的转换, 不过由於我是将 cgrep 直接改 source code, 所以大大限制了
其各式功用, 只是用来作这类 Web 的搜寻的 :P

ps. 关於您的宣告可在每次查询时的最後面看到, 不知道您有没有什麽
    意见呢? 谢谢!

"'*-._,_.-*'"'*-._,_.-*'"'*-._,_.-*'"'*-._,_.-*'"'*-._,_.-*'"'*-._,_.-*'"

   E-mail: b83050@cctwin.ee.ntu.edu.tw ; david@math.ncu.edu.tw
   邱大刚, Junior of Electrical Engineering Department,NTU.  【台大电机三】
 HomePage: http://www.ee.ntu.edu.tw/~b83050            【刚刚出炉的烘培鸡】
      BBS: telnet://cbs.ntu.edu.tw                         【台大狮子吼站】
Fri Nov 22 12:11:38 1996
回覆 | 转寄 | 返回

Re: Search 子目录的功能已完成
#3
Post Gateway
发信站: 由 狮子吼站 收信 (ccstudent.ee.ntu.edu.tw , 信区: BudaTech)
以下是单教授的指导:
---------- Forwarded message ----------
Date: Sun, 24 Nov 1996 15:35:31 +0800
From: Shann Wei-Chang <shann@math.ncu.edu.tw>

> 能相当不简单,我试了一下,有底下两个问题:
> 1.搜寻经名「般若」,会连译者中有「般若」者也报告出来,如下:
> 经号 册 页码  经名(卷数)【朝代 译者或作者】(●:表示电脑缺字)
> ==== == ===== ========== =================
> 0159 03 P0291 大乘本生心地观经(8卷)【唐 般若译】
> 0162 03 P0388 金色王经(1卷)【东魏 瞿昙般若流支译】
> 0220 05 P0001 大般若波罗蜜多经(600卷)(第1-200卷)【唐 玄奘译】

您所建议的, 只搜寻某些项目的资料, 而不搜寻其他项目的资料, 已经
超出了一般全文检索的设计□围.  这已经是资料库的搜寻了.  以目前来看,
要设计资料库似乎是太大的动作.  简单一点的设计, 或许如下:

大刚, 你现在是由一个 index 档来搜寻经名, 是吧?  若要将译者名字
剔除在搜寻□围之外, 就需要两个 index files.  你可以用 UNIX 内建的
relational database 功能.  比方说, 档案 index.a 如下

0159 03 P0291 大乘本生心地观经(8卷)
0162 03 P0388 金色王经(1卷)
0220 05 P0001 大般若波罗蜜多经(600卷)(第1-200卷)

档案 index.b 如下

0159 【唐 般若译】
0162 【东魏 瞿昙般若流支译】
0220 【唐 玄奘译】

注意 index.a 和 index.b 的第一个 column 的资料必须相符, 而且经过 sort.
那麽, 你说

cgrep 般若 index.a | join - index.b

就只会出现一行

0220 05 P0001 大般若波罗蜜多经(600卷)(第1-200卷) 【唐 玄奘译】

在我举的例子里面, index.a 和 index.b 就是一个 relational database 里面
的两个 relation tables.  而 join 指令就是把两个 tables 中有相同项目
的资料 (也就是, 有关联的资料) 结合在一起.

至於要如何把一个 index 档拆成两个 index.a 和 index.b 档, 就不太容易
自动化.  除非你原来的 index 档就已经考虑了资料项目的分隔方式.  比如说,
如果你的 index 中一行代表一栏资料, 而一栏中又分成 (1) 经号 (2) 册 (3) 页码
(4) 经名(卷数) (5) 【朝代 译者或作者】 等五个项目的话, 最好是用一个 tab,
而非若干个空格 (space) 来做资料项目的分隔.  很多 PC 的 editors 自做主张
把 tab 换成若干个 spaces, 请不要用那种 editors.

如果你用了上述的方法来做资料项目的分隔, 那就简单了.
你可以用 awk 将 index 档案的前四项资料读出来, 指令是

awk 'BEGIN{FS = "\t"} {printf("%s\t%s\t%s\t%s\n", $1, $2, $3, $4);}' index > index.a

也可以用 awk 将 index 档案的第一和第五项资料读出来, 指令是

awk 'BEGIN{FS = "\t"} {printf("%s\t%s\n", $1, $5);}' index > index.b

我想, 你懂了吧.

> 2.全文搜寻「阿耨多罗三藐三菩提」,报告结果中会出现乱码,如下:
> 银色女经 
> 27:作。』彼复问言:『何以故尔?』银色答言:『我已起心,不舍大悲,为求成就阿耨多罗三藐三菩
> ㄛG

这是不应该发生的状况.  但是我不知道哪些是搜寻後传输造成的错误, 哪些是
搜寻程式 (cgrep) 本身的错误.  大刚, 能否请你针对这个例子做一个 off-line
的实验.  让我们先确定是 cgrep 的问题, 还是 csh script 的问题, 还是 CGI 的问题,
还是 HTTP 的问题.  (我从李白用 lynx 去实验, 发现一样的结果. 哗, 竟然一共找到
六千多行的 output, 太惊人了.  我希望这些 output 都是正确的, 烦劳知道内容的
人去检查了.)

谢谢你的工作.

-Shann
Mon Nov 25 10:33:24 1996
回覆 | 转寄 | 返回

□ 台大狮子吼佛学专站  http://buddhaspace.org