中文、日语和韩语通常统称为“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 语言编写的文档,请执行以下操作:
使用 Engine 对象的 CreateDocumentProcessingParams 方法创建 DocumentProcessingParams 对象。
指定识别语言。使用 PageProcessingParams 子对象中 RecognizerParams 子对象的 SetPredefinedTextLanguage 方法。
选择适用于 CJK 语言的字体集。使用 SynthesisParamsForDocument 子对象的 ISynthesisParamsForDocument::FontSet 属性。
将配置好的 DocumentProcessingParams 对象传递给 FRDocument 对象的 Process 方法。如果您使用 Engine 对象的方法,则应在导出前调用 Engine 对象的某个合成方法,并将配置好的 SynthesisParamsForDocument 对象作为参数传入。
使用 FRDocument 对象的 Export 方法导出识别后的文本。如果导出为 PDF 或 PDF/A 格式,请指定所需的导出模式。
// 我们假设 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 );
.. .
语言使用