当前位置: 首页 > 面试题库 >

如何处理PDFMiner提取的文本中的CID?

孟绪
2023-03-14
问题内容

我有一些PDF格式的印地语,并且具有可提取的文本。我针对python
3.6使用pdfminer.six进行了提取。输出如下:
在此处输入图片说明

可以看到,有许多字符被转换为“(cid:number)”形式。

经过进一步分析,我发现PDF包含将字符代码映射到字形索引的CMAP。因此,CID是它映射到的字形在CMAP表中的字符标识。

但是这些字符代码与Unicode值有何关系?基本上,PDF查看器如何使用此映射显示字形?

此外,根据一个评论此类似的问题,这个过程可能并不合法。但是我不是想偷别人的字体。我想要文字。此过程如何变为非法?

既然有很多这样的问题,我想澄清一下,我的目的不是解决“ cid”问题。我想澄清问题的原因和非法的原因。

编辑:问题
页面用于pdfminer讨论此问题,作者明确指出该问题似乎没有可靠的解决方法。是否存在一些普遍的基本限制(例如,无法访问字体)使该问题持续存在?


问题答案:

但是这些字符代码与Unicode值有何关系?基本上,PDF查看器如何使用此映射显示字形?

在PDF内容流中找到的字符代码不需要以任何明显的方式与Unicode值相关。特别是,PDF查看器根本不需要Unicode代码点来显示字符代码以显示匹配的字形。

在PDF中,字体在字体程序中具有从字符代码到字形ID的映射(或映射序列),并且这种映射可能是完全任意的。

例如,在嵌入字体子集的情况下,子集字体程序常常是通过给予一个页面上使用的第一个字形的起始字形ID创建 Ñ ,然后给予第二,不同的字形在该页面ID 的n
+ 1
,再下,不同的字形id n + 2
等,然后字符代码通常与字形id相同,即上面的映射是身份映射。如果不再有其他信息,则文本提取器将没有机会正确html" target="_blank">执行其工作。

我想澄清问题的原因

常规文本提取通常具有以下选项来查找字符代码的Unicode值:

  • PDF字体 可能 包含 ToUnicode 映射(从字符代码到Unicode的映射),以支持诸如搜索字符串或在PDF查看器中复制和粘贴的操作。该映射立即提供了文本提取器所需的映射。

但是要当心:这些 ToUnicode 映射可能不完整,有时甚至包含故意不正确的映射!

  • PDF字体编码定义可以包含给定代码的预定义标准编码(例如 WinAnsiEncodingGBpc-EUC-H )的名称或标准化字符名称(例如 space7ntilde )。文本提取器仅需要知道该编码名称表示的编码或该字符名称表示的代码。

但是, 编码 也可能是不提供任何内容的身份( Identity–HIdentity–V其字符代码=字形代码
),并且字符名称也可能未标准化(例如 g17 )。

PDF规范说: 如果这些方法无法产生Unicode值,则无法确定字符代码代表什么,在这种情况下,合格的读者可以选择他们选择的字符代码。

如果您的文本提取输出,我想PDF字体具有不完整的 ToUnicode 映射。

实际上,还有更多位置可以查找其他信息,例如,字体程序可能包括其字形到Unicode的自己映射,但是这些其他信息也是可选的。

…及其违法原因。

在上述所有选项的情况下,我看不到任何明智的字体许可证被侵犯,特别是因为大多数这些选项甚至没有查看字体程序(例如*
.ttf)本身,而只是查看了PDF元数据包装它。

另一方面,例如,如果您有想法通过将字体的每个字形绘制到位图上并与其他任何东西很好地分开并对其应用OCR,来为那些缺少此类映射的字体构造
ToUnicode 映射,则您是该对象的接收者PDF突然会使用字体程序绘制原始文档以外的其他内容,这可能被视为许可证未涵盖的用法。



 类似资料:
  • 问题内容: 我正在寻找有关如何使用带有Python的PDFMiner从PDF文件提取文本的文档 或 示例。 看来PDFMiner更新了他们的API,我发现的所有相关示例都包含过时的代码(类和方法已更改)。我发现的那些使从PDF文件提取文本的任务更加容易的库正在使用旧的PDFMiner语法,因此我不确定如何执行此操作。 照原样,我只是在查看源代码,以查看是否可以解决。 问题答案: 这是一个使用当前版

  • 问题内容: 我正在尝试使用提取此 PDF文件中包含的文本。 我正在使用PyPDF2模块,并具有以下脚本: 运行代码时,得到以下输出,该输出与PDF文档中包含的输出不同: 如何提取PDF文档中的文本? 问题答案: 要从PDF提取文本,请使用以下代码

  • 问题内容: 如何 使用PHP 从PDF文档中提取文本? (我不能使用其他工具,我没有root用户访问权限) 我发现一些函数可用于纯文本,但是它们不能很好地处理Unicode字符: http://www.hashbangcode.com/blog/zend-lucene-and-pdf-documents-part-2-pdf- data-extraction-437.html 问题答案: 下载 c

  • 请建议我如何在servlet中读取这个编码文本并解码回原始值。

  • 我有一个Excel工作表,其中一栏填充了专利号。我需要提取每个相应专利的标题,并将其放在专利号旁边的单元格中。因此,代码应执行以下操作: 访问espacenet.com并打开需要名称的专利号。 获取标题。 将其放在所需单元格的Excel工作表中。 这是一个完美适用于第一个专利号的代码,但在这之后会立即出现错误。错误显示:“运行时错误'-2147417848(80010108)': 自动化错误调用的

  • 问题内容: 我想从放置在和标记中的HTML页面提取文本,因此我可以开始对该页面进行标记化,以便为每个页面构造倒排索引,以便回答搜索查询。 我如何使用jsoup 获取标签 要在该参数中写入的字符串是什么? 问题答案: 这可以做的工作 这是您可以使用的所有选择器的列表。 假设您有这个html: 要获得结果,您应该使用: 要么 假设现在您具有以下复杂的html 要从两个标签中获取值,您必须执行以下操作