%%Title: 辞書をPCに突っ込む [NDTP を使ってみる]
%%Created: Fri Nov 19 12:00:00 JST 1999
%%Updated: Tue Jan 16 17:39:47 JST 2007
o 目次
o NDTP とは?
Network Disctionary Transfer Protocol.
CD-ROM 書籍へアクセスするためのプロトコル
dserver で定義されている?
o NDTPD のインストール
dserver を置き換える NDTP daemon.
詳しくはNDTPD公式ホームページに、すごーく丁寧に解説してある。
最新版はftp://ftp.sra.co.jp/pub/net/ndtp/ndtpd/
展開して configure; make ; make install
抜く時は make uninstall
/etc/services に
ndtp 2010/tcp
を追加しとく。
または alias しとく。
search 2010/tcp ndtp
syslog に関して
syslog.conf:
local0.info /var/log/ndtpd.log
とか
!ndtpd
*.* /var/log/ndtpd.log
しとく
o NetBSDでの起動 (2007/01/16)
ndtpdを root以外で動作させるには、/usr/pkg/etc/rc.d/ndtpd に細工が必要。
*** ndtpd.orig Tue Jan 16 17:53:03 2007
--- ndtpd Tue Jan 16 17:53:07 2007
***************
*** 18,20 ****
prog=/usr/pkg/sbin/ndtpd
! pidfile=/var/run/ndtpd/ndtpd.pid
--- 18,25 ----
prog=/usr/pkg/sbin/ndtpd
! #
! # make it sure if $workdir is identical to the path defined
! # in the configuration.
! #
! workdir=/var/run/ndtpd
! pidfile=$workdir/ndtpd.pid
***************
*** 23,25 ****
echo "Starting ${name}."
! /bin/mkdir -p /var/run/ndtpd
${prog} >/dev/null 2>&1 || {
--- 28,31 ----
echo "Starting ${name}."
! /bin/mkdir -p $workdir
! chown ndtpuser:ndtpgrp $workdir
${prog} >/dev/null 2>&1 || {
***************
*** 35,37 ****
kill -s TERM ${pid}
! /bin/rm -fr /var/run/ndtpd
else
--- 41,43 ----
kill -s TERM ${pid}
! /bin/rm -fr $workdir
else
o NDTPD の設定
ディレクテブの説明は
http://www.sra.co.jp/people/m-kasahr/ndtpd/doc-ja/ndtpd-ja_3.html#SEC12
/usr/local/etc/ndtpd.conf.sample をコピって適時修正。
設定ファイルをチェックするためには、
% ndtpcheck
max-clients 0
個人で使うんだから無制限
hosts 127.0.0.1
local で使うから。
hosts のデフォルト動作は拒否なので、マッチしないと接続出来ない。
hosts 203.178.141.192/255.255.255.248
とかっても出来る。できない…
※ ndtpd-3.0beta0以降では
hosts 203.178.141.192/29
と設定するらしい。
reported by , thanx.
hosts *.kame.net
は出来る。
hosts !foo.bar.com
foo.bar.com からの接続を拒否する。
timeout 30
local で使うから、こんなもんでしょ?
user と group は適時修正。
e.g.
user ndtpd
group ndtpd
これに併せて作業用ディレクトリの owner を変更
# mkdir /var/run/ndtpd
# chown ndtpd:ndtpd /var/run/ndtpd
name
小文字じゃないとエラーになるんだけど。。。
appendix-path
書籍の付録(appendix)データへのパス。
参照: appendix データって?
http://www.sra.co.jp/people/m-kasahr/ndtpd/doc-ja/ndtpd-ja_5.html#SEC26
o NDTPD の起動と終了
起動
# /usr/local/sbin/ndtpd
終了
# ndtpcontrol terminate
再起動
# ndtpcontrol restart
o NDTP のクライアント
関連するソフトウエア情報
http://www.sra.co.jp/people/m-kasahr/ndtpd/related-ja.html
emacs は使えないので、キャラクタベースの kenjiro を使う事にする。
kenjiro
インタラクティブなキャラクタベースの client
dserver の ports 持って来て make
http://www.sra.co.jp/people/m-kasahr/ndtpd/related-ja.htmlで言われている
以下のパッチは、FreeBSD ports では既にあたってる。
ftp://ftp.sra.co.jp/pub/net/ndtp/misc/kenjiro-ndtpd.diff
ftp://ftp.sra.co.jp/pub/net/ndtp/misc/kenjiro-dictlist.diff
online manual は
# gzip -c < kenjiro.eng > /usr/local/man/manl/kenjiro.l.gz
または
# groff -man -Tnippon kenjiro.j | gzip -c > /usr/local/man/catl/kenjiro.l.gz
# rm /usr/local/man/manl/kenjiro.l.gz
しとく。
o ndtpc/ndtpcs
やっぱコマンドラインから辞書検索したいので作る。
[tarball:http://www.tanu.org/~sakane/download/]
特徴
- 全部 perl
- ndtpc でコマンドラインから辞書検索できる。
- ndtpcs を使えば lynxや netscapeからも使える。サーバは自前なのでHTTPサーバ必要無し!
謝辞: fish-n-fins@geocities.co.jp さんから多くのコメントを頂きました。
ndtpc
コマンドライン用インターフェイス
ndtpc [-s server] [-p port] [-b book] [-t type] [-l] [-r level] word
ndtpc [-s server] [-p port] [-b book] [-r level] -i header
ndtpc [-s server] [-p port] -B
-s: specify NDTPD server. (default: 127.0.0.1)
-p: specify NDTP port. (default: 2010)
-b: specify a book number. (default: all)
like "-b 1,3" in case of specifying multiple books
-t: specify a direction of search. (default: a)
either a(forward)or A(backward) as argument.
-i: specify search index(header). (default: none)
header is such like 54a2:758.
-S: search synonym too. (default: no)
-r: define recursive level. (default: 1)
-l: add a newline to be legible. (default: no)
-B: print book list. (default: no)
-q: quiet mode. (default: no)
-v: verbose mode. (default: no)
-d: debug mode.
-h: show this message.
例えば、こんな感じ
% ndtpc interface
DICT: xxxx
<12c1:756>interface
'inter・f`ace
−[名][C]
1a (二者間の)境界面,接点 〔between〕.
b 共通の問題.
2 【電算】 インターフェイス 《電算システムにおけるハードウェア同士の接点または接点となるプログラム; 人間と電算システムとの接点,また接点となるプログラムや機器》.
−[動](他) 〈…を〉〔…と〕インターフェイスで接続する 〔with〕.
−(自) 〔…と〕インターフェイスで連結する 〔with〕.
ndtpcs
HTTPインターフェイス
起動するとhttpサーバを自分で fork()する。
クライアントとして lynx か netscape, w3m が必要。
ブラウザ側でプロキシ設定してるとうまく動かないので注意。
けど w3m はなぜか動かない。なんで?
Usage: /usr/local/bin/ndtpcs [-d] [-w workdir] -s
/usr/local/bin/ndtpcs [-F] [-L|-N|-R|-M] [-w workdir]
-F: delete the lock file before start.
-L: force to use lynx
-N: force to use Netscape
-R: force to use remote Netscape when you have launched it.
-M: force to use w3m
-w: specify the work directory.
-s: server mode.
-c: client mode. (for debugging)
-d: debug mode.
使用例1: Netscapeを動かして ndtpcs -R & とかしとくと便利。
使用例2: Windowマネージャーのファンクションキーに ndtpcs -FL とかと割り当てておくと便利。
使用例3: ndtpcs -F -s & しておいて file:/usr/home/hoge/ndtpc_start.html にリンクを張っておくと便利。 <== これが一番お勧め。
TODO:
外字とか音とか(まじ?)
o 辞書を圧縮する
手順1. EPWUTILってツールで軽量化する。
物はここから。
手順2. ebzip で圧縮する。
さて、EPWUTILを拾ってきて epwutil.doc をよーく読む。
以下、辞書を置くディレクトリを $DICT とする。
0. もともとあったカタログにマージするには
% catdump -d catalogs > /var/tmp/catalogs.txt
しとく
1. カタログから本体以外の書籍を削除する。
% catdump /cdrom/catalogs >> /var/tmp/catalogs.txt
% vi /var/tmp/catalogs.txt
- 要らない[Book]を削除。e.g. GUIDE, SCREEN を削除
- [Catalog]
+ Books を [Book] の数にあわせる。普通は 1
+ BookSelect を削除。
- [Book]
+ BookType は 辞書タイプ | EPWINGのバージョン
00 国語辞典
10 漢和辞典
20 英和辞典
30 和英辞典
40 現代用語辞典
50 百科事典
60 一般書物
70 類語辞典
例えば、研究社英和中辞典なら 2002 とか
+ Title には半角は使えないらしい。ぬぬぬ。
+ Directory を $DICT の下に作るディレクトリと合わせる。
+ ZenGaiji と HanGaiji を修正。
e.g.
旧: ZenGaiji = "GAI16F00GAI24F00GAI30F00GAI48F00"
新: ZenGaiji = "GAI16F00GAI24F00"
2. 新しいカタログを作る
% catdump -u /var/tmp/catalogs.txt $DICT/catalogs
3. Directory に指定したディレクトリを作る。
% mkdir -p $DICT/chujiten/data
% mkdir -p $DICT/chujiten/gaiji
4. 辞書を軽量化しつつコピーする。
% squeeze /cdrom/chujiten/data/honmon $DICT/chujiten/data/honmon
(2007/01/16)
広辞苑第5版だとうまく動かない。EPWINGのバージョンのせいか?
今時削る必要も感じないので深く追求せず。
Honmon2をまるコピーする。149158408バイト。
5. 外字をコピーする。
% cp /cdrom/chujiten/gaiji/* $DICT/chujiten/gaiji/
1.で削除した外字はコピーする必要ない。
5. 圧縮する。
% cd $DICT
% ebzip $DICT
ディレクトリ注意。-o で指定しないと出力ディレクトリはカレントになる。
※ dserver に付いてくる makedic は形式が違うので NG っぽい。
(2007/01/16)
広辞苑第5版 149158408 -> 83071515 (55.6%)
大英和辞典 -> 136540630
リーダーズ 539869184 -> 196956392 (36.4%)
o 2つ以上の辞書を使う
正解は、辞書別にディレクトリ掘って catalogs と辞書を別々に置く。
ndtpd.conf の book directive も辞書の数だけ書く。
epwutil.doc を参考にして catalogs を 1つにしてしまうと、はまる。
1. 2つのカタログを合成して不要な書籍を削除する。
% catdump /cdrom/catalogs > $DICT/catalogs.txt
% catdump /cdrom1/catalogs >> $DICT/catalogs.txt
% vi $DICT/catalogs.txt
- 要らない[Book]を削除。e.g. GUIDE, SCREEN を削除
- [Catalog] は1つを残して削除。
- [Catalog] の Books を [Book] の数にあわせる。
- [Catalog] の BookSelect を削除。
- 各[Book] の ZenGaiji と HanGaiji を修正。
2. 新しいカタログを作る
3. 各ディレクトリを掘る。
3. 各辞書を軽量化しつつコピーする。
4. ebzip $DICT
- 辞書は切替えたいので、1つのcatalogsに book directive を複数書く。
- ndtpd で認識する辞書数が (ndtpd.conf の book directive 数) x (catalogs の [Book] 数)となってしまう。
-> 辞書をセットする時にエラーになる番号がでてくる。
- 辞書切替えを諦めて book directive を 1つにする。
- book directive の数と、catalogs の [Book] 数が矛盾する。
-> 辞書をセットする時にエラーになる番号がでてくる。
o Appendixデータを作る
外字データを*何とかして*表示可能にする変換テーブル
FreeBSD3 の port (ja-eb-2.3.2)には手元の辞書用の appendix があった。
よって
appendix-path /usr/local/share/eb/appendix/daijirin-2.0
とかしてもよい
以下参考
http://www.sra.co.jp/people/m-kasahr/eb/appendix-ja.htmlから拾ってくれば良いんだけど、
手もとにある版の方が新しいみたい。ばけばけなので作る。
http://www.sra.co.jp/people/m-kasahr/eb/doc-ja/ebfont-ja_3.html#SEC3
% ebinfo /cdrom
:
subbook 1:
title:
directory: CHUJITEN
:
% ebfont -S chujiten -f 24 -i gif /cdrom
あぁ面倒…適時つくろう…
o NDTP プロトコル
主にdserverについてくるProtocol Specificationより。
ndtpd が返すエラーコードが若干違う。
T\n
辞書一覧。
L(name)\n
辞書を変える。
name は辞書名(kojien, eiwa, waei)、または 'T' で得られる番号
P(type)(word)\n
辞書検索。検索結果は frame:offset で表される。
type
a アルファベット前方
A アルファベット後方
k かな前方
K かな後方
e.g.
Paracoon
Pk狸
S(frame):(offset)\n
frame:offset で示されるデータを転送する。
frame, offset は16進
Q\n
quit
A(name)\n
使用許可を得る。
ndtpd はサポートしてない。単にログに名前(name)を残すだけ。
u\n
使用中のユーザ名を表示する。
ndtpd はサポートしてない。
F(frame)\n
Send a page.
The page number must be a hexadecimal integer.
I\n
目次を転送する。
The page numbers in the table are dummy except for menu search.
t\n
辞書のリストと各辞書の利用状況を表示する
ndtpd はサポートしてないと言ってるが、なんかやろうとしてる?
X(command)\n
ndtpd 拡張コマンド
http://www.sra.co.jp/people/m-kasahr/ndtpd/PROTOCOL-ja.txt
command
I 書籍が持っている外字のビットマップのサイズの一覧を得る。
L 書籍が持っている外字のビットマップのサイズの中から、
一つを選択する。
B 書籍が定義している外字の中から指定した一字について、
選択したサイズのビットマップデータを得る。
b 書籍が定義しているすべて外字について、
選択したサイズのビットマップデータを得る。
v\n
version とホスト名を表示
o CD-ROM版辞書を使うにあたっての注意
dserver/server2.2-pl2/README より抜粋
ライセンスについて 三田吉郎
dserverは、7cmCDROM版研究社新英和・和英中辞典、岩波書店広辞苑を
始めとする、電子ブックを読むことが出来ます。使用のたびにCDROMを
マウントすればよいのですが、例えばCDROM分離型のノートパソコンで
辞書を使いたいなど、ハードディスクにデータをコピーして使いたいと
思うかも知れません。市販の
辞書をハードディスクにコピーすること、または圧縮された辞書としての使用
に関して問題があるかどうか、研究社と岩波書店とにお伺いしてみました(平
成8年6月20日)。
研究社の回答(電話03-3288-7777)
個人として使用するかぎりにおいては、ハードディスクへのコピー、また
そのデータが圧縮されてたとしても使用して良い。ただし、LAN上で
複数の端末で使用する場合は、別途端末の台数を申告していただき、
端末台数×(CDROM一枚の価格−α)の値段を払う契約をしていただく。
岩波書店辞典部の回答 (電話03-5210-4171)
CD-ROMドライブから読み出して使用することを前提としている。
ハードディスクへのコピーは避けていただきたい。
LAN上での使用の場合は、別途契約をしていただき、
ハードディスクへのコピーを許可している。ただしUNIX上の
サーバソフトに関しては把握していない。
dserverは、この他にもOEDや、科学技術用語辞典など、外字テーブルさえ
用意すればほとんどのCDROMを読むことが出来ます。そのとき自分のローカル
ディスクにデータをコピーして使用して良いかは、各社対応が異なります。
新しい辞書を使用する場合はまずライセンスを確認した後に使用することを
お勧めします。
ということですので、例えば新英和・和英中辞典に関しては個人のマシンの
ハードディスクにコピーすることは可能ですが、広辞苑に関してはLAN契約を
結ばない限りハードディスクへのコピーをさけるのが良いようです。
o リンク
EPWING って?
http://www.ascii.co.jp/ghelp/9/951.html
EPWINGコンソーシアム
http://www.epwing.or.jp/
EB って?
http://www.ascii.co.jp/ghelp/11/1141.html
portsを利用したdserverのコンパイル
http://www.ee.t.u-tokyo.ac.jp/~mita/FreeBSD/ports-dserver.html
英和/和英オンライン辞書
http://www1.phys.tosho-u.ac.jp/ida/Document/Comp/UNIX/online_dictionary
電子ブック辞書を使いこなす
http://www.gihyo.co.jp/~tokinori/9812/index.html
フリー辞書コレクション
http://openlab.ring.gr.jp/lookup/dicts/free.html