如何提取PDF文档的语言

2024-05-23 14:06:24 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图提取任何通用pdf文档的语言,并使用python在CMS中设置它。我试图使用/Lang属性提取它,下面是代码示例:

pdfFileLang = findInDict('/Lang',pdfFile.resolvedObjects())



def findInDict(needle,indirectObjectDict):
    """ Returns the PDF Language """
    haystack = indirectObjectDict[0]
    LOG('pypdfutils.py getPdfLanguage key haystack',INFO,str(haystack))
    for key in haystack.keys():
        LOG('pypdfutils.py getPdfLanguage key',INFO,str(key))
        try:
             value = haystack[key]
             LOG('pypdfutils.py getPdfLanguage value',INFO,str(value))
             if key == needle:
                 return value
             else:
                 LOG('pypdfutils.py getPdfLanguage value1',INFO,str(value))
             internalDict = value.keys()
             LOG('pypdfutils.py getPdfLanguage key Dict',INFO,str(internalDict))
             if type(value) == types.DictType:
                 internalDict = value.keys()                 
             else:
                 LOG('pypdfutils.py getPdfLanguage value2',INFO,str(value))
                 for internalkey in internalDict.keys():
                     internalvalue = internalDict[internalkey]
                     LOG('pypdfutils.py getPdfLanguage key internalvalue',INFO,str(internalvalue))
                     if type(internalvalue) == types.DictType and internalvalue.has_key(needle):
                         return internalvalue[needle]                                  
        except Exception,e:
            LOG('pypdfutils.py getPdfLanguage',INFO,str(e))
            continue

但是当我看到日志时,我在字典中没有找到这样的属性“/Lang”。在


Tags: keypyinfologlangifvaluekeys
2条回答

看起来您试图在PDF文件中的所有词典中搜索“Lang”密钥。在

要检查PDF文件中的语言信息,您需要检查目录中的“Lang”条目。 然而,此条目的存在取决于用于创建PDF文件的PDF创建软件,而大多数PDF文件没有此条目。在

我不懂Python代码,但我相信您使用的PDF库将为您提供对trailer(dictionary)或catalog(root)dictionray的访问。如果您有权访问尾部dict,请从dict获取“Root”值。这是对目录(Root)字典的间接引用。然后将此引用解析为dict以获得目录字典。从这个目录dict获取/Lang值将为您提供属性。在

试试下面的方法

catalog = pdfFile.trailer['/Root'].getObject()
if has_key("/Lang"):
    lang = catalog['/Lang'].getObject()

请注意,我不是一个Python程序员,上面的代码片段是我的第一个Python代码(我不确定它是否有效)。:-)

请参考http://sourcecodebrowser.com/python-pypdf/1.10/classpy_pdf_1_1pdf_1_1_pdf_file_reader.html#a92be75503c895367083a846b3060e632上的pypdf参考

如PDF规范中所述: http://www.adobe.com/devnet/pdf/pdf_reference.html

文档目录中有一个“/Lang”键。在我的PDF规范版本中,第7.7.2节对此进行了解释。在

此语言键定义整个文档的假定语言,但标记不同的部分除外。在

所以,有两个注意事项: 1) 此“/Lang”键是可选的。如果没有的话,PDF规范说明语言是未定义的。在

2)此“/Lang”键可能被文件中的其他元素覆盖。因此,整个文档可能是英语,但第101页上的特定句子可能会将语言重新定义为法语。在

在您的例子中,您的算法应该首先尝试找到上面定义的整个文档语言。如果没有,那就看你怎么办了。您可以在整个文档中搜索“/Lang”键,看看是否找到其他键,但如果找到多个键,则必须确定这意味着什么。。。在

相关问题 更多 >