跳转到主要内容
中文、日语和韩语通常统称为“CJK”。它们有几个共同特点,例如使用汉字,以及同时支持纵向和横向书写。 本节介绍使用 ABBYY FineReader Engine 12 识别和导出 CJK 语言文本时的一些特点。 首先,要识别 CJK 语言,你必须拥有支持中文日语韩语语言模块的 ABBYY FineReader Engine 许可证。有关许可证和模块的详细信息,请参阅许可部分。

识别语言

ABBYY FineReader Engine 支持以下用于 CJK 文本的预定义识别语言:
  • “ChinesePRC”
  • “ChineseTaiwan”
  • “Japanese”
  • “JapaneseModern”
  • “Korean”
  • “KoreanHangul”
要选择这些预定义语言之一,您可以使用 RecognizerParams 对象的 SetPredefinedTextLanguage 方法。
Japanese (Modern) 识别语言是一种复合语言,由日语、英语以及希腊语中的四个字母组成。该语言适用于识别现代日语文本,这类文本可能包含一些汉字、假名 (片假名或平假名) 符号,以及部分拉丁字母和/或希腊字母 (如报告、研究论文等) 。为了让所有主要以日语写成的文档获得最佳识别效果,我们强烈建议将 Japanese (Modern) 识别语言作为独立语言使用,不要与英语组合使用。
ABBYY FineReader Engine 支持由上述多种语言组成的识别语言组合,也支持将 CJK 语言与其他语言进行组合。

字体

为防止亚洲字符出现乱码,你必须为文档合成指定一种包含所需字符的字体,例如 Arial Unicode MS、SimSun。你可以使用 ISynthesisParamsForDocument::FontSet 属性来设置字体。FontSet 对象的 SystemFontSet 属性默认会选择与文档识别语言相对应的系统字体。

导出

您可以将 CJK 语言以“图像下文本”模式导出为 PDF/A (IPDFExportParams::TextExportMode = PEM\_ImageOnText) ,以确保文档外观保持一致。

识别和导出的流程

要处理使用 CJK 语言编写的文档,请执行以下操作:
  1. 使用 Engine 对象的 CreateDocumentProcessingParams 方法创建 DocumentProcessingParams 对象。
  2. 指定识别语言。使用 PageProcessingParams 子对象中 RecognizerParams 子对象的 SetPredefinedTextLanguage 方法。
  3. 选择适用于 CJK 语言的字体集。使用 SynthesisParamsForDocument 子对象的 ISynthesisParamsForDocument::FontSet 属性。
  4. 将配置好的 DocumentProcessingParams 对象传递给 FRDocument 对象的 Process 方法。如果您使用 Engine 对象的方法,则应在导出前调用 Engine 对象的某个合成方法,并将配置好的 SynthesisParamsForDocument 对象作为参数传入。
  5. 使用 FRDocument 对象的 Export 方法导出识别后的文本。如果导出为 PDF 或 PDF/A 格式,请指定所需的导出模式。
对于使用 CJK 语言编写的文本,请勿使用 Word 对象及其属性,也不要使用 CharParams 对象的 IsWordFirstIsWordLeftmost 属性。该处理技术仅出于内部目的才将文本行划分为“单词”,而这些符号组与实际单词并不一致。
// 我们假设 Engine 已创建
// 并且文档已加载
IEngine* Engine;
IFRDocument* frDocument;
HRESULT res; // 使用此变量检查对方法的调用是否成功
...
// 创建一个 DocumentProcessingParams 对象
IDocumentProcessingParams* params = 0;
IPageProcessingParams* pageParams = 0;
IRecognizerParams* recParams = 0;
res = Engine->CreateDocumentProcessingParams( ¶ms );
res = params->get_PageProcessingParams( &pageParams );
res = pageParams->get_RecognizerParams( &recParams );
 
// 指定识别语言
res = recParams->SetPredefinedTextLanguage( L"Japanese" );
 
ISynthesisParamsForDocument* synthesisParams = 0;
IFontSet* set = 0;
ISystemFontSet* systemSet = 0;
res = params->get_SynthesisParamsForDocument( &synthesisParams );
res = synthesisParams->get_FontSet( &set );
res = set->get_SystemFontSet( &systemSet );
 
// 选择字体集
res = systemSet->put_FontNamesFilter( FNF_Japanese );
// 识别并导出文档
frDocument->Process( params );
frDocument->Export( L"/opt/Demo.rtf", FEF_RTF, 0 );
...
FREngine::IEnginePtr Engine;
FREngine::IFRDocumentPtr frDocument;
...
// 创建 DocumentProcessingParams 对象
FREngine::IDocumentProcessingParamsPtr pDocumentProcessingParams = Engine->CreateDocumentProcessingParams();
// 指定识别语言
pDocumentProcessingParams->PageProcessingParams->RecognizerParams->SetPredefinedTextLanguage( "Japanese" );
// 选择字体集
pDocumentProcessingParams->SynthesisParamsForDocument->FontSet->SystemFontSet->FontNamesFilter = FREngine::FNF_Japanese;
// 识别并导出文档
frDocument->Process( pDocumentProcessingParams );
frDocument->Export( L"D:\\Demo.rtf", FREngine::FEF_RTF, 0 );
...
FREngine.IEngine engine;
FREngine.IFRDocument frdoc;
...
// 创建 DocumentProcessingParams 对象
FREngine.IDocumentProcessingParams dpp = engine.CreateDocumentProcessingParams();
// 指定识别语言
dpp.PageProcessingParams.RecognizerParams.SetPredefinedTextLanguage( "Japanese" );
// 选择字体集
dpp.SynthesisParamsForDocument.FontSet.SystemFontSet.FontNamesFilter = (int)FREngine.FontNamesFiltersEnum.FNF_Japanese;
// 识别并导出文档
frdoc.Process( dpp );
frdoc.Export( "D:\\Demo.rtf", FREngine.FileExportFormatEnum.FEF_RTF, null );
...

另请参阅

语言使用