header(); ?>

ローマ字ひらがな変換ライブラリ suikyo for Ruby

suikyo 「水鏡」とは

suikyo は決定性オートマトンに基づいて, 文字列の変換を行うライブラリです. 主には「ローマ字ひらがな変換」に使用されます. 例えば "suikyou" という 文字列から "すいきょう" と変換を行なったり, 逆に "すいきょう" から "suikyou" に変換することが可能です.

このページ内容は Ruby 用ライブラリの説明です. suikyo 全般のページも参照して下さい.

サンプルコード

#!/usr/bin/env ruby

require 'suikyo/suikyo'

suikyo = Suikyo.new
suikyo.table.loadfile("romaji")

### 普通にローマ字をひらがなに変換する.
hiragana = suikyo.convert("suikyou ")
puts hiragana
# => "すいきょう"

## " " 空白は入力の区切りと解釈されます.
hiragana = suikyo.convert("shin")
puts hiragana
# => しn
hiragana = suikyo.convert("shin ")
puts hiragana
# => しん
hiragana = suikyo.convert("shin ai")
puts hiragana
# => しんあい

### 語尾が確定していない場合は, 取りうる候補を配列で返す.
(hiragana, hiragana_array) = suikyo.expand("suiky")
puts hiragana
# => "すいky"
puts hiragana_array.join(", ")
# => "すいきゃ, すいきょ, すいきぇ, すいきぃ, すいきゅ"

API の説明

suikyo を使うには "require 'suikyo/suikyo'" を行う必要があります.

Suikyo クラス

suikyo のメインとなるクラスです. convert メソッドと expand メソッドを 用いて入力文字列を変換します.

Suikyo.new ([table])
クラス Suikyo のインスタンスを作成します. table には, suikyo の変換ルールを示すクラス SuikyoTable のインスタンスを 指定可能です. table を指定しない場合は, 変換ルールが空の SuikyoTable のインスタンスが 作成されます.
Suikyo#convert(pattern[, table])
pattern に table の変換ルールに従って変換します.
Suikyo#expand(pattern[, table])
pattern に table の変換ルールに従って変換します. pattern の末端が変換の途中で終わっていた場合, 取りうる候補を配列にして 返します. 返り値は Suikyo#convert の結果と, 取りうる候補の配列から構成 された配列です.
(hiragana, hiragana_array) = suikyo.expand("suiky")
puts hiragana
# => "すいky"
puts hiranaga_array.join(", ")
# => "すいきゃ, すいきょ, すいきぇ, すいきぃ, すいきゅ"
Suikyo.table
デフォルトで使用する変換ルールを返します. 返り値は SuikyoTable クラスのインスタンスです.

SuikyoTable クラス

SuikyoTable クラスは, 変換ルールを格納します. loadfile メソッドでファイルからまとめてルールを読み込むほか, set メソッドでひとつずつ設定することが可能です.

SuikyoTable.new
クラス SuikyoTable のインスタンスを作成します.
SuikyoTable#loadfile (filename[, tablepath])
変換ルールのフォーマット で記述されたファイル filename を読み込みます. tablepath が省略された場合は, 定数 SUIKYO_TABLE_PATH がファイルのパスに なります.
table = SuikyoTable.new
table.loadfile ("english.kpdef", "/tmp")
SuikyoTable#set (string, result[, cont])
「入力データ」・「変換データ」・「保留データ」を指定して, 変換ルールを追加します. 各データについては 変換ルールのフォーマット を参照して下さい.

SuikyoTable2 クラス

SuikyoTable2 クラスは SuikyoTable クラスのサブクラスです. SuikyoTable との違いは, SuikyoTable2 は入力文字列の 大文字と小文字の違いに寛容なことです. SuikyoTable2 では 変換ルールにない入力は, 大文字と小文字の違いを無視して変換します.

table1 = SuikyoTable.new
table1.loadfile("romaji")
suikyo1 = Suikyo.new(table1)
puts suikyo1.convert("SuIKyoU")
# => "SうIKよU"

table2 = SuikyoTable2.new
table2.loadfile("romaji")
suikyo2 = Suikyo.new(table2)
puts suikyo2.convert("SuIKyoU")
# => "すいきょう"

Suikyo クラスがデフォルトで作成する変換テーブルは SuikyoTable2 の インスタンスです.

SuikyoComposer

SuikyoComposer は Suikyo を活用した、かな漢字変換用のプリエディット ライブラリです。予測入力システム PRIME は SuikyoComposer を利用して プリエディット機能を実現しています。

SuikyoComposer のサンプルコード

#!/usr/bin/env ruby

$KCODE= 'e'

require 'suikyo/suikyo-composer'

class TestSuikyo
  def initialize ()
    table = ( ARGV[0] or "romaji" )

    @suikyo = SuikyoComposer.new()
    @suikyo.set_table(table)
    @suikyo.set_reverse_table(table + "_reverse")
    case table
    when "romaji" then
      @suikyo.hybrid_typing = true
    when "tcode" then
      @suikyo.mask = true
    end
  end

  def edit (string)
    if string.index("^") == 0 then
      string[1..-1].split(//).each { | command |
        case ( command )
        when "b" then
          @suikyo.cursor_left()
        when "a" then
          @suikyo.cursor_left_edge()
        when "f" then
          @suikyo.cursor_right()
        when "e" then
          @suikyo.cursor_right_edge()
        when "h" then
          @suikyo.edit_backspace()
        when "d" then
          @suikyo.edit_delete()
        when "z" then
          @suikyo.undo()
        when "1" then
          @suikyo.set_mode_hybrid()
        when "6" then  # F6
          @suikyo.set_mode_default()
        when "7" then  # F7
          @suikyo.set_mode_katakana()
        when "8" then  # F8
          @suikyo.set_mode_half_katakana()
        when "9" then  # F9
          @suikyo.set_mode_wide_ascii()
        when "0" then  # F10
          @suikyo.set_mode_raw()
        when "-" then
          @suikyo.edit_erase()
        when "!" then
          p @suikyo.edit_get_expansion()
        when "=" then
          p @suikyo.edit_get_preediting_string()
        when "?" then
          p @suikyo.edit_get_query_string()
        end
      }
    else
      @suikyo.edit_insert(string)
    end
    @suikyo.edit_display()
  end

  def main ()
    loop {
      print "> "
      line = $stdin.gets
      line.chomp!
      edit(line)
    }
  end
end

test = TestSuikyo.new()
test.main()

インストール

suikyo 全般のページを参照して下さい.

更新履歴

Ver 1.3.1 (2004-01-31)
2003-04-25
2003-04-14
2002-11-23
footer(); ?>
小松 弘幸 <komatsu@taiyaki.org>
$Id: index.html,v 1.3 2004/12/10 11:23:56 komatsu Exp $