JP3506742B2 - W/nおよびn/wマッピング法 - Google Patents

W/nおよびn/wマッピング法

Info

Publication number
JP3506742B2
JP3506742B2 JP26742893A JP26742893A JP3506742B2 JP 3506742 B2 JP3506742 B2 JP 3506742B2 JP 26742893 A JP26742893 A JP 26742893A JP 26742893 A JP26742893 A JP 26742893A JP 3506742 B2 JP3506742 B2 JP 3506742B2
Authority
JP
Japan
Prior art keywords
suffix
data
branch
data item
word
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Expired - Lifetime
Application number
JP26742893A
Other languages
English (en)
Other versions
JPH07129367A (ja
Inventor
エム カプラン ロナルド
ケイ マーティン
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Xerox Corp
Original Assignee
Xerox Corp
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Xerox Corp filed Critical Xerox Corp
Priority to JP26742893A priority Critical patent/JP3506742B2/ja
Publication of JPH07129367A publication Critical patent/JPH07129367A/ja
Application granted granted Critical
Publication of JP3506742B2 publication Critical patent/JP3506742B2/ja
Anticipated expiration legal-status Critical
Expired - Lifetime legal-status Critical Current

Links

Landscapes

  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)

Description

【発明の詳細な説明】
【0001】
【産業上の利用分野】本発明は、ワードをナンバーへ、
そしてナンバーをワードへマッピングする方法に関する
ものである。
【0002】
【従来の技術】Lucchesi, C.L. and Kowaltowski, T.,
“Applications of Finite AutomataRepresenting Larg
e Vocabularies,”Software-Practice and Experience,
Vol.23(1),January 1993, pp.15-30 に、効率的なス
ペルチェッカーを具体化する問題が動機となって、非常
に大量の語彙を最小非循環決定論的な有限オートマトン
に圧縮する技法が記載されている。図4に、数個の英語
の動詞のすべての形に関する上記オートマトンが示され
ている。オートマトンを構成する技法は、18頁の冒頭
に記載されており、最小化ステップを含んでいる。デー
タ構造は19〜20頁に記述されている。各状態はN個
のエントリをもつ配列として表される。ここで、Nはア
ルファベットのサイズである。たいていのエントリは実
在しない遷移に対応しており、従って実在するエントリ
がぶつからないやり方で、状態配列をシフトさせ、オー
バラップさせることができる。各状態には、実在する遷
移を選択する1個のNビットベクトルが付いている。1
つ、2つ、または3つの遷移をもつ状態が非常に大きな
パーセンテージを占めるので、配列のパッキングは、ほ
とんどいつも最適の結果が得られるグレーディ( greed
y )アルゴリズムによって行われる。また、個別ビット
ベクトルの数は状態の数よりはるかに少ないので、多く
が共用される。状態配列をパックするほかに、短い(相
対的)および長い(絶対的)状態索引が使用されてい
る。ポルトガル語の場合は、文字から音声区分マークが
取り除かれ、その場所はワードの終止符の後にコード化
される。26〜27頁に、図8〜図10に関する最小完
全ハッシングが記述されている。オートマトンは、各状
態について、その状態から開始し、オーマトンによって
受入れ可能なワードのナンバーを与える整数を有してお
り、2つの簡単な関数が整数1からLの間で1対1の対
応付けを実施する。ここでLは、オートマトンによって
受入れ可能なワードのナンバーであり、そしてワード自
身である。
【0003】
【発明が解決しようとする課題】ディジタルデータ処理
装置においてワードなどの要素列を取り扱うには、ワー
ドをナンバーへマップすることが望ましいことが多い。
その1つの理由は、ワードの長さは大きく異なるけれど
も、ワードのナンバーは、通常、そのワードの文字に関
するディジタルコードより短い一定長さの2進数として
ディジタル的に表現することができ、2進数の取扱いは
ワード自身を取り扱うよりもはるかに効率がよいからで
ある。ワードをナンバーへマップするもう1つの理由
は、そのワードに関する情報にアクセスするアドレスす
なわちポインタが得られるからである。ナンバーからワ
ードへマップして戻すことも、同様に望ましいことが多
い。
【0004】
【課題を解決するための手段】本発明は、ワードからナ
ンバーへ(W/Nと略す)およびナンバーからワードへ
(N/Wと略す)マッピングをどのように効率的に実行
するかの問題を解決するものである。本発明は、ワード
のリストと、ナンバーの稠密セット(それぞれが1つの
ワードに固有のナンバーである)との間の効率的なW/
NおよびN/Wマッピングを可能にする技法を発見した
ことに基づいている。ここで使用する用語「マッピン
グ」は、W/NおよびN/Wマッピングを含むことがあ
る。
【0005】ワードリストとナンバーの稠密セットとの
間のW/NまたはN/Wマッピングは、ワードリスト内
のワードを表すデータを順次走査して、横切ったワード
を正確にカウントし続けることによって実施できる。W
/Nマッピングの場合は、順序付きワードリストを表す
データを走査すると同時に、ワードを探索し、接尾辞語
尾をカウントし続けることができる。N/Wマッピング
の場合は、順序付きワードリストを表すデータを走査す
ると同時に、接尾辞語尾をカウントし続け、かつ現ワー
ドを記録し続けることができる。
【0006】マッピングをより効率的に行うために、順
序付きワードリストを表すデータの部分をスキップする
ことを許す情報が与えられる。例えば、もしデータが分
岐を含むように構成されていれば、情報は分岐のスキッ
プを許すことができる。技法は、順序付きワードリスト
を表すデータ内に分岐データを含ませることによって実
施することができる。
【0007】分岐データは、第1セットの接尾辞語尾を
表す第1接尾辞データのロケーションを表す分岐選択情
報を含んでいる。分岐データは、さらに、前記第1セッ
ト内の接尾辞語尾の数を表す分岐スキップ情報を含んで
いる。従って、第1セットの接尾辞語尾の1つをもつワ
ードについてマップしているとき、分岐選択情報を使用
して第1接尾辞データへ行くことができる。他方、第2
セットの接尾辞語尾の1つをもつワードについてマップ
しているとき、分岐スキップ情報を使用して、第1接尾
辞データをスキップすると同時に、接尾辞語尾を正確に
カウントし続けることができる。例えば、W/Nマッピ
ングの場合は、もし第1接尾辞データをスキップすれ
ば、分岐スキップ情報が表す数を接尾辞語尾のカウント
に加えることができる。他方、N/Wマッピングの場合
は、マップするナンバーからその数を減分することがで
きる。
【0008】この技法に係るプロダクトは、記憶媒体
と、その記憶媒体に格納されたワードリストデータから
成っている。ワードリストデータは、ワードのリストを
表す。ワードリストデータは、リスト内のワードの接尾
辞語尾を表す複数の接尾辞語尾データ項目を含んでい
る。第1接尾辞語尾データ項目は第1セットの接尾辞語
尾を表し、第2接尾辞語尾データ項目は第2セットの接
尾辞語尾を表す。各接尾辞語尾データ項目はバイトの順
番列を含むことができ、その一部は接尾辞語尾を表す接
尾辞語尾バイトである。
【0009】ワードリストデータは、さらに、分岐デー
タ項目を含んでいる。分岐データ項目は、前述の分岐選
択情報と分岐スキップ情報を含んでいる。例えば、分岐
データ項目は、ワードリストデータ内の分岐点に置かれ
たポインタを含むことができる。ポインタは、一組の接
尾辞語尾に関する情報を含む分岐のロケーションを指示
することができ、分岐内の接尾辞語尾の数をポインタに
付記することができる。あるいは、分岐データ項目は、
参照用テーブル内のエントリにアクセスするため使用で
きるポインタ索引を含むことができる。エントリは、分
岐へのポインタと、分岐内の多数の接尾辞語尾を含んで
いる。
【0010】本技法は、同じの幾つかの分岐をつぶし
て、異なるワードサブリストが共用することができる単
一の分岐にすることによって、記憶空間を減らすように
拡張することができる。分岐データ項目は、共用分岐へ
至ることができる各分岐点に、共用分岐へのポインタな
どの分岐選択情報と、共用分岐内の接尾辞語尾の数など
の分岐スキップ情報とを含んでいる。このデータ構成の
ために、記憶空間を減らすために導入されたポインタ
は、分岐のスキップを可能にし、従って処理時間を短縮
する。
【0011】前に述べた Lucchesi の技法のように、各
セットの接尾辞に関するカウントを格納する必要はな
い。代わりに、通常、接尾辞語尾を含む接尾辞データ項
目を走査して、何個の接尾辞語尾を含むかを決定するこ
とができる。しかし、もし接尾辞データ項目への分岐を
スキップすることが可能であれば、分岐をスキップする
とき接尾辞語尾の数を検索して、その実行カウントを更
新するため使用できるように、接尾辞語尾の数を格納す
ることができる。
【0012】本技法によるW/Nマッピングは、分岐を
スキップし、分岐データ項目内の接尾辞語尾の数を使用
して、例えば、接尾辞語尾の数をカウントに加えること
によって接尾辞語尾の実行カウントを更新することがで
きる。ある接尾辞データ項目の終わりに分岐をスキップ
し、カウントを更新したあと、本技法によるW/Nマッ
ピングは、別の接尾辞データ項目内のバイトの順番列を
を走査し、各接尾辞語尾バイトについて接尾辞語尾のカ
ウントを増分することができる。バイトがマップ中のワ
ードの接尾辞語尾を表すバイトに達したら、接尾辞語尾
のカウントをそのワードのナンバーとして提供すること
ができる。もし分岐データ項目がさらに分岐内の接尾辞
語尾に先行する文字を表すラベル情報を含んでいれば、
W/Nマッピング法は、マップ中のワード内の現文字と
ラベル情報とを比較することによって、分岐をスキップ
するかどうかを決定することができる。
【0013】同様に、本技法によるN/Wマッピング
は、ある接尾辞データ項目への分岐をスキップし、スキ
ップした分岐内の接尾辞語尾の数を使用して、接尾辞語
尾のカウントを更新することができる。この場合には、
カウント(マップ中のナンバーで開始することがある)
から接尾辞語尾の数を減分することができる。もし各接
尾辞データ項目がバイトの順番列を含んでいれば(その
一部は文字を表すラベルバイトである)、本技法は、さ
らに、スタック内のラベルバイトからの文字を格納する
ことによって、現接頭辞を格納することができる。分岐
をスキップし、接尾辞語尾の数を減分した後、本技法
は、別の接尾辞データ項目内のバイトの順番列を走査
し、各接尾辞語尾バイトについて接尾辞語尾のカウント
を減分し、そしてスタック内の現接頭辞を更新すること
ができる。接尾辞語尾のカウントが零に達したとき、ス
タック内の現接頭辞をワードのナンバーとして提供する
ことができる。本技法は、カウントの現在値と分岐内の
接尾辞語尾の数とを比較し、ワードの接尾辞語尾が分岐
内にあるかどうかを決定することによって、分岐をスキ
ップさせるかどうかを決定することができる。
【0014】上に述べた技法は、ワードリストを表すデ
ータを、ワードとナンバーとの間で迅速にマップするこ
とができる形で提供するので都合がよい。時間効率のほ
かに、共用分岐を用いて空間効率を向上させることがで
きる。ワードリストデータは、ワードがマップされるナ
ンバーに基づいて、そのワードに対応付けられた情報を
検索する装置を含むさまざまな用途に使用することがで
きる。また、ワードリストデータは、テキストの圧縮お
よび圧縮解除に使用することもできる。
【0015】
【実施例】
A.概要 マッピング法の概要は、図1および図2から理解するこ
とができる。図1は、15個のワード(dip,dips,dippe
d,dipper,dipping,drip,drips,dripped,dripper,drippi
ng,drop,drops,dropped,dropper,dropping) を含むワー
ドリストの状態遷移図である。図2は、図1のワードリ
スト内のワードを表すワードリストデータを示す。
【0016】図1は、ワードリストの状態遷移図を示
す。図1の各遷移は対応付けられた文字で表示してあ
る。受入れ可能なワードの末尾の文字の後の状態には、
妥当な末尾文字を示す“F”印が付けてある。もし開始
状態10で開始し、受入れ可能なワードの1つの文字を
順次適用すれば、それらは一連の遷移と状態に沿って
“F”印の付いた状態の1つに至るであろう。例えば、
ワード“dip ”は状態16に至る。図1のワードリスト
は、入力ワードが受入れ可能なワードの1つであるかど
うかを決定するのに使用でき、従ってスペルのチェック
や同種の用途に使用することができるであろう。
【0017】図1は、左で始まり、右で終わるとして、
受入れ可能なワードを表現している。この説明におい
て、用語「接頭辞」とは、受入れ可能なワードの最初に
ある文字の任意の組合せをいい、図1においては、状態
10からどれかの状態に至る一連の遷移と状態によって
表現される。従って、開始状態10は、要素をもたない
接頭辞の終わりを表すのに対し、状態16は接頭辞“di
p ”, “drip”, “dop”の終わりを表す。同様に、用
語「接尾辞」とは、受入れ可能な文字列の終わりにある
文字の任意の組合せをいい、図1においては、状態の1
つから“F”印を付けたどれかの状態に至る一連の遷移
と状態によって表現される。従って、分岐状態の終わり
は、要素をもたない接尾辞の始まりを表すのに対し、状
態10はすべての受入れ可能なワードを含む一組の接尾
辞の始まりを表す。
【0018】当然に、図1の各状態は、少なくとも1個
の接頭辞の終わりと、少なくとも1個の接尾辞の始まり
を表すことになる。さらに、“F”印の付いた各状態
は、前に指摘したように、受入れ可能なワードの末尾文
字のすぐ後の状態であるから、少なくとも1個の接尾辞
の終わりを表す。例えば、状態16はワード“dip ”,
“drip”, “dop ”について接尾辞の終わりを表す。
【0019】以下の説明において、用語「接尾辞」と
「接頭辞」は、語根に付けられた接尾辞および接頭辞に
制限されないが、上に述べたような一般的な意味を有す
る。従って、これらの用語は、各ワードの要素が逆順で
あるワードのリストに対しても同様に適用することがで
きるので、ワードの最初の要素をもつ各ワードの端の接
尾辞および接尾辞は、ワードの最後の要素で始まる。
【0020】図1は、効率的に格納したり、使用したり
できるワードリスト表現の幾つかの特徴を明らかにして
いる。決められた状態からの遷移は、直接に、あるいは
他の遷移の一定の組合せを介して、その状態へ戻ること
はないので、図1の表現は非周期的である。これは、有
限数の受入れ可能なワードを保証するので、重要なこと
である。仮にワードリストが無限であったとしても、な
んとかして有限数の受入れ可能なワードを保証すること
によって、例えばワードリスト表現の単一走査内に行う
ことが可能なサイクル数を制限することによって、ワー
ドリストを適切なものにすることができる。
【0021】さらに、図1のワードリスト表現は右側と
左側で共に収束しており、これは接頭辞と接尾辞が多く
の受入れ可能なワードに共通であるかも知れないことを
意味する。このことは重要である。その理由は、以下に
述べる技法が、2つの収束を使用して、ワードリストを
表すデータのサイズを縮小し、同時にリスト内のワード
を固有ナンバーの稠密セットへマップするからである。
例えば、共通の接尾辞は、図1では、状態へ入ってくる
多くの遷移によってそれぞれ表現される。接尾辞“-ps
”と“-s”は、ワード dips、 drips、および drops
に共通の接尾辞である。図1は、さらに、それらの各共
通の接尾辞をつぶして、単一の共用分岐にすることを表
現しており、例えば、接尾辞“-s”は、この接尾辞で終
わる各受入れ可能なワードにつき1回出現するのでな
く、1つの分岐だけに現れる。
【0022】図1のようなワードリスト表現は、マッピ
ングに使用することができる。例えば、文字と一致した
ときナンバーを利用できるように、各受入れ可能なワー
ドの末尾文字をナンバーに対応付けることができるであ
ろう。しかし、各接尾辞は固有のナンバーを有し、従っ
て他のすべての接尾辞と異なるはずであるから、これ
は、図1に示すように共通の接尾辞をつぶして共用分岐
にすることを妨げるであろう。それに加えて、マップす
るナンバーを見つけるため最初にワードリストを探索
し、その後、そのナンバーに至るストリングを見つける
ことによって対応するワードを決定するのであるから、
N/Wマッピングは時間がかかるであろう。
【0023】迅速なW/NおよびN/Wマッピングは、
前に述べた共通の接尾辞をつぶすことを妨げない。ワー
ドの探索のとき通過した接尾辞語尾の数をカウントする
ことによって、ワードをナンバーへマップすることがで
きる。例えば、図1のワードリスト表現において、ワー
ド“dip ”のナンバーは零であるのに対し、ワード“dr
ops ”のナンバーは14である。他方、N/Wマッピン
グは、そのナンバーで開始し、ワードリストデータを通
って走査する際に通過した各接尾辞語尾ごとにその数を
減分することができる。数が零に達すると、走査はワー
ドの接尾辞語尾に達しており、従って走査のとき格納し
た文字に基づいて、そのワードを提供することができ
る。
【0024】W/NおよびN/Wマッピングの場合、も
し各接尾辞語尾を個別にカウントする必要があれば、ワ
ードリストデータのすべての分岐を走査しなければなら
ない。状態12において生じる2つの遷移は、この問題
を示している。第1の遷移“I”は大きな分岐へ至るの
に対し、第2の遷移“R”は別の大きな分岐へ至る。従
って、ワード“drops ”と図1のワードリスト表現とを
比較する場合や、分岐内の接尾辞語尾をカウントするた
め状態12からの第1遷移からぶら下がっているすべて
の分岐を通らなければならない場合は、探索はかなり時
間がかかるであろう。このことは、各状態14,16,
18についても同じである。例えば、状態16は大きな
分岐に至る第1の遷移“P”を有するが、第2の遷移
“S”は、それに至る状態と共に非常に小さい分岐を構
成している。
【0025】分岐をスキップさせるために必要な情報と
分岐内の接尾辞語尾の数をワードリストデータに含ませ
ることによって、分岐をスキップ可能にすることができ
る。そのようにすれば、分岐内の接尾辞語尾をカウント
せずに、接尾辞語尾の数を単に実行カウントに加えた
り、減じたりすることができる。この情報は、走査がス
キップ可能な分岐へ行くか、他の分岐へ行くかの分岐点
であるデータに対応付けることによって、ワードリスト
データに含ませることができる。ここでは「スキップ可
能な分岐」を分岐点の次の分岐と呼び、そして「他の分
岐」を分岐点の代替分岐と呼ぶことにする。一般に、ワ
ードリストデータを探索しているとき、もし探索中のワ
ードからの文字が分岐点内の文字と一致すれば、探索は
次の分岐へ進み、もしそうでなければ、探索は代替分岐
へ進む。それにもかかわらず、分岐点でないデータが次
の分岐をもつことがある。その場合には、もし一致すれ
ば、探索は次の分岐へ進み、もし一致しなければ、探索
は終了する。
【0026】図2は、図1のワードリストについて上記
の特徴を具体化している、格納されたワードリストデー
タを示す。図2において、各アドレスに格納されたデー
タは、通例、図1に示した遷移の1つを表す。従って、
これらのデータの単位は遷移単位と呼ばれる。図2の各
遷移単位として、遷移に対応する文字を表す文字データ
(CHAR: character data )、遷移が接尾辞語尾かどうか
を指示し、遷移が最後の状態に入ることを意味し、従っ
て受入れ可能なワードの末尾文字を表す末尾データ
(F:final data)、遷移単位が次の分岐を有するかど
うかを指示する分岐データの終わり(EOB: end of bran
ch data ) 、および遷移単位で始まる分岐が代替分岐を
有するかどうかを指示する代替データ (ALT: alternati
ve data ) がある。CHAR, F , EOB および ALT データ
は、すべて、各遷移単位について単一バイトにコード化
することができる。あるいは、遷移単位が次の分岐を持
たない場合にのみ、EOB データを、第1のバイトに続く
特別な EOB 値をもつ第2のバイトにコード化すること
ができる。
【0027】図2の PTR 欄には、リストの4つの分岐
点(各分岐点は次の分岐と代替分岐の両方をもつ遷移単
位である)に関連して格納されたポインタが入ってい
る。アドレス2のポインタは状態12からの遷移“I”
に対応する遷移単位に対応付けられているのに対し、ア
ドレス5のポインタは状態14からの遷移“I”に対応
付けられている。アドレス9のポインタは状態16から
の遷移“P”に対応付けられ、そしてアドレス12のポ
インタは状態18からの遷移“E”に対応付けられてい
る。各ポインタは、次の分岐が始まるアドレスを指示し
ているので、次の分岐がスキップされる場合には、ポイ
ンタもまたスキップされる。しかし、次の分岐がスキッ
プされない場合には、ポインタは取り除かれる。このよ
うに、図2に示したポインタは、分岐のスキップを許可
し、かつ次の分岐のロケーションと代替分岐のロケーシ
ョンを指示する役目を果たす。同様に、各ポインタが次
の分岐を指示するのでなく、代替分岐を指示するような
同様なリストを作成することができる。
【0028】マッピング中に分岐のスキップを許可する
ため、スキップ可能な分岐内の接尾辞語尾の数に関する
追加データがワードリストデータに含まれている。スキ
ップ可能な次の分岐をもつ各分岐点に関連して格納され
た図2の F-size 欄内のデータは、次の分岐内の接尾辞
語尾の数を示す。従って、次の分岐をスキップするとき
であっても、次の分岐の F-size を使用して、接尾辞語
尾をカウントし続けることができる。図1に戻って、例
えば、ワード“drops ”は、状態12,14,16から
のそれぞれの遷移“I”,“I”,“P”の次の分岐を
通らずに、迅速にナンバーへマップすることができる。
【0029】ポインタと F-size は、図2のスキップ可
能な次の分岐をもつ各分岐点と共同して多くの機能を果
たす。ポインタは次の分岐のロケーションを示す。ポイ
ンタと F-size は、代替分岐のすぐ前にあるので、ポイ
ンタの位置付けは代替分岐のロケーションを詳細に示
す。従って、分岐点に達したワードリストデータの走査
は、次の分岐について続行することもできるし、あるい
はそれをスキップして、代替分岐について続行すること
もできる。 F-size は、次の分岐内の接尾辞語尾の数を
示すので、次の分岐をスキップするときであっても、接
尾辞語尾をカウントし続けることができる。そのよう
に、本技法は、より高速と、よりコンパクトな記憶装置
が得られる点で独特である。すなわち、より高速は、分
岐のスキップを可能にことによって得られ、よりコンパ
クトな記憶装置は、共通の接尾辞をつぶして共用分岐に
することによって得られる。
【0030】本技法は、指示グラフなどのデータ構造に
応用することができる。その場合、ワードリストデータ
がデータ構造の分岐内に接尾辞語尾をもつようにワード
リストデータを格納することができる。一般に、ワード
リストデータは、各データ単位ごとに、次の分岐および
代替分岐(もしあれば)のロケーションを指示する情
報、データ単位が受入れ可能な接尾辞語尾かどうかを指
示する情報、およびもしデータ単位がスキップ可能な次
の分岐をもつ分岐点であれば、次の分岐内の受入れ可能
な接尾辞語尾の数を表す情報、を有するデータ構造の中
に格納することができる。前に引用した Lucchesi の論
文と異なり、本技法は、すべての遷移を表すデータにカ
ウントが含まれている必要がない。接尾辞語尾のカウン
トは分岐を走査することによって得られるので、分岐の
スキップに使用できる場合だけ、接尾辞語尾のカウント
が含まれている必要がある。
【0031】次に、図2のようなコンパクトなワードリ
ストデータを作成し、格納する技法について説明する。
【0032】B.ワードリストの作成図2のようなワー
ドリストデータを含むプロダクトを作成する際の2つの
重要な要素は、 F-size の決定と、ポインタの割当てで
ある。 F-size を決定する技法を述べたあと、その技法
を使用する装置と、ポインタを割当てて図2のようなワ
ードリストデータを含むプロダクトを作成する多くの別
技法についてある程度詳しく説明する。
【0033】1. F-size の計算 図3は、各スキップ可能な分岐内の接尾辞語尾の数を決
定するのに使用できる再帰的ルーチンを示す。図3のル
ーチンは、詳細には FSM データ構造のコード化に関す
るものである。
【0034】図3のルーチンは、ボックス20におい
て、状態(その状態から FSM データ構造の分岐がぶら
下がることができる)を受け取ることで始まる。図3の
ルーチンの最初の呼出しによって、 FSM データ構造の
開始状態が与えられるが、ルーチンのそれ以後の再帰的
呼出しによって、 FSM データ構造の中に別の状態が与
えられる。その結果、図3のルーチンは、全 FSM デー
タ構造をくまなく走査する。走査後の各状態についての
データ単位は、 F-size を表す情報を含んでいる。 F-s
ize は、その状態からぶら下がっている分岐内に語尾を
有する受入れ可能なワードの数である。従って、図3の
ルーチンは、実行する前に、すべての状態の F-size を
零に初期化する。ルーチンは状態を通過するとき、各状
態の F-size を計算し、さらにその状態を訪問したこと
を示すため各状態内のフラッグを変える。
【0035】次に、図3のルーチンは、ボックス22に
おいて、受け取った状態がこの走査において前に訪問さ
れたかどうかをテストする。もし YES ならば、ルーチ
ンは、ボックス24において、Bで示したルーチンへ走
査結果を戻す。その走査結果は、受け取った状態の F-s
ize (前の訪問時に計算した)である。
【0036】他方、ボックス22のテストで、もし NO
( 前に訪問されていない) であれば、ルーチンは、ボッ
クス26において、状態が、現走査において調べられず
に残った遷移を有するかどうか決定する。もし NO であ
れば、上記のように、ボックス24において、走査結果
を戻す。もし YES であれば、ルーチンは、ボックス2
8において、残っている一番上の遷移の行先である状態
を、A′で図3のルーチンの再帰的呼出しへ提供する。
これは、Aで始まる呼出しになる。その呼出しがBにそ
の結果を戻すと、その結果はB′で呼出しルーチンによ
って受け取られる。呼出しルーチンは、ボックス30に
おいて、走査結果を F-size の前の値に加え、さらに一
番上の遷移の行先状態のFデータを加えることによっ
て、状態のF-size を更新する。Fデータは、行先状態
が接尾辞語尾ならば1であり、さもなければ0である。
次に、ルーチンは、ボックス26へ戻って、走査すべき
遷移が残っているかどうかを決定する。
【0037】図3のルーチンが各状態の遷移を走査する
順序は、それらが各状態のデータ単位内に配列されてい
る順序によって決まる。ワードの対応するナンバーがそ
れらのアルファベット順に対応するようにワードを格納
するため、遷移をアルファベット順に配列することがで
きる。しかし、コンパクトなコード化FSMデータ構造
を得るために、例えば、各遷移の行先様態に入ってくる
遷移の数に従って、またはその遷移における文字の出現
頻度(各状態からの最初の遷移は最小頻度文字を有す
る)に従って、遷移を格納することができる。これらの
技法またはその他の分類方法は、冗長性を除去するのに
役に立つ。また、FSMデータ構造を最小化して冗長性
を除去する方法も用いることができる。
【0038】F-size の計算は、情報を分岐に対応付け
て、分岐が含む接尾辞語尾の数を指示することができる
が、図2に示した形式のコンパクトなワードリストを有
するプロダクトを作成するには、他に多くの処理が必要
である。
【0039】2.ワードリストシステム 図4は、格納されたワードリストを有するプロダクトを
作成するのに使用できるデータ処理装置100を示す。
CPU102は、FSM入力バッファ104を通してコ
ード化するFSMデータ構造を受け取り、コード化が終
了すると、バッファ106を通して出力ファイルを提供
する。コード化のとき、CPU102は、主コード化ル
ーチン112、図3について説明したルーチンを含む状
態単位情報収集サブルーチン114、ポインタサイズ/
インデックス割当てサブルーチン116、遷移単位発生
/位置決めサブルーチン118、ファイル書込みサブル
ーチン120、およびバイト値割当てサブルーチン12
2を含むプログラムメモリ110に格納されたソフトウ
ェアを実行する。このソフトウェアを実行していると
き、CPU102は、多数のテーブルと一緒に、各状態
のデータ単位SUや、その状態の出力遷移に関する情報
TUが格納されている作業データメモリ130に、デー
タを格納したり、そこからデータを探索したりする。
【0040】一般に、図4に示したサブルーチンは、特
願平5-191229号 (1993年8月2日出願)に記述されてい
るように実施することができる。上記特願平5-191229号
に記述されているように、各状態について、状態に入る
ポインタのカウント(InPointers) と、状態のコスト
(状態からぶら下がっているデータ構造の部分を格納す
るのに必要なメモリの量を示す)を含む情報が収集され
る。そのほかに、語根リストと呼ばれるリストは、ポイ
ンタを使用して常時アクセスされる遷移単位のブロック
を有している。
【0041】状態単位情報収集サブルーチン114は、
状態からの最初の出力遷移が特殊な非最終遷移(“epsi
lon ”または「空列」遷移と呼ばれる) かどうかを最初
にテストすることができるルーチンを含んでいる。もし
そのテスト結果が YES であれば、現状態のInPointers
を増分せずに、“epsilon ”遷移の行先の Pointersを
増分する。“epsilon ”遷移は、共用データの量を増す
ために時々使用することができる。このルーチンは、テ
ストして、もし非最終“epsilon ”遷移が検出されれ
ば、この状態のコストを変えないままにしておく。さら
に、このルーチンは、その結果と最大状態コストとを比
較することができる。もし結果が最大コスト以上であ
り、かつこの遷移が現状態の最終遷移でなければ、行先
を直接に語根リストに記載し、行先のコストを短ポイン
タのコストに設定し、行先の InPointers を増分する。
さらに、このルーチンは、状態を訪問した最初に、その
状態からぶら下がっている分岐は、たとえその分岐が共
用分岐であっても、ポインタによらずにインラインで格
納されるという、状態での指示を格納することができ
る。
【0042】3.ポインタ割当てとその他のサブルーチ
ン ポインタサイズおよび索引割当てについては、多くの技
法を個別に使用することができる。
【0043】a.総合ポインタ割当てサブルーチン ポインタサイズおよび索引の割当ては、若干の相違はあ
るが、概して前記特願平5-191229号に記載されている技
法に従うことができる。
【0044】ポインタサイズおよび索引を割り当てるサ
ブルーチンは、さらに、分岐をスキップできるように、
ワードリストデータ内の情報を含んでいる。すなわち、
その情報は、もし有益であれば、ポインタを含むことが
できる。次に述べるように、1つの相違点は、このサブ
ルーチンもまた F-size を考慮に入れていることであ
る。 F-size は、各ポインタに関連して格納され、従っ
てポインタ割当ての決定に影響を及ぼす。
【0045】ポインタを割り当てる前に状態を分類する
際に、サブルーチンは、より低い InPointers を有する
状態の前に、より高い InPointers を有する状態を置く
ことができる。より小さい F-size はより大きな F-siz
e に先行するので、等しい InPointers を有する状態は
F-size によって分類することができる。
【0046】ワードリストデータを格納する際に、もし
指定された分岐をスキップすれば、F-size を検索する
ことができるように、適当な F-size を各3バイトポイ
ンタに関連して格納する。他方、各1または2バイトポ
インタ索引を使用して適当な3バイトポインタと F-siz
e が入っている参照用テーブルにアクセスすることがで
きるので、1または2バイトポインタ索引の各出現に関
連して、 F-size を格納する必要はない。
【0047】もし3バイトポインタのすぐ後にそのポイ
ンタの F-size を格納すれば、各3バイトポインタとそ
の F-size は3以上のバイトを占める。例えば、もし F
-size が1バイトであれば、各3バイトポインタとその
F-size は4バイトの長さになる。同様に、もし F-siz
e が2バイトであり、その2バイトの F-size を指示す
るため F-size の前に、すべて0の追加バイトが挿入さ
れれば、各3バイトポインタとその F-size は6バイト
の長さになる。もっと大きな F-size が必要な場合も、
同様である。すべて0の追加バイトを省略して、4バイ
トの長さや5バイトの長さを使用することもできるであ
ろう。しかし、これには、3バイトポインタに出会うた
びに、最初のバイトのバイト値から長さを復号する必要
があろう。1バイトの F-size に比べて2バイトの F-s
ize は稀であるから、この復号を避けることによって得
られる簡単さは、5バイトの長さでなく6バイトの長さ
を使用する記憶空間コストを補って余りある。以下の検
討において、4バイト、6バイト、およびもっと長いポ
インタと F-size の組合せは、すべて長ポインタとして
取り扱うのに対し、1バイトおよび2バイトのポインタ
索引は短ポインタとして取り扱う。
【0048】遷移単位を生成し、ロケーションを割り当
てるサブルーチンは、各状態の F-size を考慮に入れる
ことができる。ポインタにバイトロケーションを割り当
てるとき、バイトロケーションをコード化データ構造ま
たは適当なポインタテーブルに入れるかどうかを、 F-s
ize に付記することができる。
【0049】ファイルを書き込むサブルーチンの場合
は、決められた遷移の所でワードリストデータに入ると
き、カウントを開始する F-size を含めるように、開始
状態テーブルに書き込むことができる。カウントを開始
する F-size は、その遷移に対応する文字で始まるワー
ドリストデータ内の最初のワードに対応するナンバーよ
り小さい F-size である。さらに、ポインタテーブルま
たはデータ構造に書き込まれたどのポインタにも付記さ
れた F-size を含めることによって、 F-size を考慮に
入れることができる。
【0050】b.短ポインタの割当て 総合ポインタ割当てサブルーチンは、短ポインタ割当て
を実行するサブルーチンを呼び出すことができる。短ポ
インタ割当てもまた F-size を考慮に入れることができ
る。
【0051】短ポインタが有利かどうかを決定する際
に、サブルーチンは、状態が2のポインタサイズと、2
の InPointers のみを有するかどうか決定することがで
きる。この場合には、もし状態の F-size が225以上
であれば、ポインタ索引に対応付けられた F-size 欄
を、1バイトの幅から225以上の値のための2バイト
の幅へ増加させることは、他の各テーブルエントリに不
必要なバイトを加えることになる。これは不利であろ
う。従って、その状態に短ポインタを割り当てるのは止
めるのが得策である。状態を分類することは、それ以後
のすべての状態が225以上の F-size を持つことを保
証するので、短ポインタはそれ以上使用されない。
【0052】もし現ポインタ索引のサイズが有利であ
り、かつ現状態の F-size が参照用テーブル内の単一バ
イトに適合するように225以下であれば、現ポインタ
索引のサイズと、そのサイズの次の索引を割り当てるこ
とができる。現ポインタのサイズが有利かどうかを決定
して、 F-size を考慮に入れるために、別のサブルーチ
ンを呼び出すことができる。このサブルーチンは、与え
られた状態からぶら下がっているすべての状態のコスト
を正確に決定する前に、与えられた状態のコストを推定
することができる。このサブルーチンは、ポインタから
ぶら下がるであろう分岐のコストを与えることによっ
て、有利なときだけ、そのポインタが確実に割り当てら
れるようにすることができる。
【0053】追加の255個の2バイトポインタ索引を
持つように、最後の1バイトポインタ索引を2バイトポ
インタ索引へ変更することが有利かどうかを決定するた
めに、さらに別のサブルーチンを呼び出すことができ
る。このサブルーチンは、さらに、状態からぶら下がる
分岐のコストを表す結果を得るために、現ポインタサイ
ズが有利かどうかを決定するサブルーチンを呼び出すこ
とができる。
【0054】もし分岐のコストが2またはそれ以下であ
れば、2バイトポインタ索引を割り当てることは有利で
ないであろう。もしそうでなければ、呼出しサブルーチ
ンは状態の F-size が255以上かどうかを決定する。
その場合、入ってくる各ポインタは2バイトのポインタ
索引でなく、3バイトのポインタである。
【0055】もし F-size が255またはそれ以下であ
れば、2バイトポインタ索引の数を2倍した積から、追
加の2バイトポインタ索引に必要なテーブルエントリの
長さを差し引き( InPointers に等しくなる)、この差
を変数 Benefit(この変数は、2バイトポインタ索引の
全利益の情報を与える)に加える。しかし、もし F-siz
e が255以上であれば、 InPointers の4倍の積から
エントリの長さを差引き、この差を変数 Benefit に加
える。 InPointers に乗じる2の乗数は、1バイト F-s
ize をもつ3バイトポインタを2バイトポインタ索引へ
変更することの利益である。4の乗数は、全部が0の1
バイトと2バイト F-size をもつ3バイトポインタを2
バイトポインタ索引へ変更することによる利益である。
【0056】いずれの場合も、変数 Benefit が適当に
増加したとき、ポインタの割当てにおいて変更をなすべ
きかどうかを決定するために、その値が使用される。
【0057】c.長ポインタの割当て 総合ポインタ割当てサブルーチンは、同様に、長ポイン
タの割当てを実行するサブルーチンを呼び出すことがで
きる。長ポインタの割当てもまた F-size を考慮に入れ
ることができる。
【0058】長ポインタ割当てサブルーチンは、もし状
態が InPointers を有していれば、状態の F-size が2
55以上かどうかを決定することができる。もしそうで
あれば、 F-size 共に、6バイトの長ポインタが必要で
ある。
【0059】ある状態のポインタのサイズを加減するた
めに、別のサブルーチンを呼び出すことができる。
【0060】もし状態に長ポインタを割り当てるのであ
れば、このサブルーチンは、その F-size が255以上
かどうかを決定することができる。サブルーチンは、も
し255以上であれば、6バイトのポインタを割り当
て、もし255以下であれば、4バイトのポインタを割
り当てる。
【0061】C.W/Nマッピング ワードからナンバーへの(W/N)マッピングは、いろ
いろなやり方で実行することができる。W/Nマッピン
グは、N/Wマッピングと同様に、マッピングの際にス
キップ可能な分岐を含む指定グラフなどの格納されたワ
ードリストを使用することができる。図5に、格納され
たワードリストを使用するのに適したW/Nマッピング
ルーチンを示す。
【0062】図5において、W/Nマッピングは、ボッ
クス400において、マップするワードの最初の文字お
よび初期化する変数 Number で始まる。最後に、変数 N
umber はワードがマップされたナンバーの値をとる。図
2の簡単なワードリストの場合は、ワードリストデータ
の最初のロケーションおよび零の変数 Number で始める
ことができるが、一般的な大きなデータ構造の場合は、
ワードの最初の文字を使用して最初文字テーブルをアク
セスし、ワードリストデータ内のその文字の開始ロケー
ションを見つけて、その文字で始まる最初の受入れ可能
なワードのナンバーより1つ小さいナンバーを見つけ、
変数 Number をそのナンバーに初期化する。次に、ボッ
クス402において、マップするワードを突き合わせる
処理を開始する。各バイトに実行するテストは、ワード
リストデータを作成するとき、コード化されたバイトに
依存して遷移単位の CHAR, F, EOB,および ALT データ
を指示する各ケースにおいて、遷移単位をバイトにコー
ド化したやり方を基礎にすることができる。
【0063】もしワードの現文字が現遷移単位の CHAR
データと一致すれば、次のボックス404のテストは、
この文字がマップするワードの末尾文字であるかどうか
を決定する。もし YES であり、かつボックス406に
おいて現遷移単位のFデータが設定されたと決定されれ
ば、ルーチンは、ボックス408において、変数 Numbe
r を戻して、マッピングは終了する。しかし、もしFデ
ータが設定されていなければ、あるいはもし現文字が末
尾文字でないが、ボックス410において現遷移単位の
EOB データが設定されたと決定されれば、そのワード
はワードリスト内に存在しないので、ボックス412に
おいて、 NIL を戻す。さもなければ、ボックス414
において、現遷移単位のFデータが設定されたかどうか
を決定する。もし YES あれば、ボックス416におい
て、変数 Number を増分する。次に、ルーチンは、ボッ
クス418において、ワードの次の文字およびワードリ
ストデータ内の次のロケーションへ進む。もしボックス
420のテストが次のロケーションにポインタまたはポ
インタ索引が入っていると決定すれば、ルーチンは、ボ
ックス422において、そのロケーションにあるポイン
タ、またはポインタ索引を使用して適当なポインタテー
ブルから検索されたポインタが指示するロケーションへ
進む。この場合は、ポインタがスキップされず、次に続
くので、 F-size は考慮されない。
【0064】他方、もしボックス402のテストが現文
字は現遷移単位の CHAR データと一致しないと決定し、
かつ現遷移単位の ALT データが設定されれば、そのワ
ードは依然としてワードリストに存在する可能性があ
る。ボックス426において、もしこれがそのケースで
あると決定すれば、ボックス430において、図6の G
oToAlt サブルーチンを実行する。もし NO ならば、そ
のワードはワードリスト内に存在する可能性がないの
で、ルーチンは、ボックス428において、NIL を戻
す。
【0065】図6の GoToAlt サブルーチンは、最初
に、ボックス440において、現遷移単位の EOB デー
タが設定されたかどうかを決定する(その場合、分岐の
終わりであるワードリストデータのすべての状態は最後
でなければならないので、Fデータもまた設定されなけ
ればならない)。もし YES ならば、データ構造内の次
のロケーションに代替分岐またはその代替分岐へのポイ
ンタが入っているので、GoToAlt サブルーチンは、ボ
ックス442において、変数 Number を増分し、ロケー
ションを増分する。そこで GoToAlt サブルーチンは終
了し、図5のルーチンへ戻り、ボックス420のテスト
で代替分岐を見つける。
【0066】他方、もしボックス440において、 EOB
は設定されてないと決定されれば、GoToAlt サブルー
チンは、ボックス450において、現遷移単位のFデー
タをテストし、もしFデータが設定されていれば、ボッ
クス452において、変数 Number を増分する。次に、
GoToAlt サブルーチンは、ボックス454において、
ロケーションを増分し、次にボックス456において、
変数 AltCount を(1)に初期化する。ボックス458
のテストによって、変数 AltCount が(0)に達したと
決定されるまで、 GoToAlt サブルーチンは、以下に述
べるやり方でロケーションを次々移る。しかし、変数 A
ltCount が(0)に達したら、 GoToAltサブルーチンは
終了し、図5のルーチンへ戻り、そこで、ボックス42
0のテストによって代替分岐を見つける。
【0067】GoToAlt サブルーチンがロケーションを
次々に移るとき、ボックス460において、現位置にあ
るバイトがコード化された遷移単位(従って、CHAR デ
ータを含んでいる)か、ポインタまたはポインタ索引か
をテストする。もしポインタまたはポインタ索引であれ
ば、ボックス462において、変数 AltCount を減分
し、そしてポインタまたはポインタ索引をスキップオー
バーする。4バイトであれ6バイトであれ、長ポインタ
の長さが上述のように3アドレスバイトの次の値から決
定されることを除いて、スキップオーバーするポインタ
またはポインタ索引の長さは、そのロケーションでの値
から決定することができる。さらに、ボックス464に
おいて、スキップした分岐の F-size を変数 Number に
加える。 F-size は、ポインタに付記されたロケーショ
ンから直接に、あるいは適当な参照用テーブルから検索
する。 F-size を加えたら、 GoToAlt サブルーチン
は、 AltCount が0に達したかどうかを決定するため
に、ボックス458へ戻る。
【0068】他方、もしボックス460のテストが現位
置にあるバイトは遷移単位であり、従って CHAR データ
が入っていることを指示すれば、 GoToAlt サブルーチ
ンは、ボックス466において、現遷移単位のFデータ
が設定されたかどうかをテストし、もし設定されていれ
ば、ボックス468において、変数 Number を増分す
る。同様に、 GoToAlt サブルーチンは、ボックス47
0において、 EOB データが設定されたかどうか、そし
て ALT データがクリヤされたかどうかをテストし、も
しその通りであれば、ボックス472において、変数 A
ltCount を減分する。次に、 GoToAltサブルーチンは、
ボックス474において、 ALT データが設定されたか
どうか、そして EOB データがクリヤされたかどうかを
テストし、もしその通りであれば、ボックス476にお
いて、変数 AltCount を増分する。このように、変数 N
umber と変数 AltCount を加減した後、 GoToAlt サブ
ルーチンは、ボックス458のテストへ戻る前に、ボッ
クス478において、ロケーションを増分する。
【0069】このように、図5および図6のルーチン
は、ワードリスト内のすべてのワードを固有のナンバー
へマップするので、W/Nマッピングを実行する。空列
を受け取る場合はワードリストデータが空列を受け取っ
たかどうかをテストするため、図5のルーチンは最初に
追加試験を加えることができる。最初に受け取ったワー
ドは、空列であってもなくても、0へマップされ、そし
て最後に受け取ったワードは、受入れ可能なワードのナ
ンバーより1つ小さい整数へマップされる。
【0070】文字は、拡張コードを使用して特別にコー
ド化することができる。これを実行する場合には、図5
のルーチンは多数の追加ステップを取り入れる。ボック
ス400またはボックス418において、ワードの各文
字を受け取った後、文字の拡張コードデータを検査し、
文字バイトの前のワードリストデータ内に現れる拡張コ
ードの数を求める必要がある。次に、ボックス402に
おいて、一致が生じたときはいつでも、すべての予想拡
張コードを受け取ったかどうかを検査する必要がある。
もし現遷移単位の EOB データが設定されておらず、か
つそれ以上の拡張コードが予想されなければ、次へ移る
前に、残っている拡張コードの数を減分する。このやり
方で、一般には図5のルーチンに従いながら、格納され
たワードリスト内の拡張コードを復号する。
【0071】以上のように、ワードからナンバーへのマ
ッピング、すなわち変換は、格納されたワードリストを
くまなく走査すると同時に、それぞれが接尾辞語尾を表
すセットFデータを有する遷移単位をカウントし続ける
必要がある。ワードが一致したとき、このカウントがワ
ードのナンバーである。リストの簡単な逐次検索にまさ
る重要な利点は、1つの迅速な走査によって分岐全体を
スキップさせることが可能なことである。
【0072】本技法は、前に引用した Luccesi の技法
にまさる以下の利点を有する。本技法は、コード化アプ
リケーションのバイトコード化法と一緒に使用して、非
常にコンパクトなワードリストデータを得ることができ
る。本技法は、Luccesi の技法のように、すべての状態
についてカウントを表すデータを格納する必要がない。
その代わりに、本技法は、ポインタと共にカウントを格
納するだけである。ポインタは、空間的または時間的ま
たはその両方において利益を得るために入っているだけ
であり、多くの状態についてカウントを表す追加データ
は格納されない。従って、本技法の場合は、カウントを
表すデータを格納するのに必要な追加データは約2〜5
%に過ぎないのに対し、Luccesi の技法の場合は、各遷
移が同じ大きさの空間を占めるので、約35%の追加デ
ータが必要である。
【0073】D.N/Wマッピング もしN/WマッピングがW/Nマッピングの逆であれ
ば、N/Wマッピングも同様に多くのやり方で実行する
ことができる。図7に、上に述べた格納されたワードリ
ストおよびW/Nマッピング法に適したN/Wマッピン
グのためのルーチンを示す。図7のルーチンは、一般
に、格納されたワードリストをくまなく走査して、セッ
トFデータをもつ各バイトについて照合すべきナンバー
を減分する。ナンバーはマップ中のナンバーに対応する
ワードの終端で零に達し、そのワードが戻される。
【0074】図7において、N/Wマッピングは、ボッ
クス500において、変数 Numberおよび空スタックで
始まる。このスタックは、図7のルーチングが終了した
ときマップ中のナンバーに対応するワードが入るよう
に、ルーチングによって管理される。従って、対応する
ワードを戻すためになすべき必要なことは、そのスタッ
クの内容をアンロードして提供するだけである。
【0075】図2のワードリストのような簡単なワード
リストの場合は、第1エントリで開始することが可能で
あろう。変数 Number は、マップする全ナンバー(full
number)である。しかし、より大きなワードリストの場
合には、マップするナンバーを使用して、最初文字テー
ブル(各文字で始まる最初のワードのすぐ前のワードに
対応するナンバーを含んでいる)に基づいて、どれがワ
ードの最初の文字かどうかを直接決定することができ
る。マップするナンバーと最初文字のナンバーとを比較
して、それよりも小さい最大の数を見つけることができ
る。マップするナンバーと最初の文字のナンバーとの差
が、変数 Number の始値である。次に、現ロケーション
を、その最初文字のナンバーに対応する文字の最初文字
の遷移に設定する。しかし、もしマップするナンバーが
ワードリストデータ内の最後のワードに対応するナンバ
ーより大きいと判れば、 NIL を戻す。同様に、もしマ
ップするナンバーが0であれば、最初にワードリストデ
ータをテストして、ワードリストデータが空列を受け取
ったかどうかを決定する。もし受け取ったのであれば、
空列を戻す。しかし、ルーチンは、通常、図7に示した
ルーチンの残りの部分を続行するであろう。
【0076】ボックス502のテストは、現ロケーショ
ンにあるバイトが遷移単位(すなわち、 CHAR データを
有する)か、ポインタまたはポインタ索引かを決定す
る。もし遷移単位であれば、ボックス504において、
バイトをスタックにプッシュし、ボックス506におい
て、FSM内の次のロケーションへ進むためロケーショ
ンを増分する。もしボックス508において、遷移単位
のFデータが設定されたと決定すれれば、ボックス51
0において、 Number が0かどうかを決定する。Number
が0に達すると、ボックス512において、スタック
内のワードを提供して、マッピングは終了する。しか
し、もし Number が0に達していなければ、ボックス5
14において、 Number を減分する。次に、ボックス5
16において、遷移単位の EOB データが設定されたか
どうかを決定する。もし YES ならば、探しているワー
ドはこの分岐内にその語尾を有していないので、ボック
ス518において、そのALT データセットを有するエン
トリに達するまで、最も新しくロードされたものから開
始し、 LIFO スタック内の文字エントリをポップする。
次に、ルーチンは、次のロケーションにあるバイトにつ
いてテストするため、ボックス502へ戻る。
【0077】他方、もし現ロケーションにあるバイトが
ポインタまたはポインタ索引であれば、ボックス520
において、そのポインタまたはポインタ索引が案内する
分岐の F-size と Number とを比較する。 F-size は、
ポインタに対するその位置か、もし現ロケーションがポ
インタ索引を有していれば、その索引に対応する参照用
テーブルエントリのいずれかから検索される。もし F-s
ize が Number より大きければ、探しているワードはポ
インタからぶら下がっているワードリストデータの分岐
内で終わるので、ルーチンは、ボックス522におい
て、ロケーションを、ポインタによって、あるいはポイ
ンタ索引を使用して検索したポインタによって指示され
たロケーションに設定する。その後、ルーチンは、ボッ
クス502のテストから開始し、そのロケーションにあ
るバイトを処理する。
【0078】もし F-size ≦ Number ならば、ルーチン
は、ボックス524において、 Number から F-size を
差し引く。次に、ボックス526において、ポインタま
たはポインタ索引の後の次のロケーションへ移る。さら
に、前に述べたように、ボックス518のステップを実
行して、そのALT データセットを有するエントリに達す
るまで、スタックからエントリをポップする。次に、ル
ーチンはボックス502のテストへ戻る。
【0079】ボックス512においてスタックからワー
ドを戻す際に、対応する文字を得るためコード化遷移単
位を復号する必要がある。前に述べたように拡張コード
を使用してワードリストデータ内の文字をコード化した
場合には、復号操作は、拡張コードについてテストする
ことを含む。拡張コードを見つけたら、拡張コードでな
いコードを見つけるまで、連続する拡張コードの数をカ
ウントする。次に、そのコードと一緒に拡張コードの数
を使用して、文字コードテーブル内で適切な文字のため
の出力コード、例えば ASCII コードを見つける。
【0080】このように、N/Wマッピングは、W/N
マッピングと同様に、ワードリストデータの分岐をスキ
ップすると同時に、語尾をカウントし続けることができ
る。F-size はスキップ可能な次の分岐をもつ各分岐点
に対応付けられているので、その F-size を使用してカ
ウントを続けることができる。また、各分岐点には、次
の分岐をスキップするのに必要な情報が対応付けられて
いる。この情報は、その長さを指示するため各ポインタ
またはポインタ索引をコード化することによって、そし
てスキップ可能な分岐へ案内するポインタ(付記された
F-size を有する)またはポインタ索引のすぐ後に代替
分岐を位置付けすることによって、ワードリストデータ
内に格納することができる。その結果、マッピングが進
行しているとき、探索はワードリストデータをくまなく
迅速に進むことができる。
【0081】E.用途 上に述べたマッピング法はさまざまな用途に使用でき
る。その一部を図8〜図10に示す。
【0082】図8は、W/Nマッピングを使用して、情
報をワードに対応付ける機能を示す。ボックス540に
おいてワードを入力し、ボックス542において各ワー
ドをマップする。次に、ボックス544においてそれぞ
れのナンバーを対応する情報に対応付け、ボックス54
6においてその情報を出力する。このような応用の一例
は辞書であろう。この場合、図8の技法は、入力したワ
ードの定義を検索するために使用される。
【0083】図9は、図8の変形である。それぞれのナ
ンバーに対応付けられた情報は、他のワードに対応する
1つまたはそれ以上のナンバーである。ボックス550
においてワードを入力し、ボックス552において各ワ
ードをナンバーへマップする。次に、ボックス554に
おいてそれぞれのナンバーをそれと一定の関係を有する
他のナンバーへ対応付ける。ボックス556においてこ
れらのナンバーをマップして、ワードへ戻し、ボックス
558において得られたワードを出力する。この技法
は、例えば百科辞典などにおいて、同義語や反意語など
の関連ワードを得るために使用することができる。ま
た、ユーザーが多数の言語のうちの1つでワードをタイ
プすると、装置が別の言語でそのワードおよび同義語を
含む多数のワードグループで応答するようにして、翻訳
能力を付与することができる。
【0084】図10は、テキストの圧縮にどのようにマ
ッピングを使用できるかを示す。ボックス560におい
て圧縮する一連のワードを受け取り、ボックス562に
おいて各ワードをナンバーへマップする。次に、ボック
ス564において余分の冗長性を除去する適当な圧縮法
を使用して一連のナンバーを圧縮する。次にボックス5
66において圧縮されたデータを転送するか、または格
納する。ボックス568において一連のナンバーへ圧縮
解除する。次にボックス570において、これらのナン
バーをワードへマップし、ボックス572において一連
のワードをまさに受け取ったように出力する。
【0085】F.その他 ある種の状況においては、いろいろな修正が有益のこと
がある。上に述べたワードリストをコード化する場合に
は、ワードリストは遷移単位の形でコード化される。次
の分岐および代替分岐を有するこれらの遷移単位は、分
岐点である。もしワードリストデータ内の状態が多くの
出力遷移を有していれば、分岐と接尾辞語尾の情報を、
その状態の対応する分岐点にテーブルの形で対応付ける
ことが有益であろう。そのテーブルの各エントリは、出
力遷移の1つに対応し、その遷移からぶら下がっている
分岐のロケーションと F-size を表す。この F-size
は、その分岐内の接尾辞語尾の数ではなく、その分岐が
選択されたならば有効にスキップされるであろうすべて
の分岐の F-size である。W/Nマッピングのとき、出
力遷移の文字と探索しているワードの次の文字とが一致
すれば、その分岐が選択される。N/Wマッピングのと
き、対応する F-size がテーブルの残りの数より小さい
最大の F-size であれば、その分岐が選択される。テー
ブルのエントリは、出力遷移の文字に基づいて、あるい
は他の適当なやり方で、順序付けできる。
【0086】もう1つの変形は、前に指摘したように、
分岐点に格納された分岐情報を修正することである。例
えば、ポインタは、次の分岐に格納せずに、代替分岐に
格納することもできる。このポインタは、次の分岐の長
さなど、相対的なポインタであってもよい。
【0087】さらに別の変形は、接尾辞語尾の情報を分
岐点に対応付ける方法を修正することである。次の分岐
へのポインタを付記するのでなく、接尾辞語尾の数を次
の分岐の始めに格納することができる。2バイトポイン
タ索引へ変更すれば、記憶空間をよりいっそう節減でき
るであろうが、もし次の分岐が3バイトポインタを有し
ていれば、これは各3バイトポインタにつき1バイトを
節減するであろう。
【図面の簡単な説明】
【図1】ワードリストの抜粋の状態遷移図である。
【図2】図1の抜粋の中のワードを示すワードリストデ
ータの略図である。
【図3】ワードリストデータを含むプロダクトを作成す
る際に使用できるルーチンを示すフローチャートであ
る。
【図4】ワードリストデータを含むプロダクトを作成す
るためのデータ処理装置の略図である。
【図5】ワードをナンバーへマップする方法を示すフロ
ーチャートである。
【図6】どのように代替遷移単位を見つけるかを詳細に
示すフローチャートである。
【図7】ナンバーをワードへマッビングする方法を示す
フローチャートである。
【図8】W/Nマッピングを使用して情報をワードに対
応付ける技法の機能ブロック図である。
【図9】W/NおよびN/Wマッピングを使用してワー
ドを他のワードに対応付ける技法の機能ブロック図であ
る。
【図10】W/NおよびN/Wマッピングを使用してテ
キストを圧縮および圧縮解除する技法の機能ブロック図
である。
【符号の説明】
10〜18 状態 100 データ処理装置 102 CPU 104 FSM入力バッファ 106 出力ファイルバッファ 110 プログラムメモリ 112 主コード化ルーチン 114 状態単位情報収集サブルーチン 116 索引割当てサブルーチン 118 遷移単位発生/位置決めサブルーチン 120 ファイル書き込みサブルーチン 122 バイト値割当てサブルーチン 130 作業データメモリ
───────────────────────────────────────────────────── フロントページの続き (72)発明者 マーティン ケイ アメリカ合衆国 カリフォルニア州 94025 メンロ パーク ペニンシュラ ウェイ 935 (56)参考文献 特開 平4−332035(JP,A) (58)調査した分野(Int.Cl.7,DB名) G06F 5/00 H03M 7/30

Claims (3)

    (57)【特許請求の範囲】
  1. 【請求項1】データを機械アクセス可能な形で格納する
    記憶媒体と、前記記憶媒体に格納されたワードのリスト
    を表すワードリストデータから成るプロダクトであっ
    て、 前記ワードリストデータは、ワードリストデータを使用
    してリスト内の各ワードとナンバーとの間でマッピング
    を実行できるように、リスト内のワードの接尾辞語尾を
    表す複数の接尾辞データ項目を含んでおり、前記接尾辞
    データ項目は、マッピングのときスキップできない第1
    セットの接尾辞語尾を表す第1接尾辞データ項目と、マ
    ッピングのときスキップできる第2セットの接尾辞語尾
    を表す第2接尾辞データ項目から成っており、前記第1
    接尾辞データ項目は、マッピングのとき第1セット内の
    接尾辞語尾のカウントを得るためアクセス可能であり、
    前記第2接尾辞データ項目は、マッピングのとき第2セ
    ット内の接尾辞語尾のカウントを得るためアクセス可能
    であり、 前記ワードリストデータは、さらに、第1分岐データ項
    目を含んでおり、前記第1分岐データ項目は、第2セッ
    ト内の接尾辞語尾の1つで終わるワードについてマッピ
    ングを実行するため使用できる、第2接尾辞データ項目
    のロケーションを表す分岐選択情報と、第1セット内の
    接尾辞語尾の1つで終わらないワードについてマッピン
    グを実行するため使用できる、第2セット内の接尾辞語
    尾の数を表す分岐スキップ情報を含んでおり、 第1分岐データ項目内の接尾辞語尾の数は、単に第1接
    尾辞データ項目をアクセスすることによって得られるこ
    とを特徴とするプロダクト。
  2. 【請求項2】 ワードのリストを表すワードリストデー
    タを使用して、ワードをナンバーへマップする方法であ
    って、 前記ワードリストデータは、リスト内のワードの接尾辞
    語尾を表す複数の接尾辞データ項目を含んでおり、前記
    接尾辞データ項目は、マッピングのときスキップできな
    い第1セットの接尾辞語尾を表す第1接尾辞データ項目
    と、マッピングのときスキップできる第2セットの接尾
    辞語尾を表す第2接尾辞データ項目から成っており、前
    記第1接尾辞データ項目は、マッピングのとき第1セッ
    ト内の接尾辞語尾のカウントを得るためアクセス可能で
    あり、前記第2接尾辞データ項目は、マッピングのとき
    第2セット内の接尾辞語尾のカウントを得るためアクセ
    ス可能であり、 前記ワードリストデータは、さらに、分岐データ項目を
    含んでおり、前記分岐データ項目は、第2接尾辞データ
    項目のロケーションを表す分岐選択情報と、第2セット
    の接尾辞語尾の数を表す分岐スキップ情報とを含んでお
    り、 前記第1接尾辞データ項目内の接尾辞語尾の数は、単に
    第1接尾辞データ項目をアクセスすることによって得ら
    れる場合において、 前記第1接尾辞データ項目にアクセスし、その第1接尾
    辞データ項目を使用して、第1接尾辞データ項目内の接
    尾辞語尾の数に基づいて、接尾辞語尾の実行カウントを
    更新すること、 前記分岐データ項目にアクセスすること、 もしマップするワードが第2セットの接尾辞語尾内の接
    尾辞語尾を有していれば、分岐選択情報を使用して第2
    接尾辞データ項目にアクセスすること、およびもしマッ
    プするワードが第2セットの接尾辞語尾内の接尾辞語尾
    を有していなければ、分岐スキップ情報を使用して接尾
    辞語尾の実行カウントを更新すること、の諸ステップか
    ら成ることを特徴とする方法。
  3. 【請求項3】 ワードのリストを表すワードリストデー
    タを使用して、ナンバーをワードへマップする方法であ
    って、 前記ワードリストデータは、リスト内のワードの接尾辞
    語尾を表す複数の接尾辞データ項目を含んでおり、前記
    接尾辞データ項目は、マッピングのときスキップできな
    い第1セットの接尾辞語尾を表す第1接尾辞データ項目
    と、マッピングのときスキップできる第2セットの接尾
    辞語尾を表す第2接尾辞データ項目から成っており、前
    記第1接尾辞データ項目は、マッピングのとき第1セッ
    ト内の接尾辞語尾のカウントを得るためアクセス可能で
    あり、第2接尾辞データ項目はマッピングのとき第2セ
    ット内の接尾辞語尾のカウントを得るためアクセス可能
    であり、 前記ワードリストデータは、さらに、分岐データ項目を
    含んでおり、前記分岐データ項目は、第2接尾辞データ
    項目のロケーションを表す分岐選択情報と、第2セット
    内の接尾辞語尾の数を表す分岐スキップ情報を含んでお
    り、 前記第1接尾辞データ項目内の接尾辞語尾の数は、単に
    第1接尾辞データ項目をアクセスすることによって得ら
    れる場合において、 前記第1接尾辞データ項目にアクセスし、その第1接尾
    辞データ項目を使用して第1接尾辞データ項目内の接尾
    辞語尾の数に基づいて、接尾辞語尾の実行カウントを更
    新すること、 前記分岐データ項目にアクセスすること、 もしマップするナンバーが第2セットの接尾辞語尾内の
    接尾辞語尾をもつワードを有していれば、分岐選択情報
    を使用して第2接尾辞データ項目にアクセスすること、
    およびもしマップするナンバーが第2セットの接尾辞語
    尾内にない接尾辞語尾をもつワードを有していれば、分
    岐スキップ情報を使用して接尾辞語尾の実行カウントを
    更新すること、の諸ステップから成ることを特徴とする
    方法。
JP26742893A 1993-10-26 1993-10-26 W/nおよびn/wマッピング法 Expired - Lifetime JP3506742B2 (ja)

Priority Applications (1)

Application Number Priority Date Filing Date Title
JP26742893A JP3506742B2 (ja) 1993-10-26 1993-10-26 W/nおよびn/wマッピング法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP26742893A JP3506742B2 (ja) 1993-10-26 1993-10-26 W/nおよびn/wマッピング法

Publications (2)

Publication Number Publication Date
JPH07129367A JPH07129367A (ja) 1995-05-19
JP3506742B2 true JP3506742B2 (ja) 2004-03-15

Family

ID=17444715

Family Applications (1)

Application Number Title Priority Date Filing Date
JP26742893A Expired - Lifetime JP3506742B2 (ja) 1993-10-26 1993-10-26 W/nおよびn/wマッピング法

Country Status (1)

Country Link
JP (1) JP3506742B2 (ja)

Also Published As

Publication number Publication date
JPH07129367A (ja) 1995-05-19

Similar Documents

Publication Publication Date Title
US6233580B1 (en) Word/number and number/word mapping
US5497485A (en) Method and apparatus for implementing Q-trees
US5809494A (en) Method for rapidly and efficiently hashing records of large databases
US5613145A (en) Stored string data with element data units and pointer data units in distinct subranges of values
US4988998A (en) Data compression system for successively applying at least two data compression methods to an input data stream
US6876774B2 (en) Method and apparatus for compressing data string
US5953723A (en) System and method for compressing inverted index files in document search/retrieval system
KR940003700B1 (ko) 검색방법 및 그 장치
EP0471518B1 (en) Data compression method and apparatus
US7062499B2 (en) Enhanced multiway radix tree and related methods
EP0588921A1 (en) Data compression using multiple levels
RU97112940A (ru) Способ и устройство сжатия данных с использованием ассоциативной памяти
US6643653B1 (en) Method and apparatus for identifying a data sequence related to a given data sequence
US6222942B1 (en) Method and apparatus for compressing and decompressing messages
US5553283A (en) Stored mapping data with information for skipping branches while keeping count of suffix endings
US5560037A (en) Compact hyphenation point data
EP0381418A2 (en) A small fast lookup table for use in a data processing system
EP0649105B1 (en) Word/number and number/word mapping
JP3506742B2 (ja) W/nおよびn/wマッピング法
EP2682876B1 (en) Search program, search device, and search method
EP0567668A1 (en) A computer system for retrieval of information
EP0635796B1 (en) Compactly encoded stored string set and its use
EP0649106B1 (en) Compactly stored word groups
JP3720060B2 (ja) 関連ワードを得る方法及びシステム
JPH0785047A (ja) コンパクトにエンコードされて記憶されたストリングの組を有する製品

Legal Events

Date Code Title Description
A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

Effective date: 20031117

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20031217

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20071226

Year of fee payment: 4

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20081226

Year of fee payment: 5

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20091226

Year of fee payment: 6

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20101226

Year of fee payment: 7

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20101226

Year of fee payment: 7

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20111226

Year of fee payment: 8

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20111226

Year of fee payment: 8

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20121226

Year of fee payment: 9

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20131226

Year of fee payment: 10

EXPY Cancellation because of completion of term