PRIMEの通信プロトコル

[ ホーム | PRIME とは | インストール | 使い方 | 単語辞書 | Wiki | Emacs クライアント | 通信プロトコル ]

このページでは、PRIMEのクライアントを作成することを目的にした 通信プロトコルの説明します。

はじめに

クライアントが PRIME サーバと通信する方法はいくつかの方法がありますが、 現状では標準入出力を介した方法が一般的です。コマンドラインから実際に 関数を実行してみれば、挙動をすべて把握することが可能です。

入出力のフォーマット

PRIMEの入出力フォーマットは、基本的には改行とタブで区切られたテキスト データです。

入力フォーマット

行末に改行を含む一行が基本単位です。一行には、関数とその関数の引数が 含まれます。関数と引数のそれぞれはタブで区切られます。

たとえば、ヘルプを表示する場合は "help\n" (引数なし) と、 カタカナ入力モードにするには "edit_set_mode\t1\tkatakana\n" と入力します。 ("1" は後述するセッション ID)

以降、可読性のために "edit_set_mode\t1\tkatakana\n" を "edit_set_mode ( '1', 'katakana' )" のように表します。

出力フォーマット

以下はコマンドラインから実行した場合の出力フォーマットの例です。

~% prime
version          ←入力
ok
0.9.3

taiyaki          ←入力
error
Unknown command: taiyaki
Try `help' for protocol information.

lookup  taiyaki  ←入力
ok
たいやき        たいやき        priority=10124  part=名詞       base=たいやき  basekey=たいやき

出力フォーマットも基本的に入力フォーマットと同様に改行とタブで区切られます。 出力データは複数行である可能性がありますが、出力データの最終行のみが空行で あることが保証されています。そのため、空行を検出すれば、データの取得が 完了したこと判定できます。

出力データには正常な出力と、エラーの二種類があります。正常な出力は 最初の行は "ok\n" であり、エラーの場合は "error\n" です。

全体のながれ

全体のながれとしては、まず最初に、クライアントはクライアントごとの セッション ID を取得します。その後プリエディションに関するやりとりを 行います。プリエディションとは、ローマ字からひらがなに変換する部分のことを 指します。次にメインである単語候補を取得します。そして場合によっては 単語の学習を行います。

処理のながれを擬似的な言語で書き表すと以下のようになります。

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 )

セッション

PRIME サーバは、セッション ID を用いてクライアントごとのデータを管理します。 セッション ID はクライアントごとに一意に割り当てられた文字列です。

現在セッションは、プリエディションにのみ利用されていますが、今後、 単語候補の取得など全般に渡って利用される予定です。

セッションの開始・終了

session_start ()
セッションを開始し、セッション ID を返す。
session_end ( session-id )
session-id に割り当てられたセッションを終了し、 内部データを破棄する。

プリエディション

プリエディションとは、ローマ字からひらがなに変換する部分のことを指します。 PRIME 0.8.5 / 0.9.3 以降では、サーバ側がこの機能を受け持ちます。 従来と同様にクライアント側で行うことも可能です。

プリエディションのデータ取得

edit_get_preedition ( session-id )
session-id に対応するセッションの現在のプリエディションを返す。 返り値のフォーマットは、タブで区切られた 3 つの値で、それぞれ [(カーソルより左の文字列), (カーソルの右側にある一文字), (右側の残り)] である。例えば、"tai[tab]y[tab]aki" や "taiyaki[tab][tab]" などが返る。
edit_get_query_string ( session-id )
単語候補を取得する関数に渡すための文字列を返す。

文字列の編集

プリエディションの編集用関数を実行したあとも、edit_get_preedition と 同様の返り値が返ります。

edit_insert ( session-id, input )
session-id に対応するセッションに、文字列 input を入力する。
edit_delete ( session-id )
カーソル位置の右側にある一文字を削除する。
edit_backspace ( session-id )
カーソル位置の左側にある一文字を削除する。
edit_erase ( session-id )
プリエディションの文字列をすべて削除する。

カーソルの移動

カーソル移動を行った後も、edit_get_preedition と同様の返り値が返ります。

edit_cursor_right ( session-id )
カーソルを右にひとつ移動させる。
edit_cursor_left ( session-id )
カーソルを左にひとつ移動させる。
edit_cursor_right_edge ( session-id )
カーソルを右端に移動させる。
edit_cursor_left_edge ( session-id )
カーソルを左端に移動させる。

入力モードの変更

入力モードとは、ひらがな入力、カタカナ入力、直接入力などのことです。

edit_set_mode ( session-id mode )
入力モードを変更する。入力モードには、 default (ひらがな入力), katakana, half_katakana,wide_ascii, raw (直接入力) が指定可能。

変換処理

メインの処理となる部分です。候補データの文字列処理が面倒ではありますが、 内容自体は平易です。

出力データの例

lookup  hennkann   ←入力
ok
へんかんが      変換が  priority=15867  part=未知語     base=変換が     basekey=へんかんが
へんかん        変換    priority=15867  part=サ行(する)&名詞    base=変換      basekey=へんかん
  

出力フォーマット

出力フォーマットは一行につき一候補で、優先順位の高い順位に ソートされています。

各行はタブによってデータが区切られています。各データは、第一項が候補の読み、 第二項が変換結果です。それ以降のデータは "キー=データ" というように キーとデータが "=" で結ばれています。データの順番は保証されていません。 これらのデータは学習で使用しますので、いったんクライアント側で 保持しておく必要があります。(今後はセッションで管理され、 クライアント側での管理は必要なくなる予定です)。

第三項以降のデータで、"usage" や "annotation" というキーが含まれる 単語候補もあります。 "usage" は「看ると診るの違い」といった単語の用例を、 "annotaion" は「ー(長音)と-(半角マイナス)の違い」といった文字種を表します。 活用しなくても実害はありません。残りのデータは、現在のところ、主に 学習用に使われます。

コンテキスト

PRIME は単語候補を予測するために、コンテキストの提供をクライアントに 要求します。コンテキストは、現時点では直前に入力した単語の文字列と 同じですが、将来的には使用しているアプリケーションなども 受け付けるようにする予定です。

uim では context が別の意味で使用されていますので、uim のソースコードでは prime-context という名前で、このコンテキストが処理されています。

関数の説明

lookup ( query )
単語候補を取得する、出力データの数は 1, 2 件。
lookup_all ( query )
すべての単語候補を取得する。
set_context ( context )
コンテキストを設定する。コンテキストは直前に入力した単語と、 現時点では、同意。
reset_context ( )
コンテキストをリセットする。

単語の学習

単語の学習では、変換処理の時に取得したデータを利用します。 単語候補に含まれる、basekey, base, part, conjugation, rest と コンテキストを引数に指定します。

単語を新規に登録する場合と、学習の場合との違いはありません。

関数の説明

learn_word ( key value part context suffix rest )
単語を学習する。
key 語幹の読み (basekey)
base 語幹 (base)
part 品詞
contextコンテキスト
suffix 送りがな (conjugation)
rest 送りがな以降の文字列 (rest)
引数が分かりにくいので、修正される予定です。

[ ホーム | PRIME とは | インストール | 使い方 | 単語辞書 | Wiki | Emacs クライアント | 通信プロトコル ]
小松 弘幸 <komatsu@taiyaki.org>
$Id: protocol.html,v 1.1 2004/12/10 14:42:28 komatsu Exp $