Hiroyuki Komatsu
komat****@users*****
2004年 12月 10日 (金) 23:42:28 JST
Index: prime/doc/usage.html diff -u prime/doc/usage.html:1.5 prime/doc/usage.html:1.6 --- prime/doc/usage.html:1.5 Thu Jun 24 16:28:45 2004 +++ prime/doc/usage.html Fri Dec 10 23:42:28 2004 @@ -24,6 +24,8 @@ <a href="wiki/">Wiki</a> | <a href="emacs/">Emacs クライアント</a> + | + <a href="protocol.html">通信プロトコル</a> ] </div> @@ -235,6 +237,8 @@ <a href="wiki/">Wiki</a> | <a href="emacs/">Emacs クライアント</a> + | + <a href="protocol.html">通信プロトコル</a> ] </div> @@ -244,7 +248,7 @@ </div> <div class="id" align="right"> 小松 弘幸 <komat****@taiya*****><br> - $Id: usage.html,v 1.5 2004/06/24 07:28:45 komatsu Exp $ + $Id: usage.html,v 1.6 2004/12/10 14:42:28 komatsu Exp $ </div> <!-- End of Footer ======================================== --> Index: prime/doc/protocol.html diff -u /dev/null prime/doc/protocol.html:1.1 --- /dev/null Fri Dec 10 23:42:28 2004 +++ prime/doc/protocol.html Fri Dec 10 23:42:28 2004 @@ -0,0 +1,353 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"> +<html lang="ja" dir="LTR"> + <head> + <meta http-equiv="Content-Type" content="text/html; charset=ISO-2022-JP"> + <title>予測入力システム: PRIME</title> + <link rel="stylesheet" href="http://taiyaki.org/taiyaki.css" media="all"> + </head> + + <body> + <h1>PRIMEの通信プロトコル</h1> + + <div class="note"> + [ + <a href="index.html">ホーム</a> + | + <a href="prime.html">PRIME とは</a> + | + <a href="install.html">インストール</a> + | + <a href="usage.html">使い方</a> + | + <a href="dictionary.html">単語辞書</a> + | + <a href="wiki/">Wiki</a> + | + <a href="emacs/">Emacs クライアント</a> + | + 通信プロトコル + ] + </div> + + <p> + このページでは、PRIMEのクライアントを作成することを目的にした + 通信プロトコルの説明します。 + </p> + + <h2>はじめに</h2> + <p> + クライアントが PRIME サーバと通信する方法はいくつかの方法がありますが、 + 現状では標準入出力を介した方法が一般的です。コマンドラインから実際に + 関数を実行してみれば、挙動をすべて把握することが可能です。 + </p> + + <h2>入出力のフォーマット</h2> + <p> + PRIMEの入出力フォーマットは、基本的には改行とタブで区切られたテキスト + データです。 + </p> + + <h3>入力フォーマット</h3> + <p> + 行末に改行を含む一行が基本単位です。一行には、関数とその関数の引数が + 含まれます。関数と引数のそれぞれはタブで区切られます。 + </p> + <p> + たとえば、ヘルプを表示する場合は "help\n" (引数なし) と、 + カタカナ入力モードにするには "edit_set_mode\t1\tkatakana\n" と入力します。 + ("1" は後述するセッション ID) + </p> + <p> + 以降、可読性のために "edit_set_mode\t1\tkatakana\n" を + "edit_set_mode ( '1', 'katakana' )" のように表します。 + </p> + + <h3>出力フォーマット</h3> + <p> + 以下はコマンドラインから実行した場合の出力フォーマットの例です。 + </p> +<pre> +~% prime +version ←入力 +ok +0.9.3 + +taiyaki ←入力 +error +Unknown command: taiyaki +Try `help' for protocol information. + +lookup taiyaki ←入力 +ok +たいやき たいやき priority=10124 part=名詞 base=たいやき basekey=たいやき + +</pre> + <p> + 出力フォーマットも基本的に入力フォーマットと同様に改行とタブで区切られます。 + 出力データは複数行である可能性がありますが、出力データの最終行のみが空行で + あることが保証されています。そのため、空行を検出すれば、データの取得が + 完了したこと判定できます。 + </p> + <p> + 出力データには正常な出力と、エラーの二種類があります。正常な出力は + 最初の行は "ok\n" であり、エラーの場合は "error\n" です。 + </p> + + <h2>全体のながれ</h2> + <p> + 全体のながれとしては、まず最初に、クライアントはクライアントごとの + セッション ID を取得します。その後プリエディションに関するやりとりを + 行います。プリエディションとは、ローマ字からひらがなに変換する部分のことを + 指します。次にメインである単語候補を取得します。そして場合によっては + 単語の学習を行います。 + </p> + + <p> + 処理のながれを擬似的な言語で書き表すと以下のようになります。 + </p> +<pre> +session-id = session_start ( ) +context = "" + +loop { + ユーザから入力文字列 string の取得 + + edit_insert ( session-id, string ) + query = edit_get_query_string ( session-id ) + + set_context ( context ) + words = lookup ( query ) + + words からユーザの選択した単語データ、key value part suffix rest を取得 + + learn_word ( key value part context suffix rest ) + edit_erase ( session-id ) + + context = value + suffix + rest +} + +session_end ( session-id ) +</pre> + + <h2>セッション</h2> + <p> + PRIME サーバは、セッション ID を用いてクライアントごとのデータを管理します。 + セッション ID はクライアントごとに一意に割り当てられた文字列です。 + </p> + <p> + 現在セッションは、プリエディションにのみ利用されていますが、今後、 + 単語候補の取得など全般に渡って利用される予定です。 + </p> + + <h3>セッションの開始・終了</h3> + <dl class="list"> + <dt>session_start ()</dt> + <dd>セッションを開始し、セッション ID を返す。</dd> + + <dt>session_end ( session-id )</dt> + <dd>session-id に割り当てられたセッションを終了し、 + 内部データを破棄する。</dd> + </dl> + + <h2>プリエディション</h2> + <p> + プリエディションとは、ローマ字からひらがなに変換する部分のことを指します。 + PRIME 0.8.5 / 0.9.3 以降では、サーバ側がこの機能を受け持ちます。 + 従来と同様にクライアント側で行うことも可能です。 + </p> + + <h3>プリエディションのデータ取得</h3> + <dl class="list"> + <dt>edit_get_preedition ( session-id )</dt> + <dd>session-id に対応するセッションの現在のプリエディションを返す。 + 返り値のフォーマットは、タブで区切られた 3 つの値で、それぞれ + [(カーソルより左の文字列), (カーソルの右側にある一文字), (右側の残り)] + である。例えば、"tai[tab]y[tab]aki" や "taiyaki[tab][tab]" などが返る。 + </dd> + + <dt>edit_get_query_string ( session-id )</dt> + <dd>単語候補を取得する関数に渡すための文字列を返す。</dd> + </dl> + + <h3>文字列の編集</h3> + <p> + プリエディションの編集用関数を実行したあとも、edit_get_preedition と + 同様の返り値が返ります。 + </p> + <dl class="list"> + <dt>edit_insert ( session-id, input )</dt> + <dd>session-id に対応するセッションに、文字列 input を入力する。</dd> + + <dt>edit_delete ( session-id )</dt> + <dd>カーソル位置の右側にある一文字を削除する。</dd> + + <dt>edit_backspace ( session-id )</dt> + <dd>カーソル位置の左側にある一文字を削除する。</dd> + + <dt>edit_erase ( session-id )</dt> + <dd>プリエディションの文字列をすべて削除する。</dd> + </dl> + + <h3>カーソルの移動</h3> + <p> + カーソル移動を行った後も、edit_get_preedition と同様の返り値が返ります。 + </p> + <dl class="list"> + <dt>edit_cursor_right ( session-id )</dt> + <dd>カーソルを右にひとつ移動させる。</dd> + + <dt>edit_cursor_left ( session-id )</dt> + <dd>カーソルを左にひとつ移動させる。</dd> + + <dt>edit_cursor_right_edge ( session-id )</dt> + <dd>カーソルを右端に移動させる。</dd> + + <dt>edit_cursor_left_edge ( session-id )</dt> + <dd>カーソルを左端に移動させる。</dd> + </dl> + + <h3>入力モードの変更</h3> + <p> + 入力モードとは、ひらがな入力、カタカナ入力、直接入力などのことです。 + </p> + <dl class="list"> + <dt>edit_set_mode ( session-id mode )</dt> + <dd>入力モードを変更する。入力モードには、 + default (ひらがな入力), katakana, half_katakana,wide_ascii, raw (直接入力) + が指定可能。 + </dd> + </dl> + + <h2>変換処理</h2> + <p> + メインの処理となる部分です。候補データの文字列処理が面倒ではありますが、 + 内容自体は平易です。 + </p> + + <h3>出力データの例</h3> + <pre> +lookup hennkann ←入力 +ok +へんかんが 変換が priority=15867 part=未知語 base=変換が basekey=へんかんが +へんかん 変換 priority=15867 part=サ行(する)&名詞 base=変換 basekey=へんかん + </pre> + + <h3>出力フォーマット</h3> + <p> + 出力フォーマットは一行につき一候補で、優先順位の高い順位に + ソートされています。 + </p> + <p> + 各行はタブによってデータが区切られています。各データは、第一項が候補の読み、 + 第二項が変換結果です。それ以降のデータは "キー=データ" というように + キーとデータが "=" で結ばれています。データの順番は保証されていません。 + これらのデータは学習で使用しますので、いったんクライアント側で + 保持しておく必要があります。(今後はセッションで管理され、 + クライアント側での管理は必要なくなる予定です)。 + </p> + <p> + 第三項以降のデータで、"usage" や "annotation" というキーが含まれる + 単語候補もあります。 "usage" は「看ると診るの違い」といった単語の用例を、 + "annotaion" は「ー(長音)と-(半角マイナス)の違い」といった文字種を表します。 + 活用しなくても実害はありません。残りのデータは、現在のところ、主に + 学習用に使われます。 + </p> + + <h3>コンテキスト</h3> + <p> + PRIME は単語候補を予測するために、コンテキストの提供をクライアントに + 要求します。コンテキストは、現時点では直前に入力した単語の文字列と + 同じですが、将来的には使用しているアプリケーションなども + 受け付けるようにする予定です。 + </p> + <p> + uim では context が別の意味で使用されていますので、uim のソースコードでは + prime-context という名前で、このコンテキストが処理されています。 + </p> + + <h3>関数の説明</h3> + <dl class="list"> + <dt>lookup ( query )</dt> + <dd>単語候補を取得する、出力データの数は 1, 2 件。</dd> + + <dt>lookup_all ( query )</dt> + <dd>すべての単語候補を取得する。</dd> + + <dt>set_context ( context )</dt> + <dd>コンテキストを設定する。コンテキストは直前に入力した単語と、 + 現時点では、同意。</dd> + + <dt>reset_context ( )</dt> + <dd>コンテキストをリセットする。</dd> + </dl> + + <h2>単語の学習</h2> + <p> + 単語の学習では、変換処理の時に取得したデータを利用します。 + 単語候補に含まれる、basekey, base, part, conjugation, rest と + コンテキストを引数に指定します。 + </p> + <p> + 単語を新規に登録する場合と、学習の場合との違いはありません。 + </p> + + <h3>関数の説明</h3> + <dl class="list"> + <dt>learn_word ( key value part context suffix rest )</dt> + <dd>単語を学習する。 + <table> + <tbody> + <tr><th>key</th> <td>語幹の読み (basekey)</td></tr> + <tr><th>base</th> <td>語幹 (base)</td></tr> + <tr><th>part</th> <td>品詞</td></tr> + <tr><th>context</th><td>コンテキスト</td></tr> + <tr><th>suffix</th> <td>送りがな (conjugation)</td></tr> + <tr><th>rest</th> <td>送りがな以降の文字列 (rest)</td></tr> + </tbody> + </table> + 引数が分かりにくいので、修正される予定です。 + </dd> + </dl> + +<!-- Footer ======================================== --> + <hr> + <div class="note"> + [ + <a href="index.html">ホーム</a> + | + <a href="prime.html">PRIME とは</a> + | + <a href="install.html">インストール</a> + | + <a href="usage.html">使い方</a> + | + <a href="dictionary.html">単語辞書</a> + | + <a href="wiki/">Wiki</a> + | + <a href="emacs/">Emacs クライアント</a> + | + 通信プロトコル + ] + </div> + + <div class="logo" align="right"> + <img src="http://www.taiyaki.org/taiyaki.png" alt="www.taiyaki.org" + id="taiyaki" border="0"> + </div> + <div class="id" align="right"> + 小松 弘幸 <komat****@taiya*****><br> + $Id: protocol.html,v 1.1 2004/12/10 14:42:28 komatsu Exp $ + </div> +<!-- End of Footer ======================================== --> + + </body> +</html> +<!-- +Local variables: +sgml-omittag: nil +sgml-shorttag: nil +sgml-indent-step: 1 +sgml-indent-data: t +End: +--> Index: prime/doc/prime.html diff -u prime/doc/prime.html:1.5 prime/doc/prime.html:1.6 --- prime/doc/prime.html:1.5 Mon Jun 14 06:23:34 2004 +++ prime/doc/prime.html Fri Dec 10 23:42:28 2004 @@ -24,6 +24,8 @@ <a href="wiki/">Wiki</a> | <a href="emacs/">Emacs クライアント</a> + | + <a href="protocol.html">通信プロトコル</a> ] </div> @@ -174,6 +176,8 @@ <a href="wiki/">Wiki</a> | <a href="emacs/">Emacs クライアント</a> + | + <a href="protocol.html">通信プロトコル</a> ] </div> @@ -183,7 +187,7 @@ </div> <div class="id" align="right"> 小松 弘幸 <komat****@taiya*****><br> - $Id: prime.html,v 1.5 2004/06/13 21:23:34 komatsu Exp $ + $Id: prime.html,v 1.6 2004/12/10 14:42:28 komatsu Exp $ </div> <!-- End of Footer ======================================== --> Index: prime/doc/install.html diff -u prime/doc/install.html:1.14 prime/doc/install.html:1.15 --- prime/doc/install.html:1.14 Thu Nov 18 20:35:34 2004 +++ prime/doc/install.html Fri Dec 10 23:42:28 2004 @@ -24,6 +24,8 @@ <a href="wiki/">Wiki</a> | <a href="emacs/">Emacs クライアント</a> + | + <a href="protocol.html">通信プロトコル</a> ] </div> @@ -356,6 +358,8 @@ <a href="wiki/">Wiki</a> | <a href="emacs/">Emacs クライアント</a> + | + <a href="protocol.html">通信プロトコル</a> ] </div> @@ -365,7 +369,7 @@ </div> <div class="id" align="right"> 小松 弘幸 <komat****@taiya*****><br> - $Id: install.html,v 1.14 2004/11/18 11:35:34 komatsu Exp $ + $Id: install.html,v 1.15 2004/12/10 14:42:28 komatsu Exp $ </div> <!-- End of Footer ======================================== --> Index: prime/doc/index.html diff -u prime/doc/index.html:1.31 prime/doc/index.html:1.32 --- prime/doc/index.html:1.31 Sun Aug 29 21:49:29 2004 +++ prime/doc/index.html Fri Dec 10 23:42:28 2004 @@ -24,44 +24,85 @@ <a href="wiki/">Wiki</a> | <a href="emacs/">Emacs クライアント</a> + | + <a href="protocol.html">通信プロトコル</a> ] </div> <h2>最新版</h2> + <p> + prime-0.8.5 と prime-0.9.3 のインストールには、suikyo-2.0.0 の + インストールも必要になります。また、効果的な活用のために、最新版の + クライアントと単語辞書のインストールもお勧めします。 + </p> + <h3>prime (PRIME サーバ)</h3> <ul> - <li><a href="http://prime.sourceforge.jp/src/prime-0.8.4.tar.gz"> - Ver 0.8.4</a>: + <li><a href="http://prime.sourceforge.jp/src/prime-0.8.5.tar.gz"> + Ver 0.8.5 (安定版)</a>: <ul> - <li>sudo による実行時に、ホームディレクトリが正しく取得されない - 問題を修正</li> - <li>T-Code 入力で、記号が正しくマスクされない問題を修正</li> + <li><em>要 suikyo-2.0.0</em></li> + <li>プリエディット機能の大幅な強化</li> + <li>単語の用例を表示 (要 prime-dict 0.8.5)</li> + </ul> + </li> + <li><a href="http://prime.sourceforge.jp/src/prime-0.9.3.tar.gz"> + Ver 0.9.3 (開発版)</a>: + <ul> + <li><em>要 suikyo-2.0.0</em></li> + <li>プリエディット機能の大幅な強化</li> + <li>単語の用例を表示 (要 prime-dict 0.8.5)</li> + <li>UTF-8, Shift_JIS への対応 (ベータ版)</li> + <li>英文入力用の設定を追加 (アルファ版)</li> + <li>テキストファイルから辞書の作成機能 (アルファ版)</li> </ul> </li> </ul> <h3>prime-dict (辞書)</h3> <ul> - <li><a href="http://prime.sourceforge.jp/src/prime-dict-0.8.4.tar.gz"> - Ver 0.8.4</a>: + <li><a href="http://prime.sourceforge.jp/src/prime-dict-0.8.5.tar.gz"> + Ver 0.8.5</a>: <ul> <li>SKK Openlab 辞書を最新版に更新</li> + <li>cannadic 辞書を最新版に更新</li> <li>PRIME 辞書を最新版に更新</li> - <li>語彙数は 4,500語増えて 25万2,900語へ</li> + <li>用例項目の追加</li> + <li>語彙数は 2,800語増えて 25万5,700語へ (7.0MB)</li> </ul> </li> </ul> <h3>prime-el (Emacs クライアント)</h3> <ul> - <li><a href="http://prime.sourceforge.jp/src/prime-el-1.4.2.tar.gz"> - Ver 1.4.2</a>: + <li><a href="http://prime.sourceforge.jp/src/prime-el-1.5.0.tar.gz"> + Ver 1.5.0</a>: + <ul> + <li><em>要 prime-0.8.5 or prime-0.9.3</em></li> + <li>プリエディット機能の大幅な強化</li> + <li>単語の用例を表示 (要 prime-dict 0.8.5)</li> + </ul> + </li> + </ul> + + <h3>uim-prime (uim クライアント)</h3> + <p> + uim クライアントは、本家 uim でも配布されていますが、リリースのタイミングが + 異なるため、こちらでも最新版の prime.scm を配布しています。 + uim 本体をインストールする必要もありますのでご注意ください。 + </p> + <ul> + <li><a href="http://prime.sourceforge.jp/src/prime_2004-12-09.scm"> + 2004-12-09 版</a>: <ul> - <li>UI の細かい設定項目を追加</li> + <li><em>要 prime-0.8.5 or prime-0.9.3</em></li> + <li>プリエディット機能の大幅な強化</li> + <li>単語の用例を表示 (要 prime-dict 0.8.5)</li> </ul> </li> </ul> + <h2>予測入力とは</h2> <p> PRIME は @@ -205,7 +246,28 @@ <h2>更新履歴</h2> <dl> - <dt>Ver 0.8.4</a>(2004-08-29)</dt> + <dt>Ver 0.8.5 (2004-12-09)</dt> + <dd> + <ul> + <li><em>要 suikyo-2.0.0</em></li> + <li>プリエディット機能の大幅な強化</li> + <li>単語の用例を表示 (要 prime-dict 0.8.5)</li> + </ul> + </dd> + + <dt>Ver 0.9.3 (2004-12-09)</dt> + <dd> + <ul> + <li><em>要 suikyo-2.0.0</em></li> + <li>プリエディット機能の大幅な強化</li> + <li>単語の用例を表示 (要 prime-dict 0.8.5)</li> + <li>UTF-8, Shift_JIS への対応 (ベータ版)</li> + <li>英文入力用の設定を追加 (アルファ版)</li> + <li>テキストファイルから辞書の作成機能 (アルファ版)</li> + </ul> + </dd> + + <dt>Ver 0.8.4 (2004-08-29)</dt> <dd> <ul> <li>sudo による実行時に、ホームディレクトリが正しく取得されない @@ -214,14 +276,14 @@ </ul> </dd> - <dt>Ver 0.8.3.1</a>(2004-06-24)</dt> + <dt>Ver 0.8.3.1 (2004-06-24)</dt> <dd> <ul> <li>学習辞書が削除されてしまうバグを修正</li> </ul> </dd> - <dt>Ver 0.8.3(2004-06-06)</dt> + <dt>Ver 0.8.3 (2004-06-06)</dt> <dd> <ul> <li>uim でのバグを修正</li> @@ -336,6 +398,8 @@ <a href="wiki/">Wiki</a> | <a href="emacs/">Emacs クライアント</a> + | + <a href="protocol.html">通信プロトコル</a> ] </div> <div class="logo" align="right"> @@ -344,7 +408,7 @@ </div> <div class="id" align="right"> 小松 弘幸 <komat****@taiya*****><br> - $Id: index.html,v 1.31 2004/08/29 12:49:29 komatsu Exp $ + $Id: index.html,v 1.32 2004/12/10 14:42:28 komatsu Exp $ </div> <!-- End of Footer ======================================== --> Index: prime/doc/dictionary.html diff -u prime/doc/dictionary.html:1.4 prime/doc/dictionary.html:1.5 --- prime/doc/dictionary.html:1.4 Mon Jun 14 06:23:34 2004 +++ prime/doc/dictionary.html Fri Dec 10 23:42:28 2004 @@ -24,6 +24,8 @@ <a href="wiki/">Wiki</a> | <a href="emacs/">Emacs クライアント</a> + | + <a href="protocol.html">通信プロトコル</a> ] </div> @@ -124,6 +126,8 @@ <a href="wiki/">Wiki</a> | <a href="emacs/">Emacs クライアント</a> + | + <a href="protocol.html">通信プロトコル</a> ] </div> @@ -133,7 +137,7 @@ </div> <div class="id" align="right"> 小松 弘幸 <komat****@taiya*****><br> - $Id: dictionary.html,v 1.4 2004/06/13 21:23:34 komatsu Exp $ + $Id: dictionary.html,v 1.5 2004/12/10 14:42:28 komatsu Exp $ </div> <!-- End of Footer ======================================== -->