看板: 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