0
|
1
|
|
2 Wnn V4 について
|
|
3
|
|
4 0,序
|
|
5
|
|
6 Wnnのバージョン4について、バージョン3からの変更点を中心にまとめて
|
|
7 おきます。一応、バージョン4.0について述べますが、これからのバージョ
|
|
8 ンアップでどのようなことが計画されているかといったことも述べます。
|
|
9
|
|
10 変更点は、主に、次の4つの領域に分けられます。
|
|
11
|
|
12 (1) 変換
|
|
13 (2) 辞書
|
|
14 (3) ライブラリ
|
|
15 (4) アプリケーション
|
|
16
|
|
17 (1) 変換アルゴリズムの改良は、今回のバージョン・アップの中心課題でした。
|
|
18 これまで、Wnnでは、接頭語、接尾語、助数詞などに対する処理があまいこ
|
|
19 とが指摘されてきました。これを解決するために、今回のバージョンでは、大
|
|
20 文節という概念を導入し、接頭語、接尾語、助数詞などを、本体となる文節と
|
|
21 合わせて一つの大文節とみなして変換を行ないます。これについては、後で詳
|
|
22 しく述べます。
|
|
23
|
|
24 (2) 辞書に関しては、以下の点について変更されました。
|
|
25 ●辞書の読みに、2 バイトコードを許す。
|
|
26 ●自立語の品詞の種類を増やす。
|
|
27 ●ユーザ・形式、システム・形式の間の差違を、単語登録可能かどうか
|
|
28 の点だけに留める。(それに伴い、名前も、登録可能形式、固定形式とする。)
|
|
29 ●辞書ファイル、頻度ファイルにパスワードを設ける事により、辞書、頻
|
|
30 度の更新が可能な人を制限する。それにより、辞書の大きさを問題にしなけれ
|
|
31 ば、登録可能形式のみを用いて辞書の管理を行なえるようにする。
|
|
32 ●atou, atos, utoa, stoa というコマンドを、atod (テキスト to 辞書)、
|
|
33 dtoa (辞書 to テキスト) にまとめ、登録可能形式、固定形式の選択を、オプシ
|
|
34 ョンで行なう。
|
|
35 ●変換方式の変更に伴う変更を、付属語ファイルにくわえる。
|
|
36 ●付属語ファイルをクライアント毎に指定することを可能にする。
|
|
37 ●辞書の upload, download の機能を加える。
|
|
38
|
|
39 (3) 今までのライブラリは、サーバ内でクライアントの変換の状態を記憶し
|
|
40 ていたので、「連文節変換をする」、「ある文節の次候補を取る」、「文節の
|
|
41 区切りを切り直して変換を行なう」、「頻度の更新を行なう」といったプリミ
|
|
42 ティブで編集を行なってきました。しかし、これは、変換の流れを一つ固定し
|
|
43 ているため拡張性に乏しいと思われます。実際に、幾つかのアプリケーション
|
|
44 では、ここで提供している以外の操作を行なうために、このプリミティブの上
|
|
45 に新しいライブラリを独自に作って、それを用いています。しかし、ここで提
|
|
46 供しているプリミティブが一つの変換の流れを仮定した比較的高機能なもので
|
|
47 ある以上、どうしても無理が生じてきます。実際、頻度の更新が正確に行なわ
|
|
48 れないなどの障害が出てきています。
|
|
49
|
|
50 そこで、
|
|
51 ●これらの操作を、よりプリミティブな操作である、「読みとなる文字列に
|
|
52 対して連文節変換を行ない第一候補を返す」、「読みとなる文字列に対して単
|
|
53 文節変換を行ない第一候補を返す」、「読みとなる文字列に対して単文節変換
|
|
54 を行ない全ての候補を返す」、「ある辞書エントリの頻度値をある値にセット
|
|
55 する」といった操作に分け、低レベル・ライブラリとして提供する。
|
|
56 ●より高機能な操作は、高レベル・ライブラリとして、低レベル・ライブラ
|
|
57 リを用いて構成し、Cライブラリの形で提供する。そのライブラリと異なる操
|
|
58 作を行ないたい場合は、低レベル・ライブラリを用いて自分でライブラリを作
|
|
59 ることを可能にする。
|
|
60 という方針で、ライブラリを設計することにしました。
|
|
61
|
|
62 また、変換に用いる辞書セット、付属語辞書、パラメーターなどの設定は、
|
|
63 クライアントごとに持つのではなく、サーバ内に「環境」というものを設け、
|
|
64 それに対して設定を行なうことにより、一つのクライアントが複数の環境を用
|
|
65 いたり、一つの環境を複数のクライアントが用いたりすることを可能にしまし
|
|
66 た。
|
|
67
|
|
68 これらの変更により、サーバ内に、クライアントの変換の状態、辞書の状
|
|
69 態などを持つ必要がなくなり、サーバがステートレスになりました。
|
|
70
|
|
71 変換アルゴリズムの変更にともない、ライブラリの返す情報の構造は、V3 と
|
|
72 かなり異なっています。その点を含めて、低レベル、高レベル・ライブラリを
|
|
73 用いる時の注意点について、後にふれます。
|
|
74
|
|
75 (4) アプリケーション
|
|
76 現在までは、開発者側で用意するアプリケーションは、フロントエンド・プ
|
|
77 ロセッサwnn のみでしたが、今回は、wnn をバージョン4用に書き換えた uum
|
|
78 に加えて、gmw ウィンドウ・システムの中から、直接Wnnの機能を用いるた
|
|
79 めのg言語 Wnn インターフェース、および、それを用いた仮名漢字変換機能
|
|
80 付のストリング・フォルダなど(このシステムは、総称して WoG と呼ばれ
|
|
81 ている)を提供します。uum は、このバージョンで一応のものを提供しますが、
|
|
82 WoG は、もう少しかかりそうです(一応動くものは出来ている。)。
|
|
83
|
|
84
|
|
85
|
|
86 1.変換アルゴリズム
|
|
87
|
|
88 V4 の変換アルゴリズムは、V3 の場合と同じく、文字列の最後から前に向かっ
|
|
89 て文節を切り出す作業が基本となります。その際、V3 では、文節の定義とし
|
|
90 て
|
|
91
|
|
92 文節 := 自立語一つ + 付属語連鎖
|
|
93 付属語連鎖 := 付属語*
|
|
94 (ただし、自立語と付属語、付属語と付属語は接続条件を満たし、
|
|
95 文節内で最後の語は、ある特定の品詞の集合(文節の最後に
|
|
96 来ることのできる品詞の集合)に属している。)
|
|
97
|
|
98
|
|
99 という定義をもちいていました。ここで、自立語は、辞書ファイルのエントリで
|
|
100 あり、それぞれの自立語は、読み、自分の品詞、変換後文字列、それに頻度を
|
|
101 持っています。また、付属語は、付属語ファイルのエントリであり、読み、自
|
|
102 分の品詞、それに前にこれる品詞の集合(接続ベクトルと呼ばれる)を持ってい
|
|
103 ます。付属語どうしの接続関係、および、付属語と自立語の接続関係は、この
|
|
104 接続ベクトルによってチェックされます。付属語が漢字を持っていないことに
|
|
105 注意して下さい。付属語が漢字を持っていないことにより、付属語連鎖がどの
|
|
106 ような品詞の付属語から構成されているかという情報を持たなくていいので、
|
|
107 簡易で、高速な変換アルゴリズムを実現することができるのです。
|
|
108
|
|
109 V3 の解析では、接頭接尾語の処理、助数詞の処理は行なっていませんでし
|
|
110 た。これらの語は、自立語として一文節を構成することにより処理されていま
|
|
111 す。しかし、接頭接尾語をこのように一文節として取り扱っていたのでは、誤
|
|
112 変換が多くなることは避けられません。例えば、人名につく接尾語「さん」よ
|
|
113 り「三」の方が評価値が高い時に、「こばやしさん」を変換すると「小林三」
|
|
114 となるといった誤変換が現れます。もし、「小林」が人名で、人名には「三」
|
|
115 より「さん」が優先的に付くという情報があれば、この種の誤変換は少なくす
|
|
116 ることが可能だと考えられます。このような誤変換を少なくするには、文節の
|
|
117 定義を拡張するか、あるいは現在の方法を少し拡張し、文節間のつながり具合
|
|
118 を見る方法をとることが考えらます。Wnn Ver.4で採用した方法は、両者の折
|
|
119 中案と言えるものです。
|
|
120
|
|
121 Wnn Ver.4では、「大文節」と「小文節」と呼ばれる、二つのレベルの文節
|
|
122 を考えます。「小文節」の定義は、Ver.3における「文節」の定義と同等であ
|
|
123 り、「大文節」は、小文節の列で、接続条件を満たすものと定義されます。
|
|
124
|
|
125 ここで、自立語、付属語と呼ばれているものは、我々が直感的に自立語、付属語
|
|
126 として理解して来たものと異なります。しかし、ここではこれらの名前を
|
|
127 流用する事にします。
|
|
128
|
|
129 語 := 自立語 | 付属語
|
|
130 小文節 := 自立語 + 付属語連鎖
|
|
131 大文節 := 小文節+
|
|
132 付属語連鎖 := 付属語*
|
|
133
|
|
134 (ただし、小文節内で、自立語と付属語、付属語と付属語は接続条件を満たし、
|
|
135 小文節内で最後の語は、後ろの小文節の自立語と接続条件を満たす。最後の小文
|
|
136 節の最後の語は、ある特定の品詞の集合(大文節の最後に来ることのできる品
|
|
137 詞の集合)に属している。最初の小文節の自立語は、ある特定の品詞の集合
|
|
138 (大文節の先頭になれる品詞の集合)に属している。)
|
|
139
|
|
140
|
|
141 (例) 小文節、大文節の例
|
|
142
|
|
143 第 2 回の 小 文節は
|
|
144 -- -- ---- -- ------
|
|
145 小 小 小 小 小
|
|
146 ------------ ---------
|
|
147 大 大
|
|
148
|
|
149
|
|
150 約 123 グラムぐらいの
|
|
151 -- ------ --------------
|
|
152 | | |
|
|
153 | | 小(助数詞+付属語)
|
|
154 小 |
|
|
155 (接頭数詞) 小(数詞列)
|
|
156
|
|
157
|
|
158 お 食べ 下さい
|
|
159 -- ---- ------
|
|
160 小 小 小
|
|
161 ------ ------
|
|
162 大 大
|
|
163
|
|
164
|
|
165 小文節同士の接続条件は、上で述べたように、後の小文節の自立語と前の小文節
|
|
166 の最後の語の間の接続条件として与えます。この情報は、それぞれの自立語毎に
|
|
167 持っていては情報量が大き過ぎるので、自立語品詞ごとに品詞の前端ベクトル
|
|
168 として持つものとします。自立語品詞の前端ベクトルは、辞書ではなく、付属語
|
|
169 ファイルに与えます。これらは、それぞれの辞書に固有なものではなく、付属
|
|
170 語間の接続情報と共に指定されるべきものだからです。この意味で、付属語ファ
|
|
171 イルという名前は不適切で、接続情報ファイルとでも名前を変えるべきかもし
|
|
172 れませんが、「付属語ファイル」のほうが馴染みがあって、付属語ファイルを
|
|
173 指定するライブラリ関数名でも、set_fuzoku という名前がわかりやすいので、
|
|
174 この名前を引続き使うものとします。辞書の持つ情報については、基本的に
|
|
175 Ver 3 と変わっていません。
|
|
176
|
|
177 どれが小文節になるかは、付属語ファイルによります。上に挙げた例は、現在
|
|
178 使っている付属語ファイルによるものです。最後の例に対して、一つの大文節
|
|
179 になって欲しいと要望する人もいるでしょう。これからも、自然で正確な変換
|
|
180 を目指して、付属語ファイルの内容は書き換えられていくでしょう。
|
|
181
|
|
182 #自立語の品詞については、後ろに続く付属語を規定するという役割と、前に続
|
|
183 #く小文節を規定するという役割を兼ねています。これでいいかということにつ
|
|
184 #いて議論がありましたが、今更変えることはないでしょう...
|
|
185
|
|
186 今までの「文節」に当たるものは、この「大文節」です。この定義に従って
|
|
187 大文節を切り出した後は、基本的には、Ver.3 と同様な操作を行ないます。す
|
|
188 なわち、大文節を n 個切り出してきて、それらの評価値の和が最大なものの
|
|
189 最後の大文節を確定するという動作を、文字列の前端に来るまで繰り返すので
|
|
190 す。今まで文節の評価値を計算していたところが、「大文節」の評価値を計算
|
|
191 することになるのですが、パラメータの数は、Ver.3 よりずっと多くなり、
|
|
192 パラメータの定め方が結構大変で、四苦八苦しています。しかし、パラメータ
|
|
193 の定め方いかんで、かなり良い変換が得られそうです。
|
|
194 (興味のある方は、パラメータをいじって遊んで下さい。)
|
|
195
|
|
196 あと、変換に関して、細かい点が色々変わっていますが、そのなかでも
|
|
197 数字に対する変換が、面白いです。
|
|
198
|
|
199 たとえば、「2456」を変換すると、2456 が返ってきて、次候補として、
|
|
200
|
|
201 2456 2456 二四五六 二千四百五十六 2,456
|
|
202 2,456 弐阡四陌伍拾六
|
|
203
|
|
204 が返ってきます。ここで、二千四百五十六 を選択すると、次に 123 などの数
|
|
205 字を変換した時に、百二十三 が返ってくるという具合に、どの形式で以前選
|
|
206 択されたかを内部的に記憶しています。また、アスキ文字も、a を変換したら
|
|
207 a も返ってくるという具合に、半角、全角間の変換をサポートしています。
|
|
208
|
|
209 (以前選択された値のセットは、頻度値の設定のライブラリで行ないます。)
|
|
210
|
|
211 また、pubdic の付属語ファイルでは、(現在のところ、)数詞同士がつながっ
|
|
212 て大文節を作るようになっています。ですから、「ごじゅうに」を変換すると、
|
|
213 「五十二」という大文節になります。
|
|
214
|
|
215
|
|
216 2.辞書
|
|
217
|
|
218 今までは、辞書に、読みとして許される文字の字種がかなり制限されていま
|
|
219 した。一方で、読みに任意の2バイトコードを許すようにすれば、漢字仮名変
|
|
220 換の可能性が出てきます。漢字仮名変換は、音声合成と組み合わせれば、文章
|
|
221 の「自動読みあげ」に応用できます。また、フリガナをつけたり、索引などを
|
|
222 読みの順にソートしたり、一度変換したものを再変換したり、あるいは、実際
|
|
223 に存在する文章からバッチ式に頻度を集めたり、応用範囲の広い技術です。
|
|
224 Ver.4 では、読みを 2 バイトで扱っています。よって、読みの部分と漢字
|
|
225 の部分をひっくり返した辞書を作ることによって、漢字仮名変換を行なうこと
|
|
226 ができます。実際に漢字仮名変換に使ってみた結果では、かなりの正確さでで
|
|
227 変換されました。
|
|
228
|
|
229 #辞書に関しては、現在、uum, WoG などは、かな漢字変換用の環境と、漢字
|
|
230 #かな変換用の環境をつくって、それぞれにかな漢字変換、漢字かな変換の辞書
|
|
231 #を設定して、環境を切り変えていますが、この場合、かな漢字変換の辞書を追
|
|
232 #加した時に、漢字かな変換の辞書も追加する必要があります。また、単語登録
|
|
233 #した場合にも、逆変換用の辞書にも単語登録する必要が出てきます。これらの
|
|
234 #ことは、WoG では、自動的に行なうように出来ていますが、uum はそこまで真
|
|
235 #面目に作っていません。このように、辞書と逆変換辞書の間の統一をとるのは、
|
|
236 #困難です。さらに、辞書と逆変換辞書の間で頻度を共有できないなどの問題点
|
|
237 #があります。
|
|
238 #そこで、一つの辞書に、読みからのインデックスと漢字からのインデックスを
|
|
239 #両方つけようという計画があります。これは、辞書のサイズが大きくなるのと、
|
|
240 #変換のスピードがやや落ちるというトレードオフが問題ですが、時間があれば、
|
|
241 #やりたいと思っています。
|
|
242
|
|
243 自立語品詞の種類は、今まで 32 個に制限されていましたが、これは、256
|
|
244 まで拡張されました。それに加えて、複合品詞をほぼ無制限に定義することが
|
|
245 できます。これらの品詞に関する情報は、品詞ファイル
|
|
246 (/usr/local/lib/wnn/hinsi.data)に書かれています。自立語の品詞は、サー
|
|
247 バが用いるだけではなく、辞書を作る時、辞書をテキストに戻す時などに必要
|
|
248 になる情報です。また、クライアントも、単語の品詞に関する情報を表示する
|
|
249 時、単語登録で品詞を指定する時などに必要となる情報です。これらの品
|
|
250 詞に関する情報は、クライアントからは、ライブラリを用いてサーバに聞くこ
|
|
251 とにより得られます。しかし、atod, dtoa などの辞書ユーティリティプログ
|
|
252 ラムは、直接品詞ファイルを読みにいきます。
|
|
253
|
|
254 付属語ファイルを書くためには、新しい自立語品詞が必要になることが多々あ
|
|
255 るでしょう。かといって、勝手に書き換えられては困るものです。ユーザごと
|
|
256 に持てるようにすればいいかも知れませんが、辞書を用いる時に、異なる品詞
|
|
257 情報を元に作られた辞書を混ぜて使うことはできないため、かえって混乱をき
|
|
258 たすことになります。そのような複雑なものは、管理し切れないと思われます。
|
|
259 そこで、「品詞ファイル」(/usr/local/lib/wnn/hinsi.data)は、世の中に一
|
|
260 つだけ存在するということにしました。品詞ファイルに対しては、エントリの
|
|
261 追加は認めるが、削除、並べ変えは認めません。品詞ファイルは、以下のよう
|
|
262 に、品詞、複合品詞の情報を書き並べた単純な構造をしています。
|
|
263
|
|
264 ....
|
|
265 ....
|
|
266 名詞
|
|
267 人名
|
|
268 地名
|
|
269 人地名/人名:地名 ;人名, 地名
|
|
270 ....
|
|
271 ....
|
|
272
|
|
273
|
|
274 #jserver を複数動かす事、あるいは、辞書ファイルや付属語ファイルを書き変
|
|
275 #えるために、品詞ファイルも各サイトで書き変えていくことを考えると、品詞
|
|
276 #ファイルの管理は、一つの課題となってきそうです。また、atod, dtoa など
|
|
277 #を動かそうとすると、品詞ファイルがあるpath に存在していなくてはならず、
|
|
278 #問題となります。(atod, dtoa もjserverと通信した方がいいのかも知れませ
|
|
279 #ん。)
|
|
280 #
|
|
281 # そこで、現在のところ、それぞれの辞書ファイルや付属語ファイルに品詞ファ
|
|
282 #イルの情報を持たせようという計画があります。品詞名と、品詞番号の対応関
|
|
283 #係は、各辞書ファイルや付属語ファイルが持ちます。そして、辞書を読み込む
|
|
284 #時に、jserver 内の番号と対応付けを行なって、辞書による、品詞番号と品詞
|
|
285 #名との対応関係の違いを吸収しようというものです。これは、辞書の読み込み
|
|
286 #時の処理が多くなって、クライアントの立上りが遅くなるという欠点と、辞書
|
|
287 #のサイズが少し大きくなるという欠点がありますが、非常に有望な方法だと思
|
|
288 #います。次のリリースまでには、実現したい機能です。
|
|
289
|
|
290
|
|
291 今までは、ユーザ形式、システム形式の2種類の辞書を用いていました。前
|
|
292 者は、単語登録可能だけど、頻度ファイルを外部に持つことができない形式で、
|
|
293 後者は、単語登録はできないけれど、頻度ファイルを外部に持つことができ、
|
|
294 同じ語数の場合、辞書を小さく作ることができる形式でした。しかし、ユーザー
|
|
295 形式の辞書が頻度ファイルを外部に持つことを可能にするのは技術的に決して
|
|
296 難しい問題ではなく、そうすることにより、辞書の大きさが比較的問題になら
|
|
297 ないサイトでは、辞書の形式としては今までユーザ形式の辞書と呼ばれていた
|
|
298 もの1種類だけで済むようになります。そこで、Ver.4 では、今までユーザ形
|
|
299 式の辞書と呼ばれていたものに対して、頻度ファイルを外部に持つことを許し
|
|
300 ました。
|
|
301
|
|
302 こうなると、ユーザ形式、システム形式という名前は不適切です。そこで、
|
|
303 今までユーザ形式と呼ばれていたものは登録可能形式、システム形式と呼ば
|
|
304 れていたものは固定形式と名前を改めました。ユーザ形式の辞書が広く使わ
|
|
305 れることを考え、辞書の内部形式も、辞書を引くのが早くなるような変更を加
|
|
306 えてあります。また、今まで存在した語数などに対する制限はほとんどありません。
|
|
307 ただ、漢字文字列が(外部UJISで)255バイト以内という制限は残っています。
|
|
308
|
|
309 辞書の大きさは、今までとほとんど変わっていないと思います。
|
|
310
|
|
311 辞書 kihon_1 語数 59,717
|
|
312
|
|
313 テキスト形式 1,567,388
|
|
314 旧ユーザ形式 1,783,214
|
|
315 旧システム形式 956,294
|
|
316 登録可能形式 1,735,680
|
|
317 固定形式 1,190,742
|
|
318
|
|
319
|
|
320 登録可能形式の辞書を皆で共有することにより、辞書の内容に「バグ」があっ
|
|
321 た時に、動的にバグを修正することができます。今までだと、一旦テキスト形
|
|
322 式に直して、バグを直して、それを再びインストールするという手続きを踏ま
|
|
323 なくてはならず、面倒なばかりか、それをすると、今まで個人が持っていた頻
|
|
324 度ファイルがすべて使えなくなるという非常に不便な状態にあったわけです。
|
|
325
|
|
326 ただ、辞書の品質を保つためには、誰でも単語の登録、削除が行なえるので
|
|
327 は問題があります。そこで、辞書にパスワードをつけることにしました。これ
|
|
328 によって、辞書のメンテナンスをする以外の人が、間違って、あるいは悪意的
|
|
329 に辞書を書き換えるということを防ぐことができます。このパスワードは、辞
|
|
330 書を書き換えるのを防ぐだけで、辞書を変換に用いることを制限するものでは
|
|
331 ありません。
|
|
332 もちろん、個々のユーザが自分の辞書にパスワードをつけて用いることも可
|
|
333 能です。その時、辞書を使う度にパスワードを打ち込むのではやっていられま
|
|
334 せん。そこで、高レベル・ライブラリでは、初期化ファイルの辞書指定のとこ
|
|
335 ろでパスワードの入っているファイル名を指定することにより、ライブラリが
|
|
336 そのファイルを読んで、パスワードをサーバに送るようになっています。後は、
|
|
337 UNIX ファイルシステムの read permission でパスワードの入ったファイルを
|
|
338 保護すれば良いのです。辞書と同様に、頻度ファイルもパスワードを付けられ
|
|
339 るようになっています。パスワードの入ったファイル名は、高レベル・ライブ
|
|
340 ラリでは、V3 の wnnrc に相当するものをパースして、辞書などのの初期設定
|
|
341 をするものが存在するのですが、その初期化ファイルの中で、パスワードファ
|
|
342 イル名を指定できるようになっています。ですから、uum では、通常の使用で
|
|
343 は、パスワードを入力する必要は生じません。
|
|
344
|
|
345 #辞書のパスワードについては、辞書をちゃんと管理するためには必要がある
|
|
346 #と思ってつけましたが、実際には、そんなめんどくさいもの誰も使わないで
|
|
347 #しょう。:-)
|
|
348
|
|
349 Wnnでは、頻度ファイルの他に、辞書の内部にも、頻度情報を一組持って
|
|
350 います。この頻度情報は、旧バージョンでは、ユーザ形式辞書では頻度として、
|
|
351 システム形式辞書では、頻度ファイルを作る時の初期値として用いられていま
|
|
352 した。すなわち、新しく頻度ファイルを作った時には、辞書内の頻度部分の内
|
|
353 容をコピーして、頻度の初期値としていました。しかし、これでは、後で頻度
|
|
354 を集めてテキスト形式の辞書に戻そうとした時に、頻度値の集計が難しくなり
|
|
355 ます。また、頻度値として、もともとの値と自分が使った値と別々に見たいと
|
|
356 いう要求もあるでしょう。そこで、Ver.4 では、頻度ファイルを新しく作った
|
|
357 時には、すべての項目の頻度値が 0 であるような頻度ファイルを作り、頻度
|
|
358 値として、辞書内の頻度値と頻度ファイルの頻度値を足したものを用いること
|
|
359 にします。
|
|
360 自分一人しか使わない辞書の場合、頻度ファイルを辞書の外部に作るのは無
|
|
361 駄です。また、複数の人で同じ頻度を用いる場合にも、頻度は辞書内にあった
|
|
362 方がいいでしょう。そういうわけで、頻度ファイルを指定せずに辞書を用いる
|
|
363 と、辞書内の頻度を用い、それを更新するようになっています。ディスクの容
|
|
364 量が足りないなどの理由で、頻度ファイルを共有する場合に、楽になります。
|
|
365
|
|
366 また、pubdic などで集計した頻度を、元となる頻度として反映する場合に、
|
|
367 個々のユーザの頻度ファイルを作り直さなくても、辞書内頻度を用いる状態で
|
|
368 辞書を読み込んで、頻度値変更のライブラリを使って頻度値を新しい値にセッ
|
|
369 トし直すことが可能になります。一つの辞書に対して、辞書外に頻度ファイル
|
|
370 を作って使用するという使用法と、辞書内の頻度を用いるという使用法を併用
|
|
371 するのは、一般には望ましい使い方ではありません。そのようなことを防ぐた
|
|
372 めに、辞書の頻度部分にもパスワードをつけることが可能になっています。そ
|
|
373 れによって、(パスワードが一致しない場合、)頻度ファイルを指定せずに、頻
|
|
374 度を更新するモードでその辞書を使用する事が不可能になります。
|
|
375
|
|
376 # pubdic プロジェクトが、Wnn V4 で、どのような形態で辞書を管理してい
|
|
377 #くのかは、私は知りません。
|
|
378
|
|
379 誰にも使うことのできないパスワード(辞書を作る時に、atod -n -N で事が出
|
|
380 来ます)が辞書本体、辞書頻度部分についている場合、
|
|
381
|
|
382 辞書本体 辞書頻度部分
|
|
383
|
|
384 パスワード有 パスワード有 頻度ファイルを用い、登録不能
|
|
385 パスワード無 パスワード有 頻度ファイルを用い、誰でも登録可能
|
|
386 パスワード有 パスワード無 頻度は共有、登録はできない
|
|
387 パスワード無 パスワード無 頻度は共有、誰でも登録可能
|
|
388
|
|
389 といったところでしょうか。もちろん、頻度部分にパスワードがついてなくて
|
|
390 も、頻度ファイルを辞書外部に作って辞書を用いることは可能ですし、パスワー
|
|
391 ドの無い辞書でも、今までとおり、辞書本体、あるいは頻度部分をリード・オ
|
|
392 ンリーで用いることもできます。
|
|
393
|
|
394 頻度については、新しく、頻度値を用いてエントリの一時的削除を行なうこ
|
|
395 とを可能にしました。すなわち、頻度値をある値にセットすれば、そのエント
|
|
396 リーは、変換の時に用いられないというものです。このある値は、ライブラリ
|
|
397 では(実頻度) -1(WNN_ENTRY_NO_USE) になっています。頻度ファイルを指定し
|
|
398 ていない場合には、辞書内頻度値がこの値ならば、また、指定している場合に
|
|
399 は、頻度ファイル値もしくは辞書内頻度値のどちらかがこの値ならば、そのエ
|
|
400 ントリは、一時削除されたことになります。これによって、皆で共有して使用
|
|
401 している辞書に自分にとって不適当な単語が存在している場合に、それを変換
|
|
402 の対象から除外することができます。テキスト形式では、削除されたエントリ
|
|
403 は頻度の部分が "-" で示されます。テキスト形式で、エントリを消す時に、
|
|
404 コメントアウトなどの方法で実際に消してしまうと、atod で辞書を作ってそ
|
|
405 れを dtoa で再びテキストに戻した時に、エントリーが消えてしまいます。頻
|
|
406 度部分を "-" にする事により消したエントリは、実際に消えたわけではあり
|
|
407 ませんから、辞書の内容を編集する時に、便利です。高レベル・ライブラリで
|
|
408 は、エントリの一時削除のためのライブラリ関数が用意されています。
|
|
409
|
|
410 Ver.4 では、辞書にコメントを付けることが出来るようになっています。
|
|
411 (コメントというより、ニックネームと言った方がいいかも知れません)uumで
|
|
412 は、これを、単語登録などの時の辞書名の指定に用いるようにしています。
|
|
413 usr/pubdic/pd-chimei といった辞書名を見ながら登録する辞書を選ぶよりも、
|
|
414 「地名辞書」といったニックネームを見ながら登録する辞書を選べた方が便利
|
|
415 なのは、理解していただけるでしょう。
|
|
416
|
|
417 また、コメントは、各辞書エントリにつけることも可能となっています。これ
|
|
418 は、テキスト形式に直して辞書を編集する時も見えますので、辞書の編集時に
|
|
419 便利だと思われます。
|
|
420
|
|
421 辞書のパスワード、コメントなどは辞書の作成時に指定しますが、すでに存在
|
|
422 する辞書に対して、これらの部分を書き換えるコマンドが用意されています。
|
|
423 これは、今のところ、新バージョンのgmw上で動くように作ってあります。
|
|
424
|
|
425 いままで atou, atos, utoa, stoa と呼ばれていたコマンドは、atod (テキ
|
|
426 スト to 辞書)、dtoa (辞書 to テキスト) の二つにまとめられています。登
|
|
427 録可能形式、固定形式の選択は、atod のオプションで行ないます。
|
|
428
|
|
429 辞書のテキスト形式に対しても、見やすさの観点から変更が加えられていま
|
|
430 す。品詞は数字ではなく、品詞名が現れます。頻度値として、圧縮された値で
|
|
431 はなく、実際の使用頻度(に近い値)が出されます。atod を行なう時に辞書を
|
|
432 ソートし直すので、テキスト形式の辞書を作成する時には、辞書項目はどのよ
|
|
433 うな順でも構いません。これにより、テキスト形式の辞書の編集がしやすくな
|
|
434 ります。dtoa は、読みの順にソートされた形で出力します。
|
|
435
|
|
436 付属語ファイルは、jserver 内に一つ存在するのではなく、環境毎
|
|
437 に設定できるようになりました。環境については、ライブラリの項を参照して
|
|
438 下さい。
|
|
439
|
|
440 #これによって、名簿などを入力している時には付属語がつながらないような
|
|
441 #状態で入力するだとか、手紙文を入力している時には大阪弁などの口語も入っ
|
|
442 #た付属語ファイルを用いるといった設定が可能になります。残念ながら、現在
|
|
443 #の uum や WoG では、この機能を簡単に利用できるようにはなっていません。
|
|
444 #将来への課題です。
|
|
445
|
|
446 変換方式の変更にともない、付属語ファイルの内容、および、atofコマン
|
|
447 ドも変更を受けています。このことについては、ここでは省略します。
|
|
448
|
|
449 辞書をクライアントからupload、downloadする機能が付け加
|
|
450 えられます。これにより、ユーザの個人の辞書や頻度ファイルを、自分のホー
|
|
451 ムディレクトリの下に置くことが可能です。jserver は、ファイルの同一性の
|
|
452 チェックを厳しくやっているので、nfs でマウントされた同一の辞書を二つの
|
|
453 計算機から upload しても、jserver 内では一つのファイルとして扱われます。
|
|
454
|
|
455 # WoG では、デフォルトの設定で、ユーザのホームディレクトリの下にユー
|
|
456 #ザ毎の辞書や頻度ファイルは置かれるようになっています。
|
|
457
|
|
458
|
|
459
|
|
460
|
|
461
|
|
462 3. ライブラリ
|
|
463
|
|
464 Ver.4 では、ライブラリとして、jserver との通信と基本的に1対1に対応し
|
|
465 ている低レベル(js)ライブラリと、jsライブラリを用いて作られた、高レベ
|
|
466 ル(jl)ライブラリがあります。
|
|
467
|
|
468 低レベル・ライブラリは、細かいプリミティブから構成され、高レベル・ライ
|
|
469 ブラリは、仮名漢字変換の流れに沿った高レベルの処理を実現しています。例
|
|
470 えば、変換に関しては、jsライブラリでは、
|
|
471 読みに対して、連文節変換をした第一候補を返す(kanren)
|
|
472 読みに対して、単文節変換をした第一候補を返す(kantan_dai, kantan_sho)
|
|
473 読みに対して、単文節変換をした全候補を返す (kanzen_dai, kanzen_sho)
|
|
474 あるエントリの頻度値をある値にセットする(hindo_set)
|
|
475 といった関数が基本となります。
|
|
476
|
|
477 これに対して、jlライブラリは、変換の履歴を文節の列として持っており、
|
|
478 読みを与えて、連文節変換をする(ren_conv)
|
|
479 文節の区切りを変えて変換し直す(nobi_conv)
|
|
480 ある文節の次候補を返す。(zenkouho, zenkouho_dai)
|
|
481 (変換の履歴に基づいて)頻度値の更新を行なう(update_hindo)
|
|
482 といった関数が基本となります。
|
|
483
|
|
484 低レベル・ライブラリの関数は、js_ ではじまる名前を持っており、高レベル・
|
|
485 ライブラリの関数は、jl_ ではじまる名前を持っています。ここでは、まず、
|
|
486 低レベル・ライブラリについて説明し、その後に、高レベル・ライブラリにつ
|
|
487 いて説明します。
|
|
488
|
|
489
|
|
490 3.1 低レベル・ライブラリ
|
|
491
|
|
492 まず、低レベル・ライブラリにおいて使用される以下の概念について、まとめ
|
|
493 ておきます。
|
|
494
|
|
495 クライアント
|
|
496 環境
|
|
497 ファイル
|
|
498 辞書No.
|
|
499
|
|
500 ●クライアント
|
|
501 jserver と通信路を持つアプリケーション・プログラムのことをクライアン
|
|
502 トと呼びます。複数の計算機上で jserver が動いている時に、一つのプログ
|
|
503 ラムは、複数の jserver のクライアントに同時になることが出来ます。
|
|
504
|
|
505 ●環境
|
|
506 仮名漢字変換の実行結果は、使用する辞書と頻度ファイル、使用する付属語
|
|
507 ファイル、あるいは、変換パラメータの設定といったものによって、変わって
|
|
508 きます。これらの設定は、jserver 内に「環境」と呼ばれるものを作り、それ
|
|
509 に対して行ないます。そして、変換の操作は、引数として読みの文字列と共に、
|
|
510 環境を指定して行ないます。
|
|
511 一つのクライアントは、jserver 内に複数の環境を作り、変換の度に異なる
|
|
512 環境を用いることができます。また、一つの環境を複数のクライアント間で共
|
|
513 有することも可能です。その時には、その環境に対する辞書追加などの操作は、
|
|
514 その環境を使用している他のクライアントにも反映されます。
|
|
515
|
|
516 環境は jserver 内に作られるものですが、js_ライブラリでは、jserver id
|
|
517 と その jserver 内の環境の idのペアを環境としています。ですから、環境
|
|
518 の指定は、変換を行なう jserver の指定を含んでいます。
|
|
519
|
|
520 ●ファイル
|
|
521 Wnn においては、辞書ファイルなどのファイルを jserver 内に読み込む動
|
|
522 作と、ファイルを辞書として用いるなどといったファイルの使用を開始する動
|
|
523 作は、区別されています。それは、jserver が用いるファイルには、辞書ファ
|
|
524 イル、頻度ファイル、付属語ファイルといった種類があり、種類ごとに使用方
|
|
525 法は異なるのですが、ファイルとしての動作(メモリ上への読み込み、書きだ
|
|
526 し、使用されていないファイルをメモリ上から捨てる)は、どの種類のファイ
|
|
527 ルであっても共通だからです。特に、ファイルの読み込み、書き出しに関して
|
|
528 は、jserver が直接行う場合と、クライアントが読み込んで jserver に送信
|
|
529 する(あるいは、逆に、jserver から受信してクライアントのファイルシステ
|
|
530 ムに書き込む)場合があります。クライアントのローカルからの送信か、サー
|
|
531 バーのファイルシステムからの読み込みかをファイルの種類ごとに、ファイル
|
|
532 の使用開始時に指定するのより、ファイルの読み込み、送信を一つのプリミティ
|
|
533 ブとした方が明確だろうという趣旨です。
|
|
534
|
|
535 高水準ライブラリでは、ファイルの作成と読み込みと使用を一つにまとめたラ
|
|
536 イブラリ関数群が用意されています。
|
|
537
|
|
538 ●辞書No.
|
|
539 辞書は、頻度ファイルを指定して使用することも、指定せずに使用すること
|
|
540 もできます。ですから、環境にセットするのは、辞書と頻度ファイルの組、ま
|
|
541 たは、辞書だけです。環境に辞書をセットする事によって ID が返されますが、
|
|
542 この ID を 辞書No.と呼びます。
|
|
543 辞書No.に付随する情報として、辞書ファイル、頻度ファイルの他に、辞書
|
|
544 のプライオリティ、辞書のenable/disable、辞書、頻度の書き込み許可の情報
|
|
545 があります。
|
|
546
|
|
547 ○簡単な例を通した低レベル・ライブラリの説明
|
|
548
|
|
549 以下、かな漢字変換、及び、漢字かな変換を行なう簡単なプログラムを例とし
|
|
550 て、低レベル・ライブラリの使い方を説明します。
|
|
551
|
|
552 #変換関係のライブラリの引数や、パラメータの個数は、配布開始までに
|
|
553 変更されるかもしれないので、このままでは、動かないかもしれません。
|
|
554
|
|
555 -------------------------------------------------
|
|
556 #include <stdio.h>
|
|
557 #include "jslib.h"
|
|
558 /*#include "commonheader.h" */
|
|
559
|
|
560 #define FZK_FILE "/usr/local/lib/wnn/dic/pubdic/full.fzk"
|
|
561 #define KIHON_DIC "/usr/local/lib/wnn/dic/pubdic/pd-kihon.sys"
|
|
562 #define SETTO_DIC "/usr/local/lib/wnn/dic/pubdic/pd-setsuji.sys"
|
|
563 #define REV_DIC "/usr/local/lib/wnn/dic/pubdic/pd-kihon.sysR"
|
|
564 #define REV_DIC_SETTO "/usr/local/lib/wnn/dic/pubdic/pd-setsuji.sysR"
|
|
565
|
|
566 WNN_JSERVER_ID *js;
|
|
567 struct wnn_env *env, *rev_env;
|
|
568 static struct wnn_ret_buf rb = {0, NULL};
|
|
569
|
|
570 int dcnt,scnt;
|
|
571
|
|
572 char yomi[1024];
|
|
573 char kanji[5000];
|
|
574
|
|
575 int kihon_file, setto_file, rev_file, fzk_file, rev_setto_file;
|
|
576 int kihon_dic_no, setto_dic_no, rev_dic_no, rev_setto_dic_no;
|
|
577
|
|
578 main(argc, argv)
|
|
579 int argc;
|
|
580 char **argv;
|
|
581 {
|
|
582 char *mname = "";
|
|
583 rb.buf = (char *)malloc((unsigned)(rb.size = 0));
|
|
584 if(argc > 1) mname = argv[1];
|
|
585
|
|
586 if((js=js_open(mname)) == NULL) err();
|
|
587
|
|
588 if((env=js_connect(js, "kana")) == NULL) err();
|
|
589 if((fzk_file = js_file_read(env,FZK_FILE)) == -1) err();
|
|
590 if((kihon_file = js_file_read(env,KIHON_DIC)) == -1) err();
|
|
591 if((setto_file = js_file_read(env,SETTO_DIC)) == -1) err();
|
|
592
|
|
593 if(js_fuzokugo_set(env,fzk_file) == -1) err();
|
|
594 if((kihon_dic_no = js_dic_add(env,kihon_file,-1,1,WNN_DIC_RDONLY, WNN_DIC_RDONLY, NULL, NULL)) == -1) err();
|
|
595 if((setto_dic_no=js_dic_add(env,setto_file,-1,1,WNN_DIC_RDONLY, WNN_DIC_RDONLY, NULL, NULL)) == -1) err();
|
|
596 p_set(env);
|
|
597
|
|
598 if((rev_env=js_connect(js, "kanji")) == NULL) err();
|
|
599
|
|
600 if((fzk_file = js_file_read(rev_env,FZK_FILE)) == -1) err();
|
|
601 if((rev_file = js_file_read(rev_env,REV_DIC)) == -1) err();
|
|
602 if((rev_setto_file = js_file_read(rev_env,REV_DIC_SETTO)) == -1) err();
|
|
603
|
|
604 if(js_fuzokugo_set(rev_env,fzk_file) == -1) err();
|
|
605 if((rev_dic_no = js_dic_add(rev_env,rev_file,-1,1,WNN_DIC_RDONLY, WNN_DIC_RDONLY, NULL, NULL)) == -1) err();
|
|
606 if((rev_setto_dic_no = js_dic_add(rev_env,rev_setto_file,-1,1,WNN_DIC_RDONLY, WNN_DIC_RDONLY, NULL, NULL)) == -1) err();
|
|
607 p_set(rev_env);
|
|
608
|
|
609 #ifdef DEBUG
|
|
610 printf("Now discard file push any key\n");
|
|
611 getchar();
|
|
612 js_file_discard(rev_env, rev_file);
|
|
613 printf("Now discard file\n");
|
|
614 #endif
|
|
615
|
|
616 henkan();
|
|
617 js_close(js);
|
|
618 }
|
|
619
|
|
620 henkan()
|
|
621 {
|
|
622 wchar u[1024];
|
|
623 struct wnn_env *c_env = env;
|
|
624 struct wnn_dai_bunsetsu *dp;
|
|
625
|
|
626 for(;;){
|
|
627 if(c_env == env){printf("yomi> ");fflush(stdout);}
|
|
628 else {printf("kanji> ");fflush(stdout);}
|
|
629 if(gets(yomi) == NULL)return;
|
|
630 if(yomi[0] == '!')return;
|
|
631 if(yomi[0] == '@'){
|
|
632 c_env = (c_env == env)? rev_env:env;
|
|
633 continue;
|
|
634 }
|
|
635 strtows(u,yomi);
|
|
636 dcnt =js_kanren(c_env,u,WNN_BUN_SENTOU, NULL, WNN_VECT_KANREN, WNN_VECT_NO,&rb);
|
|
637 dp = (struct wnn_dai_bunsetsu *)rb.buf;
|
|
638 print_kanji(dp,dcnt );
|
|
639 }
|
|
640 }
|
|
641
|
|
642 print_kanji(dlist, cnt)
|
|
643 struct wnn_dai_bunsetsu *dlist;
|
|
644 int cnt;
|
|
645 {
|
|
646 int i;
|
|
647 struct wnn_sho_bunsetsu *sbn;
|
|
648
|
|
649 if (dlist == 0) return;
|
|
650 putchar('\n');
|
|
651 for ( ; cnt > 0; dlist++, cnt --) {
|
|
652 sbn = dlist->sbn;
|
|
653 for (i = dlist->sbncnt; i > 0; i--) {
|
|
654 putws(sbn->kanji); printf("-");
|
|
655 putws(sbn->fuzoku); printf(" ");
|
|
656 sbn++;
|
|
657 }
|
|
658 printf("|");
|
|
659 }
|
|
660 putchar('\n');
|
|
661 fflush(stdout);
|
|
662 }
|
|
663
|
|
664 p_set(env1)
|
|
665 struct wnn_env *env1;
|
|
666 {
|
|
667 struct wnn_param pa;
|
|
668 pa.n= 2; /* n_bun */
|
|
669 pa.nsho = 10; /* nshobun */
|
|
670 pa.p1 = 2; /* hindoval */
|
|
671 pa.p2 = 40; /* lenval */
|
|
672 pa.p3 = 0; /* jirival */
|
|
673 pa.p4 = 100; /* flagval */
|
|
674 pa.p5 = 5; /* jishoval */
|
|
675 pa.p6 = 1; /* sbn_val */
|
|
676 pa.p7 = 15; /* dbn_len_val */
|
|
677 pa.p8 = -20; /* sbn_cnt_val */
|
|
678 pa.p9 = 0; /* kan_len_val */
|
|
679
|
|
680 js_param_set(env1,&pa);
|
|
681 }
|
|
682
|
|
683
|
|
684 putwchar(x)
|
|
685 unsigned short x;
|
|
686 {
|
|
687 putchar( x >> 8);
|
|
688 putchar( x );
|
|
689 }
|
|
690
|
|
691 putws(s)
|
|
692 unsigned short *s;
|
|
693 {
|
|
694 while(*s) putwchar(*s++);
|
|
695 }
|
|
696
|
|
697 strtows(u,e)
|
|
698 wchar *u;
|
|
699 unsigned char *e;
|
|
700 {int x;
|
|
701 for(;*e;){
|
|
702 x= *e++;
|
|
703 if(x & 0x80) x = (x << 8) | *e++;
|
|
704 *u++= x;
|
|
705 }
|
|
706 *u=0;
|
|
707 }
|
|
708
|
|
709 err()
|
|
710 {
|
|
711 printf(wnn_perror());
|
|
712 printf("\n bye.\n");
|
|
713 exit(1);
|
|
714 }
|
|
715
|
|
716 このプログラムの実行例を示しておきます。
|
|
717
|
|
718 % kankana
|
|
719 yomi> だいぶんせつは、しょうぶんせつのれつで、せつぞくじょうけんをみたすものと
|
|
720 ていぎされます。
|
|
721
|
|
722 大- 文節-は、 |小- 文節-の |列-で、 |接続- |条件-を |満た-す |もの-と |定義-さ
|
|
723 れます。 |
|
|
724 yomi> このぷろぐらむのじっこうれいをしめしておきます。
|
|
725
|
|
726 この- |プログラム-の |実行- 例-を |示-しておきます。 |
|
|
727 yomi> @
|
|
728
|
|
729 kanji> 大文節は、小文節の列で、接続条件を満たすものと定義されます。
|
|
730
|
|
731 おお- ぶんせつ-は、 |こ- ぶんせつ-の |れつ-で、 |せつぞく- |じょうけん-を |み
|
|
732 た-す |もの-と |ていぎ-されます。 |
|
|
733 kanji> このプログラムの実行例を示しておきます。
|
|
734
|
|
735 この- |ぷろぐらむ-の |じっこう- れい-を |しめ-しておきます。 |
|
|
736 > ^D
|
|
737
|
|
738 -------------------------------------------------
|
|
739 プログラムの説明
|
|
740
|
|
741 このプログラムを用いで、低レベル・ライブラリの使い方について説明します。
|
|
742
|
|
743 #include "jslib.h"
|
|
744
|
|
745 include/jslib.h には、jsライブラリで用いる構造体、マクロなどの定義が
|
|
746 なされています。ライブラリで提供する関数名、構造体名、マクロ名は、
|
|
747 "js_*" または、"wnn_*" (高レベル・ライブラリでは "jl_") という名前をつ
|
|
748 けていますので、名前の衝突が起こらないように注意して下さい。
|
|
749
|
|
750 static struct wnn_ret_buf rb = {0, NULL};
|
|
751
|
|
752 rb.buf = (char *)malloc((unsigned)(rb.size = 0));
|
|
753
|
|
754 今までのライブラリでは、変換などの変値を入れる領域は、ライブラリを呼ぶ
|
|
755 側で用意し、その領域に入り切らない場合には、エラーになりました。一般に、
|
|
756 ライブラリを用いる側で、どれだけの領域が必要かはわからないので、大きな
|
|
757 問題となります。そこで、Ver.4 では、必要があれば、ライブラリの側で
|
|
758 reallocを行なうという仕様になっています。不定長の変値を返す関数は、
|
|
759 (struct wnn_ret_buf *) の引数を取ります。このポインタの先には、malloc
|
|
760 または realloc で取られた領域と、その大きさのペアが与えられる必要があ
|
|
761 ります。
|
|
762
|
|
763 if((js=js_open(mname)) == NULL) err();
|
|
764
|
|
765 この一行で、jserver との通信路を設立し、jserver のクライアントになりま
|
|
766 す。mname には、jserver の存在する計算機名が与えられます。計算機名として
|
|
767 ヌル・ストリングが与えられた時には、UNIX ドメインの通信を行ないます。
|
|
768 js_open は、返値として、jserver_id を返します。この通信路は、js_close
|
|
769 をによって明示的に切断するか、プログラムが終了するまで有効です。
|
|
770
|
|
771 if((env=js_connect(js, "kana")) == NULL) err();
|
|
772
|
|
773 次に、js_connect により、環境を jserver 内に作ります。どの jserver 内
|
|
774 に環境を作るかは、引数で jserver_id を渡すことにより指定します。
|
|
775 "kana" は、環境名です。js_connect は、同じ環境名を持つ環境が jserver
|
|
776 内存在する時にはその id を返しそれ以外の時には新しく環境を jserver 内
|
|
777 に作り、その id を返します。環境名は、複数のプロセスで一つの環境を共有
|
|
778 するために用います。すなわち、他のプロセスが同じく "kana" という環境名
|
|
779 を引数としてjs_connect を呼んだ場合、そのとき得られる環境は、ここで
|
|
780 作られたものと同じです。他のプロセスと共有することの無い環境(間違って、
|
|
781 共有されたくない環境)を作りたい場合がありますが、その場合には、第一引
|
|
782 き数として空文字列を渡してやります。それにより、jserver は常に新しい環
|
|
783 境を作り、それを返します。その場合、返されてきた環境が、共有されること
|
|
784 はありません。
|
|
785
|
|
786 環境の使用を終るには、js_disconnect を用います。また、通信路が閉じられ
|
|
787 た時には自動的に環境の使用を終えます。環境は、その環境を用いているクラ
|
|
788 イアントがなくなった時に、jserver 内からなくなります。以下のライブラリ
|
|
789 関数では環境を引数としたものが多く存在しますが、それらの環境は、
|
|
790 js_connect でそのプロセスが受け取ったものである必要があります。それは、
|
|
791 他のプロセスに勝手に環境に対してアクセスされることを防ぐためです。
|
|
792
|
|
793 if((fzk_file = js_file_read(env,FZK_FILE)) == -1) err();
|
|
794 if((kihon_file = js_file_read(env,KIHON_DIC)) == -1) err();
|
|
795 if((setto_file = js_file_read(env,SETTO_DIC)) == -1) err();
|
|
796
|
|
797 ここで、付属語ファイル、および辞書を jserver に読み込んでいます。
|
|
798 js_file_read は、そのファイルが jserver 内に存在しない時には、ファイル
|
|
799 jserver 内に読み込みその Fid(ファイル ID) を返し、jserver 内に既に存在
|
|
800 している時にはその id を返します。また、js_file_send は、クライアント・
|
|
801 サイトのファイルを読み込むのに使用します。jserver は、ファイルの同一性
|
|
802 のチェックを厳密に行なっていますので、クライアントとサーバから同一のファ
|
|
803 イルを読み込んだとしても、同一のファイルがメモリー上に二つ以上存在する
|
|
804 ことはありません。js_file_read, js_file_send を行なうことにより、ファ
|
|
805 イルは環境に接続されます。Fid は、jserver 内でユニークに存在するもので
|
|
806 すが、そのファイルに対してアクセスするためには、ファイルが接続された環
|
|
807 境を持っている必要があります。js_file_send, js_file_receive は、現在の
|
|
808 バージョンでは、まだサポートされていません。
|
|
809
|
|
810 jserver のサイト上のパス名の指定は、フルパスで指定するか、JSERVER_DIR
|
|
811 と呼ばれるディレクトリからの相対で指定するかします。JSERVER_DIR は、
|
|
812 jserverrc の中で指定されています。
|
|
813
|
|
814 jserver 内に読み込まれたファイルは、js_file_discard によって、環境か
|
|
815 ら切り離されます。また、環境が先に消滅すれば、自動的にその環境から切り
|
|
816 離されます。そして、ファイルに対して接続している環境が無くなった時、そ
|
|
817 のファイルは jserver 内から消滅します。ファイルによっては、jserver が
|
|
818 読み込んでいる間に内容が更新されているため、その更新された内容をファイ
|
|
819 ル・システムに書き戻す必要が出てきます。それを行なうのが、js_file_write,
|
|
820 js_file_receive です。
|
|
821
|
|
822 js_file_write, js_file_receive で、読み込んだファイルと異なるファイル
|
|
823 に書き出すことが可能です。その場合には、ファイルがすでに存在していれば、
|
|
824 それが wnn のファイルの場合のみ、上書きされます。
|
|
825
|
|
826 # js_file_write, receive が明示的に呼ばれた時以外に、ファイルが
|
|
827 #jserverないから消滅する時に自動的に書き戻しを行なってはどうかという意
|
|
828 #見もあったが、クライアント・サイトのファイルの場合には不可能なので、
|
|
829 #しない。
|
|
830
|
|
831 この他に、ファイルに関するライブラリとしては、js_file_list (環境に接
|
|
832 続されているファイルの情報一覧を得る)、js_file_list_all (jserver に読
|
|
833 み込まれているファイルの情報一覧を得る)、js_file_info (特定のファイル
|
|
834 についての情報を得る。)があります。
|
|
835
|
|
836 また、アプリケーションを書くためには、jserver のあるサイトのファイル・
|
|
837 システムに関する情報を得る必要が生じてきます。そのために、jserver サイ
|
|
838 ト上でのパス名を引数として取るライブラリとして
|
|
839
|
|
840 js_access 指定されたファイルの(jserver に対する)アクセス権を調べる。
|
|
841
|
|
842 js_file_stat 指定されたファイルの内容(辞書、頻度ファイル。付属語ファイル
|
|
843 の別、ファイルに付けられているコメント)を得る
|
|
844
|
|
845 js_file_loaded 指定されたパス名のファイルが jserver 内に
|
|
846 読み込まれているかどうか調べる。
|
|
847
|
|
848 ファイルシステムに関して、始めてアプリケーションを使う人のためのユーザ
|
|
849 辞書や頻度ファイルを作る必要があります。そのためのライブラリとして、
|
|
850
|
|
851 js_mkdir 指定された名前のディレクトリを作る。
|
|
852 相対パスは、JSERVER_DIR からの相対で指定する。
|
|
853 指定されたところにどこでも作ってしまうので、
|
|
854 jserver に強い権限を与えてはいけない。
|
|
855 (root で走らすなどもってのほか。)
|
|
856
|
|
857 js_dic_file_create
|
|
858 指定された名前で、語数 0 の登録可能形式の辞書を作る。
|
|
859
|
|
860 js_hindo_file_create
|
|
861 指定されたファイル id を持ったファイルの頻度ファイルを
|
|
862 指定されたパス名で作る。
|
|
863
|
|
864 js_dic_file_create_client
|
|
865 指定された名前で、語数 0 の登録可能形式の辞書をクライ
|
|
866 アントサイトに作る。
|
|
867
|
|
868 js_hindo_file_create_client
|
|
869 指定されたファイル id を持ったファイルの頻度ファイルを
|
|
870 指定されたパス名で、クライアントサイトに作る。
|
|
871
|
|
872 js_file_remove Wnn のファイルをファイルシステムから消す。
|
|
873
|
|
874
|
|
875 があります。
|
|
876
|
|
877 if(js_fuzokugo_set(env,fzk_file) == -1) err();
|
|
878
|
|
879 これは、fzk_file という file_id で示されたファイルを env の付属語ファ
|
|
880 イルとして設定しています。
|
|
881
|
|
882 if((kihon_dic_no = js_dic_add(env,kihon_file,-1,1,1,-1,NULL, NULL)) == -1) err();
|
|
883 if((setto_dic_no=js_dic_add(env,setto_file,-1,1,0,0,-1,NULL, NULL)) == -1) err();
|
|
884
|
|
885 これは、kihon_file, setto_file という file_id で示されたファイルを
|
|
886 envの辞書として設定しています。
|
|
887
|
|
888 js_dicadd(env, file_id, hfile_id, prio,
|
|
889 rdonly, hrdonly, passwd_file, passwd_hfile)
|
|
890
|
|
891 によって、file_id で示され
|
|
892 たファイルを、hfile_id で示されたファイルを頻度ファイルとし、prio で示
|
|
893 された優先度で、辞書、頻度がそれぞれ rdonly, hrdonly で示された状態で
|
|
894 env に追加することを意味しています。頻度情報として辞書ファイルの内部に
|
|
895 もつものを使用する場合には、第三引数で -1 を設定します。また、rdonly
|
|
896 は WNN_DIC_RW の時、読み書き可能、WNN_DIC_RDONLY の時更新不能を意味し
|
|
897 ています。また、辞書には、パスワードがついていることがあります(参照)。
|
|
898 パスワードつきの辞書、頻度を、リード・オンリーでない状態で用いたい時に
|
|
899 は、それぞれのファイルのパスワードを第八、第九引数として与える必要が
|
|
900 あります。dic_add は、返値として、辞書No.を返します。それ以降の辞書、
|
|
901 頻度ファイル関する操作は、この dic_No を用いて行ないます。付属語ファイ
|
|
902 ルは環境に対して一つ存在するものですが、辞書は、一つの環境に複数設定し
|
|
903 てそれら全てを変換に用います。ここでは、二つの辞書を設定しています。
|
|
904
|
|
905 環境に設定されている 辞書No.に関する情報を得るライブラリとして、
|
|
906 js_dic_list があります。また、辞書No.を環境から無くさずに、一時的に無
|
|
907 効にするためのライブラリ (js_dic_use)があります。
|
|
908
|
|
909 辞書No.を環境から外すには、js_dic_del を用います。
|
|
910
|
|
911 環境に対する設定としては、辞書、付属語ファイルの他に、変換パラメーター
|
|
912 があります。変換パラメータに関しては、js_param_set によって設定を行な
|
|
913 い、js_param_get によって現在の設定の状態を得ます。変換パラメータに関
|
|
914 しては、デフォルト値が jserverrc に書かれていて、環境が js_connect で
|
|
915 作られた時には、その設定が用いられます。
|
|
916
|
|
917 if((rev_env=js_connect(js, "kanji")) == NULL) err();
|
|
918 if((fzk_file = js_file_read(rev_env,FZK_FILE)) == -1) err();
|
|
919 if((rev_file = js_file_read(rev_env,REV_DIC)) == -1) err();
|
|
920 if((rev_setto_file = js_file_read(rev_env,REV_DIC_SETTO)) == -1) err();
|
|
921
|
|
922 if(js_fuzokugo_set(rev_env,fzk_file) == -1) err();
|
|
923 if((rev_dic_no = js_dic_add(rev_env,rev_file,-1,1,WNN_DIC_RDONLY, WNN_DIC_RDONLY, NULL, NULL)) == -1) err();
|
|
924 if((rev_setto_dic_no = js_dic_add(rev_env,rev_setto_file,-1,1,WNN_DIC_RDONLY, WNN_DIC_RDONLY, NULL, NULL)) == -1) err();
|
|
925
|
|
926
|
|
927 上記のかな漢字変換用の環境とは別に、もう一つ、漢字かな変換用の環境を作
|
|
928 り、それに対して設定を行なっています。ここで、fzk_fileとしては、同じファ
|
|
929 イルIDが返ってくるはずですが、fzk_file に関係するfile_read を再度行なっ
|
|
930 ていることに注意して下さい。先程述べたように、その環境に対して
|
|
931 file_readを先に行なっていないと、そのファイルがその環境で使えないからです。
|
|
932
|
|
933 henkan();
|
|
934
|
|
935 henkan の中身は、御覧のように、読み文字列を得て、内部 UJIS コードに変
|
|
936 換して、仮名漢字変換を行ない、結果を表示するというものです。jserver と
|
|
937 の通信は、日本語のコードとして、全て内部 UJIS を用いて行ないます。
|
|
938
|
|
939 dcnt =js_kanren(c_env,u,WNN_BUN_SENTOU, NULL, WNN_VECT_KANREN, WNN_VECT_NO,&rb);
|
|
940
|
|
941 これは、連文節変換を行なうライブラリ関数です。先に説明した通り、変換
|
|
942 の関数は、全て、環境(c_env)と、読み(u), 結果を入れる領域へのポインタ
|
|
943 (&rb)を引数として持ちます。後の4つの引数は、変換結果に影響を与える
|
|
944 パラメータとなるものです。
|
|
945 第3、4引数は、変換文字列の先頭に関する設定、
|
|
946 第5,第6引数は、変換文字列の終端に関する設定です。
|
|
947
|
|
948 前にも述べたように、Ver.4 では、大文節と小文節を扱います。連文節変換で
|
|
949 は、変換の結果返してくるものは大文節の列ですが、指定の仕方によっては、
|
|
950 先頭の大文節および最後の大文節は、完全な大文節ではなく、大文節の部分を
|
|
951 返させることが可能です。それによって、前端と終端に接続条件の制約を
|
|
952 与えて変換を行なうことができます。
|
|
953
|
|
954 具体的には、前端の設定については、ある小文節の自立語の品詞と付属語列を第
|
|
955 3、第4引数で指定することにより、先頭の大文節として、その小文節とつながっ
|
|
956 て大文節を構成する小文節列を得ることができます。前端の設定を行わない時
|
|
957 には、WNN_BUN_SENTOU を第3引数として指定すれば、前端が大文節の前端と
|
|
958 なるように変換を行います。WNN_ALL_HINSI を第3引数として指定すれば、
|
|
959 前端が小文節の前端となるように変換を行います。この場合には、先頭の大文
|
|
960 節は擬似的なものとなります。
|
|
961
|
|
962 終端の設定については、ベクトル(品詞の集合)の番号を第5,第6引数に指定
|
|
963 することにより、最後の大文節として、そのベクトルを終端ベクトルとして解
|
|
964 析した結果を返します。第5引数で指定されたベクトルが優先されて探索され、
|
|
965 第6引数で指定されたものは、それより低い評価値として計算されます。この
|
|
966 ように、二つベクトルを指定するのは、全候補を得る時などに、「ある品詞で
|
|
967 終る文節を得たいが、それが存在しない時には、他の品詞のものでもよい」と
|
|
968 いうことが生じるからです。ベクトルとしては、jslib.h で define されてい
|
|
969 る 3つのベクトル、WNN_VECT_KANREN、WNN_VECT_KANTAN、WNN_VECT_KANZEN、
|
|
970 および、 解析結果としてかえされる、各小文節の前端ベクトル(前につながる
|
|
971 ことのできる小文節の最後の品詞) を用います。これらのベクトルの内容は、
|
|
972 付属語ファイルで指定されます。また、WNN_VECT_NO を第6引数に指定すると、
|
|
973 そのベクトルは無視されます。
|
|
974
|
|
975 具体的に、この機構がどのように使われるかを説明します。
|
|
976 各[i]を小文節とし、‖ を大文節の区切りとします。最初の変換で、
|
|
977
|
|
978 ‖[1][2][3]‖[4]‖[5]‖[6][7]‖[8][9]‖
|
|
979
|
|
980 という結果が得られたとします。ここで、[1],[2],および、[7]以降は正しく
|
|
981 変換されていて、[3] から [6] は読みを入れ間違えたために誤変換が起こっ
|
|
982 ているとします。これに対して、[3] から [6] までの文節を解除して読みを
|
|
983 直して変換し直したいとします。その時、[2] の文節の情報を第3、4引数とし
|
|
984 て与え、[7]の小文節の前端ベクトルを第5引数として与え、[3] から [6] ま
|
|
985 での読みを与えることによって、例えば
|
|
986
|
|
987 [3']‖[4'][5']‖[6']
|
|
988
|
|
989 といった文節列で、[3'] は [1],[2] とつながって大文節を構成し、[6'] は
|
|
990 [7]とつながって大文節を構成するような変換結果が得られます。高レベル・
|
|
991 ライブラリは、前後の指定を自分で行なわなくても、このような変換が行え
|
|
992 るように作られています。
|
|
993
|
|
994 最後の大文節以外の大文節の終端ベクトルは、WNN_VECT_KANREN が用いられま
|
|
995 す。
|
|
996
|
|
997 前端の接続条件を指定して変換を行った時に、その接続条件を満たすものが無
|
|
998 い場合には、そこが大文節の先頭となるような結果を返します。それも存在し
|
|
999 ない場合には、そこが小文節の先頭となるものを返します。この場合には、返
|
|
1000 してくるものは、擬似的な大文節です。
|
|
1001
|
|
1002 それぞれの小文節は、その status として、前への接続状況を持っています。
|
|
1003 status がWNN_CONNECT ならば、前の小文節に接続している、
|
|
1004 WNN_SENTOU なら、大文節の先頭である。
|
|
1005 WNN_NOT_CONNECT なら、大文節の先頭でもないし、前に接続もしない。
|
|
1006 WNN_GIJI なら、擬似小文節です。
|
|
1007
|
|
1008 この、接続状況の設定は、大文節というものを考える限り必要ではありますが、
|
|
1009 中々難しい所です。特に、
|
|
1010
|
|
1011 #現在のところ、前端の文節が前に接続する時、および、後端の文節が後ろに接
|
|
1012 #続する時の、文節の評価値の決め方が結構いい加減です。また、疑似文節に対
|
|
1013 #する評価値の決め方も、かなりいい加減なところがあります。それで、
|
|
1014 #これらの文節の評価値の決め方を変更しようという計画があって、
|
|
1015 #リリース時には、すでに、変更されているかもしれません。
|
|
1016
|
|
1017 #現在の所、前者の問題に付いては、前に接続する文節列は、評価値を2倍とし
|
|
1018 #て評価を進めることにより、優先して出されるようにし、大文節の先頭となら
|
|
1019 #ない小文節を先頭として解析が終了した時には、その文節列の評価値を1/2
|
|
1020 #にして、大文節の先頭となるものが優先されるようにしています。ただし、前
|
|
1021 #端条件として WNN_BUN_SENTOU を指定して変換した時には、前者の処理は行わ
|
|
1022 #ず、WNN_ALL_HINSI を指定して変換した時には、両方の処理を行いません。
|
|
1023
|
|
1024 #将来的には、変換の時に、変換文字列の前の小文節列の評価値も送ってやって、
|
|
1025 #それを元に、前に接続する文節列の評価値を決めるようにする方向に議論が進
|
|
1026 #んでいます。
|
|
1027 #また、終端に付いても、同様です。
|
|
1028
|
|
1029 変換に付いては、js_kanren の他に、kantan, kanzen がありますが、これら
|
|
1030 も前端、終端の接続条件を指定して変換を行います。
|
|
1031
|
|
1032 kantan, kanzen については、kantan_dai, kantan_syo 、kanzen_dai,
|
|
1033 kanzen_syo という区別があります。kantan_sho, kanzen_sho は、与えられた
|
|
1034 文字列が一つの小文節を成すものとして変換を行います。kantan_dai,
|
|
1035 kanzen_dai は、一つの大文節の部分を成す小文節の列を
|
|
1036 返すように変換を行います。
|
|
1037
|
|
1038 頻度の更新に付いては、js_hindo_set(env,dic_No,entry,ima,hindo) (ある辞
|
|
1039 書のあるエントリの頻度、今使ったよビットの値をある値にセットする。) を
|
|
1040 用います。ここで、与える頻度地は、実頻度値(jserver の中で圧縮して持っ
|
|
1041 ている値ではなく、実際に使われた回数) です。今使ったよビット、頻度の値
|
|
1042 は、別々に指定し、どちらか一方の値しか変化させない時には、もう一方の値
|
|
1043 をWNN_HINDO_NOP としていします。頻度に付いては、値を指定してセットする
|
|
1044 だけではなく、WNN_HINDO_INC (頻度を1上げる) WNN_HINDO_DEL (頻度を1
|
|
1045 下げる)があります。WNN_HINDO_INC をしても、内部的には頻度は圧縮して持っ
|
|
1046 ているので、必ずしも上がるとは限りません。この他に、WNN_ENTRY_NO_USE
|
|
1047 を指定すると、そのエントリは、それ以降の変換で用いられなくなります。
|
|
1048 (マイナス無限大にセットするという感じでしょうか。)
|
|
1049
|
|
1050 js_close(js);
|
|
1051
|
|
1052 最後に、js_close を呼んで、コネクションを切断しています。コネクション
|
|
1053 を切断することにより、そのコネクションから起こした全ての環境は、他のク
|
|
1054 ライアントと共有していない限りなくなり、それらの環境で読み込んだファイ
|
|
1055 ルで、他の環境から読み込まれていないものは全てメモリー上から開放されま
|
|
1056 す。
|
|
1057
|
|
1058 その他の低レベル・ライブラリとして、品詞関係のものがあげられます。品詞
|
|
1059 は、品詞ファイルの中で、階層的に分類されています。階層の途中に位置する
|
|
1060 ものは、品詞の集合を表すノードで、リーフに当たるものが、本当の品詞です。
|
|
1061 この情報は、単語登録時に、品詞を選択するのに用いられます。
|
|
1062
|
|
1063 現在作られている
|
|
1064 品詞ファイルの設定では、次のようになっています。
|
|
1065
|
|
1066 ------------------------------------------------------------
|
|
1067
|
|
1068 /|普通名詞/:固有名詞/:動詞/:特殊な動詞/:動詞以外の用言/\
|
|
1069 :その他の独立語/:接頭語,接尾語/:単漢字:疑似品詞/
|
|
1070
|
|
1071 普通名詞/|名詞:サ行(する)&名詞:一段&名詞:形容動詞&名詞:数詞
|
|
1072 固有名詞/|人名:地名:人名&地名:固有名詞
|
|
1073
|
|
1074 動詞/|一段:一段&名詞\
|
|
1075 :カ行五段:ガ行五段:サ行五段:タ行五段:ナ行五段\
|
|
1076 :バ行五段:マ行五段:ラ行五段:ワ行五段\
|
|
1077 :サ行(する):サ行(する)&名詞:ザ行(ずる)
|
|
1078 特殊な動詞/|カ行(行く):ラ行(下さい)\
|
|
1079 :来(こ):来(き):来(く):為(し):為(す):為(せ)
|
|
1080 動詞以外の用言/|形容詞:形容動詞:形容動詞&名詞:形容動詞(たる)
|
|
1081
|
|
1082 その他の独立語/|副詞:連体詞:接続詞,感動詞
|
|
1083
|
|
1084 接頭語,接尾語/|接頭語:接尾語:接尾人名:接頭地名:接尾地名\
|
|
1085 :接頭数詞:助数詞:接頭助数詞:接尾助数詞\
|
|
1086 :形容動詞化接尾語:サ行(する)&名詞化接尾語:接尾動詞:形容詞化接尾動詞\
|
|
1087 :接頭語(お)
|
|
1088
|
|
1089 疑似品詞/|数字:カナ:英数:記号:閉括弧:開括弧:付属語
|
|
1090 ------------------------------------------------------------
|
|
1091
|
|
1092 品詞に関するライブラリは、以下の3つがあります。
|
|
1093
|
|
1094 js_hinsi_list ノード名を引数にとり、そのノードに属する品詞名の一覧を得る。
|
|
1095
|
|
1096 js_hinsi_name 品詞番号から名前を取る。
|
|
1097
|
|
1098 js_hinsi_number 品詞名を品詞番号に変換する。
|
|
1099
|
|
1100
|
|
1101 この他のライブラリについては、
|
|
1102
|
|
1103 js_dic_info(env,dic_No,ret)
|
|
1104 dic_No の辞書に付いての情報を得る。
|
|
1105
|
|
1106 js_word_add(env,dic_No,読み,漢字,品詞)
|
|
1107 dic_No の辞書No. に、単語を登録する。
|
|
1108
|
|
1109 js_word_delete(env,dic_No,Yomi,jisho_entry)
|
|
1110 dic_No の辞書から単語を削除する。
|
|
1111
|
|
1112 js_word_search(env,dic_No,読み,ret_buf)
|
|
1113 dic_No の辞書に単語検索を行う。
|
|
1114
|
|
1115 js_word_search_by_env(env,読み,ret_buf)
|
|
1116 環境中の全ての辞書No.に対して単語検索を行う。
|
|
1117
|
|
1118 js_word_info(env, dic_No, entry, ret_buf)
|
|
1119 dic_No の辞書の entry 番目の entry について、細かい情報を得る。
|
|
1120
|
|
1121 js_who
|
|
1122 jserver の使用者の一覧を得る。
|
|
1123
|
|
1124 js_kill
|
|
1125 jserver の使用者がない時に、jserver を終了させる。
|
|
1126
|
|
1127 などがあります。
|
|
1128
|
|
1129 #ライブラリの引数は、このドキュメントを書いた時点から変更されているか
|
|
1130 #もしれないので、マニュアルの方を見て下さい。また、最近つけ加わったライ
|
|
1131 #ブラリについては、ここでは述べていません。
|
|
1132
|
|
1133
|
|
1134
|
|
1135 3.2 高レベル・ライブラリ
|
|
1136
|
|
1137 高レベル・ライブラリでは、ユーザの変換の履歴を「バッファ」に残すことにより、
|
|
1138 ●それぞれの変換を行う時の前端、後端の接続条件などの設定を行う。
|
|
1139 ●頻度更新する時に、選択されなかった語に対し今使ったよビットを落とす。
|
|
1140 といった処理をします。また、
|
|
1141 ●次候補列をつくり、その中からの設定の便宜を計ります。
|
|
1142 次候補列を作る時には、最初の変換で返ってきた候補を次候補列の先頭に持っていく、
|
|
1143 同じ候補が重複しないようにするなどの処理をおこないます。
|
|
1144
|
|
1145 「バッファ」は複数持つことが出来ます。その時、不必要になった環境、
|
|
1146 jserver との通信路の破壊などの面倒も見ます。
|
|
1147
|
|
1148 Ver.4 では、「環境」、「ファイル」、「大文節」といった複雑な概念が存在
|
|
1149 しましたが、高レベルライブラリではこれらの概念について知らなくてもライ
|
|
1150 ブラリを用いたプログラムが組めるようになっています。もちろん、大文節、
|
|
1151 環境などを直接扱いたい場合には、扱うことが出来ます。
|
|
1152
|
|
1153 また、
|
|
1154 ●環境に関する初期設定を行う。
|
|
1155 ●辞書追加の時、存在しない辞書、頻度ファイルの作成
|
|
1156 といった処理も行います。
|
|
1157
|
|
1158
|
|
1159 4.アプリケーション
|
|
1160
|
|
1161 4.1 uum
|
|
1162 uum は、バージョン3で wnn と呼ばれていたものと、ほとんど同じです。
|
|
1163 小さなところは色々手が加えられていますが、大きな違いは、
|
|
1164 ●小文節を反転、大文節を下線によって表す。
|
|
1165 ●大文節に対する操作を可能にする。(デフォルトとする)
|
|
1166 ●inspect, 単語検索、辞書検索の画面から、単語や辞書の
|
|
1167 削除や使用の変更の指定が行なえるようになっている。
|
|
1168 ●大文節に対応した、今までより統一的なキーバインドをデフォルトとする。
|
|
1169 といったところでしょうか。
|
|
1170
|
|
1171 uum では、文節に対する基本的操作は、主に大文節に対して行なわれます。基
|
|
1172 本的な操作とは、次候補、伸ばしなどです。
|
|
1173 しかし、小文節についての編集を行ないたいこともあると考えられるので、
|
|
1174 そのためのバインドも行なっています。
|
|
1175 (文節の移動については、小文節単位のものがデフォルトになる予定です。
|
|
1176 というか、大文節のものは、作るのを忘れていた。)
|
|
1177
|
|
1178 (デフォルトのキーバインドは、いままでよりかなり統一的なものとなっています。)
|
|
1179
|
|
1180 uum のもう一つの特徴として、inspect の画面(デフォルトでは、Ctrl_Vにバ
|
|
1181 インドされると思います。)の中から、単語の削除や単語使用の中断が出来る
|
|
1182 ことがあります。単語の削除は Ctrl_D、使用の中断は Ctrl_U にデフォルト
|
|
1183 でバインドされると思います。これにより、「こんな単語が辞書にあるから変
|
|
1184 換がおかしくなるんや」と思った時に、その単語を含む小文節のところにカー
|
|
1185 ソルを持っていって、Ctrl_Z + Ctrl_Uをすることにより、それ以降その単語
|
|
1186 が変換に用いられなくなります。
|
|
1187
|
|
1188 また、単語検索の画面でも、 Ctrl_D、Ctrl_U で単語の辞書からの削除、単語
|
|
1189 の使用状態の変更(すなわち、変換に使われていたものの使用を中断したり、
|
|
1190 使用を中断されているものの使用を再開したり)が可能になっています。(使用
|
|
1191 を中断されている単語は、単語検索時に、頻度が "---" で表されています。)
|
|
1192
|
|
1193 さらに、辞書検索の画面からも、辞書の削除、使用状態の変更が Ctrl_D,
|
|
1194 Ctrl_U で出来るようになっています。
|
|
1195
|