您有新信

 
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