以下、図を参照して本発明を辞書データ圧縮装置の一種であるコンピュータ及び電子辞書に適用した場合の実施形態について図面を参照して詳細に説明する。但し、本発明が適用可能なものはこれに限定されるものではない。
〔第1実施形態〕
[1.全体構成]
図1は、本発明を適用したコンピュータ1及び電子辞書装置100の概観図である。コンピュータ1は、通常、電子辞書装置100の製造メーカ等に設置されており、辞書データの圧縮の用に供される。コンピュータ1で圧縮された辞書データは、EEPROM107に記憶されて、EEPROM107が実装された電子辞書装置100が製造される。そして、電子辞書装置100においては、圧縮された辞書データが伸張され、辞書データの内容(見出語や説明情報等)が表示される。
辞書データとは、見出語と、当該見出語を説明するための説明情報とからなるデータであり、例えば国語辞典や英和辞典、和英辞典、英英辞典、カタカナ語辞典などの電子辞書データがある。但し、簡明のために、本実施形態においては、コンピュータ1により圧縮され、電子辞書装置100に記憶される辞書データは、英和辞典の辞書データのみとして説明する。また、圧縮(符号化)前の辞書データを圧縮後の辞書データと区別するために、以下では、圧縮前の辞書データを「元辞書データ」という。また、圧縮後の辞書データを「圧縮後辞書データ」という。
図1に示すように、コンピュータ1は、CRT(Cathode Ray Tube)等のディスプレイ3と、キーボード5と、RAMやハードディスク等のメモリ7とを備えた汎用のサーバ・コンピュータ等のハードウェアで構成される。電子辞書装置100は、LCD(Liquid Crystal Display)等のディスプレイ103と、文字入力キーや辞書種別の選択キー等の各種キー群105と、EEPROM107とを備えて構成される。
電子辞書装置100の基本的な機能は、次の通りである。すなわち、ユーザによって辞書が選択され、検索語となる文字が入力される(以下、入力された文字を「入力文字」という。)と、電子辞書装置100は、入力文字に適合する見出語を辞書データの中から検索し、見出語候補として一覧表示する。そして、検索した見出語に対応する説明情報を表示する。
[1.2 辞書データ圧縮装置]
[1.2.1 構成]
まず、辞書データをコンピュータ1において圧縮する場合の処理について説明する。図2は、コンピュータ1を示すブロック図である。同図に示すように、コンピュータ1は、CPU(Central Processing Unit)10と、ハードディスク20と、RAM(Random Access Memory)30と、ROM(Read Only Memory)40と、入力部50と、表示部60とを備えている。
ハードディスク20は、オペレーティングシステム、必要なプログラム又はデータファイル等を格納する。また、ハードディスク20には、元英和辞典データ202と、ハフマン符号テーブル204と、辞書圧縮プログラム210と、第1破綻符号化プログラム212とが記憶されている。ここで、辞書データは、所定の割合で分割(区分)されており、辞書データ全体の1割の部分と残り9割の部分とに分割されている。また、辞書データ全体の1割の部分を参照部、残りの9割の部分を主データ部という。なお、参照部の割合は辞書データ全体の1割に限定される訳ではなく、例えば、5%でも良いし、2割でも良い。
元英和辞典データ202は、「英和辞典」のコンテンツの圧縮前のデータが入っている辞書データである。図3(a)に元英和辞典データ202の概要を図示した。図3(a)において、「○○○○」で示した部分は見出語を表し、「・・・・・」で示した部分は当該見出語の説明文(見出語を説明する文章を構成する文字)を表している。図3(a)に示すように、元英和辞典データ202は、紙の辞書に印字されている文字を文字コードとした一連のテキストのデータとなっている。
また、図3(b)は、説明の便宜上、元英和辞典データ202を見出語単位に区切って図式化した概念図である。図3(b)によれば、例えば、見出語「applet」及び「applet」の説明情報(以下、1つの見出語とその見出語の説明情報とを合わせて「見出語単位データ」という。)は、元英和辞典データ202の先頭を「1」バイト目とした「100」バイト目から記述されている。見出語「ASCII」の見出語単位データは、元英和辞典データ202の「1750」バイト目から記述されている。また、図3(b)に示したように、元英和辞典データ202は、ここでは、データ全体の1割の部分を参照部、残る9割の部分を主データ部として区分されている。以下、元英和辞典データ202の参照部を元英和参照部202a、主データ部を元英和主データ部202bという。
ハフマン符号テーブル204は、文字列と、文字列をハフマン符号化した場合のハフマン符号とを初期値として記憶しているテーブルである。元英和参照部202aに含まれている文字列について、最小の情報量となるようにそれぞれの文字列に対し、一意に符号を割り当てている。
図4(a)はハフマン符号テーブル204のデータ構成の一例を示した図である。ハフマン符号テーブル204は、文字列(例えば、「[名詞]」)と、ハフマン符号(例えば、「101100…」)とを対応づけて保存している。
RAM30は、CPU10が実行する各種プログラムや、これらのプログラムの実行にかかるデータ等を一時的に保持するメモリ領域を備える。本実施形態では、圧縮後英和辞典データ300と、見出語テーブル306とを備えている。なお、RAM30は、図1におけるメモリ7に相当する。
圧縮後英和辞典データ300は、CPU10が、辞書圧縮プログラム210に基づいて辞書圧縮処理を実行することにより、元英和辞典データ202を圧縮した辞書データである。詳細は後述するが、元英和参照部202aが符号化されることにより圧縮され、圧縮後英和参照部302となり、元英和主データ部202bが符号化されることにより圧縮され、圧縮後英和主データ部304となる。
見出語テーブル306は、圧縮後英和辞典データ300に含まれている各見出語の圧縮後英和辞典データ300の開始位置(開始バイト)を記録したテーブルである。CPU10は、見出語テーブル306を参照することにより、見出語単位データを読み出す。
図4(b)は、見出語テーブル306のデータ構造の一例を示した図である。見出語テーブル306は、圧縮後英和辞典データ300に含まれている符号化後の見出語単位データの開始バイト位置(例えば、「49」)を順番に記憶している。
ROM40は、各種初期設定、ハードウェアの検査、あるいは必要なプログラムのロードを行う為の初期プログラム(例えば、BIOS(Basic Input/Output System)等)を格納する。CPU10は、コンピュータ1の電源投入時においてこの初期プログラムを実行することにより、コンピュータ1の動作環境を設定する。
CPU10は、入力される指示に応じて所定のプログラムに基づいた処理を実行し、各機能部への指示やデータの転送を行う。具体的には、CPU10は、入力部50から入力される操作信号に応じてハードディスク20に格納されたプログラムを読み出し、当該プログラムに従って処理を実行する。そして、表示制御信号を適宜表示部60に出力して、処理結果を表示させる。
また、CPU10は、本実施形態において、ハードディスク20の辞書圧縮プログラム210に従った、辞書圧縮処理(図5参照)を実行すると共に、この辞書圧縮処理において、第1破綻符号化プログラム212に従った第1破綻符号化処理をサブルーチンとして実行する。
具体的には、CPU10は、辞書圧縮処理において、まず、元英和参照部202aを圧縮して圧縮後英和参照部302を生成する。その後、元英和主データ部202b中の文字列を選択する。そして、選択した文字列が、圧縮後英和参照部302に含まれているか否かを判定し、圧縮後英和参照部302に含まれている場合には第1破綻符号化処理を実行し、圧縮後英和参照部302に含まれていない場合には、単純符号化する処理を実行する。
また、CPU10は、第1破綻符号化処理において、圧縮後英和参照部302に含まれていると判定された符号化対象文字列の圧縮後英和参照部302中の位置を検出する。このとき、位置の検出は、当該文字列が含まれているバイトの位置、すなわちバイトアライメント(ここで、アライメントとは、位置決めのために用いられる一般的な技術的用語であり、バイトアライメントとは、データをバイト単位で区切った場合の各バイトを決定するための位置(ビット)であって、当該バイト内の「0」ビット目(例えば、図7の(a)の一点鎖線)のことである。)で区切った圧縮後英和参照部302中の、何れのバイトに含まれているのか(以下、このバイトの位置を「バイト位置」という。)、を検出するものである。そして、CPU10は、復号開始位置を、検出したバイト位置を始めとして1ビット単位でずらしつつ、圧縮後英和参照部302を復号可能かどうか判定する。復号開始位置を検出したバイト長までずらした場合に、復号可能な復号開始位置がいくつであったかをCPU10は判定する。この結果、1つであった場合には、元英和主データ部202bの当該文字列を、検出したバイト位置を用いて符号化し、複数であった場合には、検出したバイト位置及びビット位置を用いて符号化する。
圧縮後英和参照部302中の所定位置をバイト位置で表す場合と、ビット位置で表す場合とでは、前者の方がその表した文字(符号)の文字長(符号長)が短くなる。第1破綻符号化処理は、この原理を利用して辞書データの主データ部の圧縮効率を一層高めるものである。
入力部50は、仮名やアルファベット等の文字入力や機能選択等に必要なキー群を備えた入力装置であり、押下されたキーの信号をCPU10に出力する。この入力部50におけるキー入力により、処理の実行などを指示する制御命令の入力手段を実現する。なお、この入力部50は、図1に示すキーボード5に相当するが、キーボードに限られる物ではなく、例えばマウス等であっても良い。
表示部60は、CPU10から出力される表示信号に基づいて各種画面を表示するものであり、CRT(Cathode Ray Tube)等により構成される。なお、この表示部60は、図1に示すディスプレイ3に相当する。
[1.2.2 動作]
図5は、辞書圧縮処理に係るコンピュータ1の動作を説明するためのフローチャートである。この辞書圧縮処理は、CPU10がハードディスク20に記憶された辞書圧縮プログラム210を実行することによって実現される処理である。
まず、CPU10は元英和辞典データ202の元英和参照部202aをハフマン符号化法によって符号化し、圧縮する処理を行う(ステップA10)。具体的には、ハフマン符号テーブル204から、該当する文字列に対応するハフマン符号で置換をし、符号化することにより元英和参照部202aを圧縮する。そして、圧縮された参照部は、RAM30に圧縮後英和参照部302として記憶される。なお、元英和参照部202aを圧縮する方法としてハフマン符号を用いたが、これに限られるわけではなく、見出語単位データのランダムな伸張が可能な圧縮方法で有れば、公知の圧縮方法を適宜用いて良い。
次に、CPU10は、元英和辞典データ202の元英和主データ部202bに記述されている文字列を選択する(ステップA12)。ここで、文字列を選択するとは、例えば文節毎に文字列として抽出したり、所定の文字数ずつ抽出するなど、いずれの方法であっても良い。そして、CPU10は、ステップA12により選択した文字列(以下、適宜「符号化対象文字列」という)が、圧縮後英和参照部302に含まれているか否かを判定する(ステップA14)。もし、符号化対象文字列が圧縮後英和参照部302に含まれていないと判定した場合には(ステップA14;No)、CPU10は、符号化対象文字列を単純符号化する(ステップA20)。ここで単純符号化とは、例えばハフマン符号化法等の公知の符号化方法を適宜適用する。また、符号化対象文字列が圧縮後英和参照部302に含まれていると判定した場合には(ステップA14;Yes)、圧縮後英和参照部302に含まれている当該文字列のバイト位置及びビット位置を検出する(ステップA16)。
そして、検出されたバイト位置及びビット位置に基づいて第1破綻符号化処理を実行する(ステップA18)。そして、元英和主データ部202bの総ての文字列を符号化したか否か、即ち、元英和主データ部202bの最後の文字列に対して処理を行ったかを判定し、総ての文字列の符号化が終了していない場合は(ステップA22;No)、次の文字列を選択し(ステップA24)、ステップA14から同様の処理を実行する。
総ての文字列の符号化が終了している場合には(ステップA22;Yes)、CPU10は、圧縮後英和参照部302と、圧縮後英和主データ部304とからなる圧縮後英和辞典データ300に含まれている各見出語の位置(開始バイト)を、見出語テーブル306として、RAM30に記憶することにより、見出語テーブル306を作成し(ステップA26)、辞書圧縮処理を終了する。
次に、第1破綻符号化処理について説明する。図6は、第1破綻符号化処理に係るコンピュータ1の動作を説明するためのフローチャートである。この第1破綻符号化処理は、CPU10がハードディスク20の第1破綻符号化プログラム212を実行することによって実現される処理である。
まず、CPU10は、非破綻カウンタの値に「0」を代入し、バイト位置sの値に辞書圧縮処理のステップA16で検出した文字列の先頭位置が含まれるバイトアライメントの位置を代入し、ビット位置tの値に辞書圧縮処理のステップA16で検出した文字列があるビット位置を代入し、変数nの値に「0」を代入する(ステップB10)。
次に、「8×s+n」ビットを復号開始位置として復号した場合に破綻するか否かを判定する(ステップB12)。ここで、破綻するとは、復号開始位置から復号した際に文字列として復号出来ない場合や、文章として成立しないこという。破綻したか破綻していないか(非破綻)の判定は、例えば復号開始位置から所定の文字数分復号した際に、定義されておらず復号不可能な符号が出現したか否かを判定したり、句点が2つ連続するなど文字列が表記ルール通りになっていないことを判定するといった方法の他、公知の方法を適宜用いて良い。
もし、「8×s+n」ビットを復号開始位置として復号した場合に破綻しないときは(ステップB12;Yes)、CPU10は、非破綻カウンタの値に「1」加算する(ステップB14)。また、「8×s+n」ビットを復号開始位置として復号をした場合に破綻するときは(ステップB12;No)、非破綻カウンタの値は変化させない。
そして、CPU10は、変数nに「1」加算し(ステップB16)、nが8になるまでステップB12〜ステップB16を繰り返し処理する(ステップB18)。
次に、CPU10は、変数nの値が「8」以上になると(ステップB18;Yes)、非破綻カウンタの値が「1」か否か判定する(ステップB20)。非破綻カウンタの値が「1」の場合には(ステップB20;Yes)、CPU10は、バイト位置sに基づいて、符号化対象文字列を符号化する(ステップB22)。また、非破綻カウンタの値が「1」でない場合(2以上の場合)には、バイト位置s及びビット位置tに基づいて符号化対象文字列を符号化する(ステップB24)。
以下、図7を用いて具体的に説明する。まず、図7(a)は、圧縮後英和参照部302の一部をビット表現で表した図である。一点鎖線は、通常のバイトアライメントの位置であり、左から、50バイト目、51バイト目、52バイト目を表している。また、本ビット列には、文字列「[名詞]」がハフマン符号化された符号が含まれており、50バイト目の3ビット目(先頭から「403」ビット目)の位置から当該符号(文字列「名詞」)のデータ)が始まっている。なお、ここで図では省略されているが、「[名詞]」はハフマン符号により、「3」バイト(24ビット)で符号化されているとする。
また、50バイト目のバイト内におけるビット位置を「[0]、[1]、…、[7]」で示している。ここで、「×」が付されているのは、そのビット位置から符号列を復号すると、破綻することを示している。また、「○」が付されているのは、そのビット位置から符号列を復号すると、破綻しない(非破綻である)ことを示している。
まず、第1破綻符号化処理において、CPU10は、非破綻カウンタの値に「0」を、変数nの値に「0」を代入すると共に、バイト位置sに「50」を、ビット位置tに「3」を代入する(図6のステップB10)。
そして、CPU10は、変数nの値が0のとき、すなわち「50」バイト目における「0」ビット目を復号開始位置とした場合に破綻するか否か判定する(ステップB12;No)。この場合、「50」バイト目における「0」ビット目から符号列を復号すると破綻する。次に、CPU10は、変数nの値が1のとき、すなわち「50」バイト目における「1」ビット目を復号開始位置とした場合に破綻するか否か判定する(ステップB12;No)。以下、同様にnを「0」から「7」まで変化させて、各ビット位置を復号開始位置とした場合に破綻するか否かを調べる。すると、図7においては、非破綻の個数は、1つ(「3」ビット目)だけであるので、非破綻カウンタの値は「1」となる。
次に、CPU10は、非破綻カウンタが「1」であると判定すると(ステップB20;Yes)、バイト位置sに基づいて符号化対象文字列「[名詞]」を符号化する(ステップB22)。具体的には、圧縮後英和参照部302を参照した圧縮である事を示す「1」と、バイト位置sを2進数に直し、それを7ビットで表現した符号「0110010」とを併せた符号「10110010」で符号化対象文字列を符号化する。
次に、図7(b)は、図7(a)と同様に圧縮後英和参照部302の一部をビット表現で表した図である。一点鎖線は、通常のバイトアライメントの位置であり、左から、52バイト目、53バイト目、54バイト目を表している。また、本ビット列には、文字列「〔コンピュータ〕」がハフマン符号化された符号が含まれており、52バイト目の3ビット目の位置から当該符号(文字列「〔コンピュータ〕」)が始まっている。なお、ここで図では省略されているが、「〔コンピュータ〕」はハフマン符号により、5バイト(40ビット)で符号化されているとする。
まず、第1破綻符号化処理において、CPU10は、非破綻カウンタの値に「0」を、変数nの値に「0」を初期値として代入すると共に、バイト位置sに「52」を、ビット位置tに「3」を代入する(図6のステップB10)。
次に、CPU10は、52バイト内における各ビット位置を復号開始位置とした場合における非破綻を検出する。すると、「1」ビット目と「3」ビット目のビット位置から始まる符号について非破綻であると検出する。従って、非破綻カウンタの値は「2」となる。
そして、CPU10は、非破綻カウンタの値は「2」であるため(ステップB20;No)、バイト位置sとビット位置tに基づいて符号化対象文字列を符号化する(ステップB24)。具体的には、圧縮後英和参照部302を利用した圧縮である事を示す符号ビット「1」と、バイト位置「52」を7ビットの2進数になおした「0110100」と、「〔コンピュータ〕」が記憶されたビット位置「3」を3ビットの2進数になおした「011」とを併せた符号「10110100011」で、符号化対象文字列「〔コンピュータ〕」を符号化する。
以上のように、第1実施形態における辞書圧縮装置(コンピュータ)によれば、圧縮後英和主データ部304が、圧縮後英和参照部302に含まれている文字列を参照する際に、圧縮後英和参照部302において圧縮された文字列の開始位置がバイトアライメントの位置から始まっていない場合であっても、わざわざ先頭からのビット位置を指定しなくとも、伸張可能に辞書データを圧縮することが可能となる。
[1.3 電子辞書装置]
[1.3.1 構成]
図8は、電子辞書装置100の構成を示すブロック図である。同図に示すように、電子辞書装置100は、CPU(Central Processing Unit)110と、ROM(Read Only Memory)120と、RAM(Random Access Memory)130と、EEPROM(Electronically Erasable and Programmable Read Only Memory)140と、入力部150と、表示部160とを備えている。
ROM120は、各種初期設定、ハードウェアの検査、あるいは必要なプログラムのロード等を行うための初期プログラムを格納する。CPU110は、電子辞書装置100の電源投入時においてこの初期プログラムを実行することにより、電子辞書装置100の動作環境を設定する。
また、ROM120は、メニュー表示処理、各種設定処理、各種検索処理等の電子辞書装置100の動作に係る各種プログラムや、電子辞書装置100の備える種々の機能を実現するためのプログラム等を格納すると共に、ハフマン符号テーブル1202と、辞書伸張プログラム1210と、第1破綻復号プログラム1212とを備えている。ここで、ハフマン符号テーブル1202は、図2のハフマン符号テーブル204と同一のテーブルである。
RAM130は、CPU110が実行する各種プログラムや、これらのプログラムの実行に係るデータ等を一時的に保持するメモリ領域を備える。
EEPROM140は、電子辞書装置100において、CPU110が参照する各種辞書データや、各種設定等を電源オフの後であっても記憶するためのメモリである。本実施形態では、圧縮後英和辞典データ1400と、見出語テーブル1406とを備えている。ここで、圧縮後英和辞典データ1400は、圧縮後英和辞典データ300と同一の辞書データである。また、見出語テーブル1406は、見出語テーブル306と同一のテーブルである。
CPU110は、入力される指示に応じて所定のプログラムに基づいた処理を実行し、各機能部への指示やデータの転送を行う。具体的には、CPU110は、入力部150から入力される操作信号に応じてROM120に格納されたプログラムを読み出し、当該プログラムに従って処理を実行する。そして、CPU110は、表示制御信号を適宜表示部160に出力して、処理結果を表示させる。
また、CPU110は、本実施形態において、ROM120に記憶された辞書伸張プログラム1210に従った、辞書伸張処理(図9参照)を実行すると共に、この辞書伸張処理において、第1破綻復号プログラム1212を読み出して第1破綻復号処理をサブルーチンとして実行する。
具体的には、CPU110は、辞書伸張処理において、入力文字に対応する見出語を検索する。CPU110は、見出語が圧縮後英和参照部1402に含まれていると判定した場合には、圧縮後英和参照部1402に含まれている符号列を復号することにより見出語データを伸張する。また、CPU110は、検索した見出語が圧縮後英和主データ部1404に含まれていると判定した場合には、圧縮後英和主データ部1404に含まれている見出語データを復号する。このとき、抽出された見出語データに含まれる文字が、辞書型符号化方法により圧縮されていると判定した場合には第1破綻復号処理を実行し、符号列を復号することにより見出語データを伸張する。
また、CPU110は、第1破綻復号処理では、圧縮後英和主データ部1404に含まれている符号列を、圧縮後英和参照部1402を参照して復号する。このときに、バイト内における各ビット位置から符号列を復号した場合に、破綻するか否かを検出する。そして、CPU110は、圧縮後英和参照部1402を参照し、圧縮後英和主データ部1404に含まれる符号列を復号する。
入力部150は、仮名やアルファベット等の文字入力や機能選択等に必要なキー群を備えた入力装置であり、押下されたキーの信号をCPU110に出力する。この入力部150におけるキー入力により、入力文字の入力、辞書モードの選択、検索実行指示、ジャンプ機能の開始等を指示入力する入力手段を実現する。なお、この入力部150は、図1のキー群105に相当するが、キー群105に限られるわけではなく、タッチパネル等であってもよい。
表示部160は、CPU110から入力される表示信号に基づいて各種画面を表示するものであり、LCD等により構成される。なお、この表示部160は、図1に示すディスプレイ103に相当する。
[1.3.2 動作]
図9は、辞書伸張処理に係る電子辞書装置100の動作を説明するためのフローチャートである。この辞書伸張処理は、CPU110がROM120に記憶された辞書伸張プログラム1210を実行することによって実現される処理である。
まず、CPU110は、文字が入力されると(ステップC10)、入力文字に対応する見出語を検索する(ステップC12)。具体的には、CPU110は、見出語テーブル1406に格納された開始位置の中から何れかの開始位置を選択し、圧縮後英和辞典データ1400を伸張していく処理を行う。見出語テーブル1406には、圧縮後英和辞典データ1400の格納順に見出語単位データの開始位置が格納されているため、例えば、公知である2分木を用いた探索法等により、開始位置の選択・見出語の伸張・適合する見出語か否かの判定を繰り返すことにより、見出語の検索を実行する。次に、CPU110は、入力文字に対応する見出語が圧縮後英和主データ部1404に含まれているか否かを判定する(ステップC14)。例えば、入力文字に対応する見出語が記憶されている開始位置が、所定の位置より大きい場合は主データ部に含まれていると判定する。そして、CPU110が、入力文字に対応する見出語が圧縮後英和主データ部1404に含まれていないと判定した場合には(ステップC14;No)、圧縮後英和参照部1402から、見出語単位データの符号列を読み出して復号する(ステップC28)。
また、CPU110は、入力文字に対応する見出語が圧縮後英和主データ部1404に含まれていると判定した場合には(ステップC14;Yes)、見出語単位データの符号列を復号する。次に、CPU110は、復号するための文字列単位の符号列(以下、適宜「復号対象符号列」という。)を読み出し、復号対象符号列の1ビット目が「1」か否かを判定する(ステップC16)。もし、復号対象符号列の1ビット目が「0」の場合には(ステップC16;No)、CPU110は、復号対象符号列を単純に復号する(ステップC22)。また、CPU110は、復号対象符号列の1ビット目が「1」の場合には(ステップC16;Yes)、復号対象符号列が含まれるバイト位置を抽出し(ステップC18)、第1破綻復号処理を実行する(ステップC20)。
そして、CPU110は、見出語単位データに含まれている総ての符号列について復号したか否かを判定し(ステップC24)、見出語単位データに復号する符号列が残っている場合には(ステップC24;No)、次の復号対象符号列を抽出し(ステップC26)、同じ処理を実行する。また、見出語単位データに含まれている符号列を総て復号した場合には(ステップC24;Yes)、CPU110は、見出語単位データを復号することにより、伸張された見出語と説明情報とを表示部160に表示し(ステップC30)、辞書伸張処理を終了する。
次に、辞書伸張処理のステップC20において実行される第1破綻復号処理について説明する。図10は、第1破綻復号処理に係る電子辞書装置100の動作を説明するためのフローチャートである。この第1破綻復号処理は、CPU110がROM120の第1破綻復号プログラム1212を実行することによって実現される処理である。
まず、CPU110は、辞書伸張処理のステップC18で抽出されたバイト位置をバイト位置sの値に代入し、非破綻カウンタ、変数n及びビット位置tの値に0を初期設定として代入する(ステップD10)。
次に、「8×s+n」を復号開始ビット位置とする符号列を復号した場合に、破綻するか否かを検出する(ステップD12)。ここで、破綻するか否かを検出する方法はコンピュータ1が第1破綻符号化処理のステップB12で行った破綻検出処理と同様の方法で実行する必要がある。そして、CPU110が符号列を復号した結果、破綻しないと判定した場合には(ステップD12;Yes)、非破綻カウンタの値に「1」加算し(ステップD14)、変数nの現在の値を非破綻位置に代入する(ステップD16)。
次に、CPU110は、変数nの値に「1」加算し(ステップD18)、変数nの値が「8」以上か否かを判定する(ステップD20)。CPU110は、変数nの値が「8」未満であると判定した場合には(ステップD20;No)、ステップD12から再び処理を実行する(ステップD20;No)。
そして、CPU110は、変数nの値が「8」以上であると判定すると(ステップD20;Yes)、非破綻カウンタの値が「1」か否かを判定する(ステップD22)。そして、非破綻カウンタの値が「1」の場合には(ステップD22;Yes)、CPU110は「8×s+非破綻位置」を復号開始位置とする符号列を復号する(ステップD24)。また、非破綻カウンタの値が「1」以外で有る場合には(ステップD22;No)、CPU110は、続く符号列より3ビットをビット位置tとして抽出し、「8×s+t」から始まる符号列を復号する(ステップD26)。
具体的に、図7を使って説明する。ここで、図7(a)の上段の符号列は、圧縮後英和参照部1402の一部を表した図である。また、復号対象符号列として、圧縮後英和主データ部1404から、「10110010」が抽出されているとする。
まず、CPU110は、復号対象符号列の最初の1ビット目を抽出する。すると、最初の1ビット目は「1」であることから、続く符号列よりバイト位置を抽出する(図9のステップC18)。ここで、続く符号列のうち7ビットを抽出すると「0110010」となり、バイト位置sには、10進数「50」が代入される(図10のステップD10)。
次に、CPU110は、圧縮後英和参照部1402の先頭から「50」バイト目の各ビット位置を開始位置として復号し、破綻するか否かを判定する(ステップD12)。ここで、CPU110は、まず変数nの値が「0」のとき、即ち「50」バイト目における「0」ビット目を開始位置として符号列を復号すると、破綻すると判定する。続いて、CPU110は、変数nの値が「1」のとき、即ち「50」バイト目における「1」ビット目を開始位置として符号列を復号すると、破綻すると判定する。同様に、変数nの値が「7」になるまで、順次破綻するか否かを判定していくと、変数nの値が「3」のとき、即ち「50」バイト目における「3」ビット目を復号開始位置として符号列を復号すると、破綻しないと判定する。このとき、CPU110は、非破綻カウンタの値に「1」を加算し(図10のステップD14)、変数nの値「3」を非破綻位置として代入する(図10のステップD16)。
次に、非破綻カウンタの値が「1」であるから、CPU110は、圧縮後英和参照部1402の始めから「8×s+非破綻位置」ビット目に該当する「8×50+3」ビット目を開始位置として符号列を復号する。例えば、「8×50+3」ビット目を開始位置とする符号列に一致する符号列を、ハフマン符号テーブル1202より検索し、対応する文字列「[名詞]」が復号・伸張される。
次に、図7(b)を用いて説明すると、復号対象符号列として、圧縮後英和主データ部1404から、「10110100011…」が抽出されているとする。
まず、CPU110は、復号対象符号列の最初の1ビット目を抽出する。すると、最初の1ビット目は「1」であることから、続く符号列よりバイト位置を抽出する(図9のステップC18)。ここで、続く符号列のうち7ビットを抽出すると「0110100」となり、バイト位置sの値には、10進数「52」が代入される(図10のステップD10)。
次に、CPU110は、圧縮後英和参照部1402の先頭から「52」バイト目の各ビット位置を開始位置として復号し、破綻するか否かを判定する(ステップD12)。すると、CPU110は、変数nの値が「1」のとき及び「3」のとき、即ち「50」バイト目における「1」ビット目及び「3」ビット目を開始位置として符号列を復号すると、破綻しないと判定する。このとき、CPU110は、非破綻カウンタの値にそれぞれ「1」を加算するため(図10のステップD14)、非破綻カウンタの値には「2」が代入されている。
次に、非破綻カウンタの値が「2」となることから、CPU110は、続く符号列から3ビット「011」を抽出し、抽出された「3」をビット位置tの値として代入する。そして、圧縮後英和参照部1402の始めから「8×s+t」ビット目に該当する「8×50+3」ビット目を開始位置として符号列を復号することにより、対応する文字列「〔コンピュータ〕」が復号・伸張される。
このように、第1実施形態の電子辞書装置によれば、圧縮後英和主データ部1404を辞書型符号化方法によって伸張する場合に、圧縮後英和参照部1402に含まれる文字列に対応する符号列がバイトアライメントの位置から開始してない場合であっても、圧縮後英和参照部1402を参照して主データ部に含まれる符号列を復号することが可能となる。
また、本実施形態において、元英和参照部202a及び元英和主データ部202bに対して、上述した辞書圧縮処理を実行した後、更に圧縮された辞書データ全体に対してハフマン符号化による符号化を施すこととしても良い。この場合には、より効率的な符号化が可能となる。
〔第2実施形態〕
次に、本発明を適用した第2実施形態について説明する。本実施形態は、第1実施形態において、圧縮後主データ部に含まれる符号列の開始位置を表す符号を、可変長とすることにより、より効率的に符号化を行うものである。
[2.1 辞書データ圧縮装置]
[2.1.1 構成]
第2実施形態におけるコンピュータの構成は、第1実施形態において図2に示して説明したコンピュータ1の構成において、ハードディスク20を図11(a)に示すハードディスク22に、RAM30を図11(b)に示すRAM32に置き換えた構成と同様であり、以下、同一の構成要素には同一の符号を付してその説明を省略する。また、各フローチャートにおいて、第1実施形態のフローチャートと同一処理内容のステップについては同一の符号を付して、異なる部分を中心に説明する。
図11(a)を参照してハードディスク22の構成について説明する。図11(a)に示すように、ハードディスク22は、元英和辞典データ202と、ハフマン符号テーブル204と、破綻テーブル206と、辞書圧縮プログラム210と、第2破綻符号化プログラム220とを記憶している。
破綻テーブル206は、図12(a)に示すように、非破綻カウンタの値と、符号ビット数とを対応づけて格納したテーブルである。
第2破綻符号化プログラム220は、本実施形態における第2破綻符号化処理を実現するためのプログラムであり、CPU10がこの第2破綻符号化プログラム220を実行することで、第2破綻符号化処理が実現される。第2破綻符号化処理において、圧縮後英和参照部302に含まれていると判定された符号化対象文字列の圧縮後英和参照部302中の位置を検出する。そして、CPU10は、復号開始位置を、検出したバイト位置を始めとして1ビット単位でずらしつつ、圧縮後英和参照部302を復号可能かどうか判定する。復号開始位置を検出したバイト長までずらした場合に、復号可能な復号開始位置の個数及び順位を記憶する。この結果、個数が1つであった場合には、元英和主データ部202bの当該文字列を、検出したバイト位置を用いて符号化し、個数が複数であった場合には、検出したバイト位置及び順位を用いて符号化する。
また、図11(b)を参照してRAM32の構成について説明する。図11(b)に示すように、RAM32は、圧縮後英和辞典データ300と非破綻位置記憶領域320とを格納している。
非破綻位置記憶領域320は、図12(b)に示すように、非破綻カウンタの値と、第2破綻符号化処理において参照される変数nの値とを対応づけて記憶しておく領域である。
[2.1.2 動作]
次に、第2実施形態におけるコンピュータ1の動作について図を参照して説明する。図13は、第2破綻符号化処理に係るコンピュータ1の動作を説明するためのフローチャートである。この第2破綻符号化処理は、ハードディスク22の辞書圧縮プログラム210の実行中に呼び出される処理である。CPU10は、図4の辞書圧縮処理におけるステップA18における、第1破綻符号化処理に代えて、本実施形態の第2破綻符号化処理を呼び出して実行する。
CPU10は、参照部の符号列を復号し、破綻しないと判定した場合において、非破綻カウンタの値を「1」加算し、併せて非破綻位置記憶領域320に、非破綻カウンタの値と、変数nの値とを対応づけて格納する(ステップE15)。
また、CPU10は、非破綻カウンタの値が「1」でないときは(ステップB20;No)、破綻テーブル206から非破綻カウンターの値に対応する符号ビット数を読み出す。次に、CPU10は、ビット位置tの値に対応する破綻カウンタの値を、順位として非破綻位置記憶領域320より読み出す。そして、CPU10は、読み出された符号ビット数に基づいて、順位を算出する(ステップE24)。
そして、圧縮後英和参照部302に記憶されている符号化対象文字列と同じ文字列の参照位置が含まれているバイト位置sと、順位とに基づいて符号化対象文字列を符号化する(ステップE26)。
第2破綻符号化処理について、図14を用いて具体的に説明する。図14は、圧縮後英和参照部302の一部を符号列として表した図である。一点鎖線は、通常のバイトアライメントの位置であり、左から、52バイト目、53バイト目、54バイト目を表している。また、図14の符号列には、文字列「〔コンピュータ〕」がハフマン符号化された符号が記憶されており、52バイト目の3ビット目(先頭から419ビット目)の位置から始まっている。なお、ここで図示は省略されているが、例えば、「〔コンピュータ〕」はハフマン符号において5バイト(40ビット)で符号化されているものとする。
まず、第2破綻符号化処理において、CPU10は、非破綻カウンタの値に「0」を、変数nの値に「0」を代入して初期化すると共に、バイト位置sの値に「52」を、ビット位置tに「3」を代入する(図12のステップB10)。
次に、変数nの値を「0」から「7」まで変化させたときのそれぞれの復号開始位置、即ち、圧縮後英和参照部302の「8×52+0」ビット目から「8×52+7」ビット目までのそれぞれを復号開始位置として復号した場合に、破綻をするか否かを判定する。本図においては、変数nの値が「1」の場合、「8×52+1」ビット目を復号開始位置として復号した場合に破綻しないので、CPU10は、このときの破綻カウンタの値「1」と、変数nの値「1」とを、非破綻位置記憶領域320に格納する。また、変数nの値が「3」の場合に復号しても破綻しないので、CPU10は、破綻カウンタの値「2」と、変数nの値「3」とを、非破綻位置記憶領域320に格納する(ステップE15)。
そして、CPU10は、非破綻カウンタの値が「2」であることから(ステップB20;No)、破綻テーブル206を参照して符号ビット数を「1」とする。次に、符号化対象文字列に対応する文字列が含まれているビット位置「3」に対応する非破綻カウンタの値「2」を非破綻位置記憶領域320から読み出す。そして、読み出した非破綻カウンタの値「2」を、ビット値「1」で符号化する。すなわち、CPU10は、2番目の順位であることを表す「1」という符号で符号化する。
そして、CPU10は、バイト位置sと順位に基づいて符号化する(ステップE26)。具体的には、辞書型符号化方法で圧縮されているか否かの識別用の1ビット「1」と、バイト位置「52」を表した「0110100」と、符号化された順位「1」とを併せた符号とする。従って、「〔コンピュータ〕」は、「101101001」の「9」ビットで表現される。
このように、第2実施形態の辞書データ圧縮装置(コンピュータ)によれば、ビット位置を表す符号データを可変長で表すことができる。従って、第1実施形態においては、ビット位置を表す符号データを固定長として、必ず所定ビット数の符号を付加していたが、第2実施形態においては、ビット位置を表す符号データは必要最小限のビット数で済む。
[2.2 電子辞書装置]
[2.2.1 構成]
第2実施形態における電子辞書装置の構成は、第1実施形態において図8に示して説明した電子辞書装置100の構成において、ROM120を図15(a)に示すROM122に、RAM130を図15(b)に示すRAM132に、EEPROM140を図15(b)に示すEEPROM142に置き換えた構成と同様であり、以下、同一の構成要素には同一の符号を付してその説明を省略する。また、各フローチャートにおいて、第1実施形態のフローチャートと同一処理内容のステップについては同一の符号を付して、異なる部分を中心に説明する。
図15(a)を参照して、ROM122の構成について説明する。図15(a)に示すように、ROM122は、ハフマン符号テーブル1202と、破綻テーブル1204と、辞書伸張プログラム1210と、第2破綻復号プログラム1220とを記憶している。ここで、破綻テーブル1204は、図11(a)の破綻テーブル206と同一のテーブルである。
第2破綻復号プログラム1220は、CPU110が圧縮後英和主データ部1404に含まれている符号列を、圧縮後英和参照部1402を参照して復号する。このときに、バイト内におけるビット位置をずらして符号列を復号した場合に、破綻するか否かを検出する。このとき、破綻しないビット位置が複数有る場合には、ビット位置の順位を算出し、算出された順位に基づいて符号列を復号する。
図15(b)を参照して、RAM132の構成について説明する。図15(b)に示すように、RAM132は、非破綻位置記憶領域1320を備えている。ここで、非破綻位置記憶領域1320は、図11(b)の非破綻位置記憶領域320と同様の構成である。
図15(c)を参照して、EEPROM142の構成について説明する。図15(c)に示すように、EEPROM142は、圧縮後英和辞典データ1400を格納している。
[2.2.2 動作]
次に、第2実施形態における電子辞書装置100の動作について図を参照して説明する。図16は、第1破綻復号処理に係る電子辞書装置100の動作を説明するためのフローチャートである。この第2破綻復号処理は、CPU110が、ROM122の第2破綻復号プログラム1220を実行することによって実現される処理である。
CPU110は、図10の第1破綻復号処理と同様にしてステップD12において、「8×s+n」を復号開始位置として復号した場合に、復号した符号列が破綻しないことを判定すると(ステップD12;Yes)、非破綻カウンタの値に「1」を加え(ステップD14)、非破綻位置記憶領域1320に、非破綻カウンタの値と、変数nの値とを格納する(ステップF15)。また、破綻を検出する処理は、コンピュータ1で行った破綻を検出する処理(図13のステップB12)と同一の方法で実行する。
次に、CPU110は、非破綻カウンタの値が「1」で無い場合には(ステップD22;No)、順位を復号し、復号する符号列の開始位置であるバイト内におけるビット位置tを算出する(ステップF26)。具体的には、現在の非破綻カウンタの値に対応する符号ビット数を破綻テーブル1204より読み出す。そして、CPU110は、読み出された符号ビット数分の符号を、圧縮後英和参照部1402の符号列図9のステップC18で抽出したバイト位置の続きから抽出て順位に復号する。そして、CPU110は、順位に対応する変数nの値を非破綻位置記憶領域1320から読み出し、ビット位置tの値として代入する。そして、CPU110は、バイト位置s及びビット位置tの値に基づいて、「8×バイト位置s+ビット位置t」を開始位置として始まる符号列を復号し、文字列を伸張する(ステップF28)。
具体的に、図14を使って説明する。CPU110は、圧縮後英和主データ部1404から、符号列「101101001…」を復号対象符号列として抽出する。まず、復号対象符号列の最初の1ビット目が「1」であるから、CPU110は、続く7ビット「0110100」を抽出する。そして、符号「0110100」は10進数「52」であるから、復号対象符号列が参照している圧縮後英和参照部1402中の符号列は「52」バイト目のバイト内の何れかのビットから始まる符号列であると判定する。
次に、52バイト目内の各ビット位置から、それぞれ復号したときに、破綻するか否かを判定する(ステップD12〜D20)。ここで、破綻しない位置は「1」ビット目と、「3」ビット目であるため、CPU110は、非破綻カウンタの値を「2」とする。また、「1」ビット目のときは、非破綻カウンタの値「1」と、変数nの値「1」とを対応づけて非破綻位置記憶領域1320に格納する。また、「3」ビット目のときは、非破綻カウンタの値「2」と、変数nの値「3」とを対応づけて非破綻位置記憶領域1320に格納する。
次に、CPU110は、非破綻カウンタの値が「2」であることから(ステップD22;No)、破綻テーブル1204から、非破綻カウンタの値に対応する値「1」を抽出する。そして、CPU110は、符号「0110100」に続く1ビット分の符号「1」を抽出し、それに対応する変数nの値「3」を非破綻位置記憶領域1320から読み出す。そして、CPU110は、読み出された変数nの値をビット位置tの値として代入する。そして、「8×52+3」ビット目から符号列を復号し、文字列「〔コンピュータ〕」を伸張する。
このように、第2実施形態における電子辞書装置によれば、バイトアライメントの位置内での順位を利用することにより、当該バイト位置内のビット位置から始まる符号を復号することができる。
[3.変形例]
本発明の適用が可能な電子辞書装置は専用機としての電子辞書装置のみならず、例えば、携帯電話やPDA(Personal Digital Assistants)、パソコン等に本発明を適用して、これらの装置内に電子辞書装置を構築することとしてもよい。