看板: BudaTech ◎ 佛典电子化讨论    板主: HeavenChow
阅读文章: 第 291/2032 篇 | 上篇 | 下篇 | 回覆 | 转寄 | 转贴 | m H d | 返回
发信人: b83050@ccstudent.ee.ntu.edu.tw (Post Gateway), 信区: BudaTech
标  题: Re: Search 子目录的功能已完成
发信站: 由 狮子吼站 收信 (Mon Nov 25 10:33:24 1996)


以下是单教授的指导:
---------- 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

阅读文章: 第 291/2032 篇 | 上篇 | 下篇 | 回覆 | 转寄 | 转贴 | m H d | 返回

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