メインコンテンツへスキップ
C# サンプルは、Windows 版 FRE でのみ使用できます。
ABBYY FineReader Engine では、さまざまな種類の辞書を認識言語に追加でき、認識精度を大幅に向上させることができます。

辞書の種類

辞書にはいくつかの種類があります。
この種類の辞書は、辞書サポートが組み込まれている定義済み言語用にあらかじめ用意されています (定義済み言語の一覧のコメントを参照) 。さらに、一部の言語については、.zmd アーカイブに専門用語辞書 (医療、法律など) が含まれています。標準辞書は 3 つまたは 4 つのファイルで構成されます。これらのファイル名は通常、言語の正式名または短縮名と同じで、拡張子は .amd、.amm、.amt、または .ame です。.amd、.amm、.amt 拡張子のファイルは常に存在します。これらのファイルは次のフォルダーに格納されており、変更することはできません。Data/ExtendedDictionaries (Linux)、Resources/ExtendedDictionaries (macOS)、Data\ExtendedDictionaries (Windows)。ABBYY FineReader Engine には .ame ファイルは含まれていません。.ame は辞書拡張、つまりユーザーが辞書に追加した単語を保存するための形式です。辞書拡張は ABBYY FineReader で作成できます。ABBYY FineReader ではこれをユーザー辞書と呼びます。作成したファイルは、上記の ABBYY FineReader Engine フォルダー配下のフォルダーにコピーできます (または、ILanguageDatabase::DictionaryExtensionsPath プロパティでそのフルパスを指定することもできます) 。ABBYY FineReader は、標準辞書の拡張を %appdata%\ABBYY\FineReader\15\FineReaderShell\UserDictionaries に保存します。辞書拡張は、ABBYY FineReader Engine で ILanguageDatabase::OpenDictionaryExtension メソッドを使用して編集できます。この種類の辞書は、StandardDictionaryDescription オブジェクトで記述されます。
これは Dictionary オブジェクトを使用して作成できます。Dictionary オブジェクトでは、そのメソッドを使って単語を追加または削除できます。Windows では、Dictionary オブジェクトを使用して、Dictionary ダイアログ から辞書を編集することもできます。このダイアログでは、Windows ANSI および Unicode エンコーディングの任意のテキストファイルをインポートできます (唯一の要件は、単語がスペースまたはその他の非アルファベット文字で区切られていることです) 。この種類の辞書は、UserDictionaryDescription オブジェクトで記述されます。
FineReader Engine のユーザー辞書は .amd ファイル形式で、どの言語に対しても作成できます。辞書サポートのない言語では、標準辞書の代わりとして使用できます。ABBYY FineReader のユーザー辞書は、FineReader Engine では辞書拡張と呼ばれ、.ame ファイルです。これは、辞書サポートがある言語についてのみ、その言語の標準辞書の拡張として作成できます。
ある言語でどの単語を許可し、どの単語を許可しないかを定義するルールを指定します。この種類の辞書は、RegExpDictionaryDescription オブジェクトで記述されます。
独自の種類の辞書を実装できます。この辞書は、クライアント側で実装される IExternalDictionary インターフェイスとして表されます。外部辞書の作成に関するガイドラインについては、このインターフェイスの説明を参照してください。この種類の辞書は、ExternalDictionaryDescription オブジェクトで記述されます。
ABBYY FineReader Engine には、すべての種類の辞書を記述するための DictionaryDescription オブジェクトが用意されています。これは、各種辞書の記述の基底となるオブジェクトです。 これらすべての辞書記述は、DictionaryDescriptions コレクションの要素です。

辞書記述の作成

辞書記述を作成するには、DictionaryDescriptions オブジェクトの AddNew メソッドを使用します。このメソッドは、DictionaryDescription オブジェクトへの参照を返します。対応する辞書タイプを記述するオブジェクトへの参照を取得するには、DictionaryDescription オブジェクトの GetAsStandardDictionaryDescriptionGetAsUserDictionaryDescriptionGetAsRegExpDictionaryDescriptionGetAsExternalDictionaryDescription メソッドを使用します。

辞書のプロパティ

各辞書では、その辞書を識別するプロパティを指定する必要があります。
  • 標準辞書 (StandardDictionaryDescription) の場合は、言語の ID を定義する LanguageId プロパティを指定します。
  • ユーザー辞書 (UserDictionaryDescription) の場合は、ユーザー辞書へのパスを指定する FileName プロパティを指定します。
  • 正規表現ベースの辞書 (RegExpDictionaryDescription) の場合は、正規表現を指定するために SetText メソッドを使用します。ABBYY FineReader Engine での正規表現の使用を参照してください。
  • 外部辞書 (ExternalDictionaryDescription) の場合は、辞書を指定するために SetDictionary メソッドを使用します。
すべての辞書タイプには重みが割り当てられます。辞書の重みは、認識時に検出されたその辞書内の単語の重みに影響します。weight パラメーターはパーセンテージで表され、0 以上である必要があります。重みが 0 であっても、その辞書が存在しないことを自動的に意味するわけではありません。100 パーセントを超える重みも使用できますが、このようなパラメーターを使用する際には十分な注意が必要です。重みは IDictionaryDescription::Weight プロパティで指定し、既定値は 100 です。 標準辞書には CanUseTrigrams オプションもあり、選択した辞書に基づいて作成されたトライグラムをプログラムで使用することを許可または禁止できます。トライグラムは 3 文字の組み合わせです。こうした組み合わせのすべてが実際の単語に現れるわけではありません。辞書にないトライグラムを含む単語は、発音不能である可能性が非常に高くなります。トライグラムは、信頼性の低い単語を除外するために使用されます。“general” 標準辞書ではトライグラムを有効にし、用語辞書では無効にすることをお勧めします。

認識言語の辞書

テキスト認識言語 (TextLanguage オブジェクト) には、その言語の単語を含む辞書と、使用禁止語を含む辞書の両方を設定できます。前者は、テキスト言語の各基本言語に対して指定され、IBaseLanguage::DictionaryDescriptions プロパティから参照できます。基本言語には辞書が関連付けられていない場合もあります。使用禁止語辞書は、ITextLanguage::ProhibitingDictionaries プロパティを通じて、テキスト認識言語に直接関連付けられます。 認識時に辞書内の単語だけを許可する場合は、IBaseLanguage::AllowWordsFromDictionaryOnly プロパティを TRUE に設定します。この場合、基本言語の辞書に見つからない単語が認識結果のテキストに現れるのは、ABBYY FineReader Engine が辞書候補をまったく見つけられなかった場合に限られます。

認識言語に辞書を関連付ける方法

  1. 利用可能なメソッドのいずれかを使用して TextLanguage オブジェクトを作成します (例: LanguageDatabase オブジェクトの CreateTextLanguage メソッド) 。
  2. 新しいテキスト言語の基本言語コレクションを取得します (BaseLanguages プロパティを使用) 。
  3. 新しい BaseLanguage オブジェクトを作成し、基本言語のコレクションに追加します。
  4. 新しい基本言語の辞書記述コレクションを取得します (DictionaryDescriptions プロパティ) 。
  5. 辞書記述を作成し、それを基本言語の辞書記述コレクションに追加します。DictionaryDescriptions コレクションの AddNew メソッドを使用します。
種類の異なる辞書を複数作成し、それらを 1 つの基本認識言語の DictionaryDescriptions コレクションに追加できます。
  1. [任意] 作成した辞書の重みを指定します。
  2. 辞書の識別プロパティを指定します。標準辞書の場合は LanguageId プロパティ、ユーザー辞書の場合は FileName プロパティ、正規表現ベースの辞書の場合は IRegExpDictionaryDescription::SetText メソッドを呼び出し、外部辞書の場合は IExternalDictionaryDescription::SetDictionary メソッドを呼び出します。
  3. [任意] BaseLanguage オブジェクトのその他のプロパティを指定します。
  4. [任意] TextLanguage オブジェクトの ProhibitingDictionaries プロパティを使用して禁止辞書を設定します。
  5. 作成した TextLanguage オブジェクトを RecognizerParams オブジェクトの TextLanguage プロパティに割り当てます。
これらの手順を Windows で実装するには、以下のコード サンプルを参照してください。
// グローバル ABBYY FineReader Engine オブジェクト
FREngine::IEnginePtr Engine;
// LanguageDatabase オブジェクト
FREngine::ILanguageDatabasePtr languageDatabase;
...
// TextLanguage オブジェクトを作成し、その基本言語コレクションを取得
FREngine::ITextLanguagePtr pTextLang = languageDatabase->CreateTextLanguage();
FREngine::IBaseLanguagesPtr pBaseLangCollection = pTextLang->BaseLanguages;
// BaseLanguage オブジェクトを作成し、その辞書記述コレクションを取得
FREngine::IBaseLanguagePtr pBaseLang = pBaseLangCollection->AddNew();
pBaseLang->InternalName = L"SampleBaseLanguage";
pBaseLang->PutLetterSet( FREngine::BLLS_Alphabet, L"abc123" );
FREngine::IDictionaryDescriptionsPtr pDictDescCollection = pBaseLang->DictionaryDescriptions;
// 標準辞書記述を作成し、コレクションに追加
FREngine::IDictionaryDescriptionPtr pDicDescription =
 pDictDescCollection->AddNew( FREngine::DT_SystemDictionary);
// [optional] 作成した辞書の重みを指定
pDicDescription->Weight = 100;
// 辞書の識別プロパティを指定
FREngine::IStandardDictionaryDescriptionPtr pStandardDic = pDicDescription->GetAsStandardDictionaryDescription();
pStandardDic->LanguageId = FREngine::LI_EnglishUnitedStates;
// [optional] BaseLanguage のその他のプロパティを指定
pBaseLang->AllowWordsFromDictionaryOnly = VARIANT_TRUE;
// RecognizerParams オブジェクトを作成
FREngine::IRecognizerParamsPtr pParams = Engine->CreateRecognizerParams();
// 作成した TextLanguage オブジェクトを TextLanguage プロパティに割り当て
pParams->TextLanguage = pTextLang;
...
// グローバル ABBYY FineReader Engine オブジェクト
FREngine.IEngine engine;
// LanguageDatabase オブジェクト
FREngine.ILanguageDatabase languageDatabase;
...
// TextLanguage オブジェクトを作成し、そのベース言語のコレクションを取得します
FREngine.ITextLanguage TextLang = languageDatabase.CreateTextLanguage();
FREngine.IBaseLanguages BaseLangCollection = TextLang.BaseLanguages;
// BaseLanguage オブジェクトを作成し、その辞書記述のコレクションを取得します
FREngine.IBaseLanguage BaseLang = BaseLangCollection.AddNew();
BaseLang.InternalName = "SampleBaseLanguage";
BaseLang.set_LetterSet( FREngine.BaseLanguageLetterSetEnum.BLLS_Alphabet, "abc123" );
FREngine.IDictionaryDescriptions DictDescCollection = BaseLang.DictionaryDescriptions;
// 標準辞書の記述を作成してコレクションに追加します
FREngine.IDictionaryDescription DicDescription = DictDescCollection.AddNew( FREngine.DictionaryTypeEnum.DT_SystemDictionary );
// [任意] 作成した辞書の重みを指定します
DicDescription.Weight = 100;
// 辞書の識別プロパティを指定します
FREngine.IStandardDictionaryDescription StandardDic = DicDescription.GetAsStandardDictionaryDescription();
StandardDic.LanguageId = FREngine.LanguageIdEnum.LI_EnglishUnitedStates;
// [任意] BaseLanguage のその他のプロパティを指定します
BaseLang.AllowWordsFromDictionaryOnly = true;
// RecognizerParams オブジェクトを作成します
FREngine.IRecognizerParams recParams = engine.CreateRecognizerParams();
// 作成した TextLanguage オブジェクトを TextLanguage プロパティに割り当てます
recParams.TextLanguage = TextLang;
...

キャッシュ辞書

キャッシュ辞書は、小規模な辞書 (約 100 語) で、処理中でも簡単に変更できます。キャッシュ辞書は、たとえば処理中に文書に関する新しい情報が見つかり、より適切な辞書をより絞り込んで選択できる場合に使用できます。このような辞書は、field 単位の認識に適しています。 たとえば、認識する必要があるフォーム上の field が 2 つあるとします。1 つは都市名、もう 1 つは通り名です。都市名はすでに認識されていて、その都市の通り名の一覧もあるとします。この場合、該当するキャッシュ辞書に通り名を読み込むことで、通り名をより高速かつ高精度に認識できます。 ABBYY FineReader Engine では、キャッシュ辞書を操作するために、FRPage オブジェクトの AddWordsToCacheDictionaryAddWordToCacheDictionary、および CleanCacheDictionary メソッドが提供されています。
キャッシュ辞書を使用するには、IEngine::AutoCleanRecognizerSession プロパティを FALSE に設定する必要があります。AutoCleanRecognizerSession プロパティの既定値は TRUE です。つまり、FineReader Engine は各ページの認識後に認識セッションをクリーンアップし、その際にキャッシュ辞書もクリーンアップされます。ユーザーデータが誤って破棄されるのを防ぐため、FineReader Engine はこのモードでのキャッシュ辞書の使用を禁止しています。キャッシュ辞書を使用する場合は、必要に応じて IEngine::CleanRecognizerSession メソッドを呼び出し、認識セッションを手動でクリーンアップする必要があります。認識セッションをクリーンアップする必要があるタイミングについては、このメソッドの説明を参照してください。

関連項目

言語の扱い スペースを含むWordsの認識