如何将从 PDF 中提取的文本(使用 textract)写入 python 中的 docx 文件

How do you write text extracted from PDF (using textract) to docx files in python

我在一个 pdf 文件中有几篇文章,我试图将这些文章分开并将它们写入单独的 Docx 文件。我设法使用正则表达式将它们分开,但是当我尝试将它们写入 docx 文件时,它会抛出此错误:ValueError:所有字符串必须 XML 兼容:Unicode 或 ASCII,没有 NULL 字节或控制字符。

我的代码如下:

my_path = "/path/to/pdf"

newpath = textract.process(my_path)
newpath2 = newpath.decode("UTF-8")

result = re.findall(r'\d+ words(.*?)Document \w+', newpath2, re.DOTALL)


save_path = "/path/to/write/docx/files/"

for each in result:
    import time
    time=str(time.time())
    finalpath = (os.path.join(save_path, time))
    finalpath2 = finalpath+".docx"
    mydoc = docx.Document()
    mydoc.add_paragraph(each)
    mydoc.save(finalpath2)

您可以删除所有空字符和控制字节字符并使用

.add_paragraph(remove_control_characters(each.replace('\x00','')))

remove_control_characters函数可以借用Removing control characters from a string in python线程。

代码片段:

import unicodedata
def remove_control_characters(s):
    return "".join(ch for ch in s if unicodedata.category(ch)[0]!="C")

my_path = "/path/to/pdf"

newpath = textract.process(my_path)
newpath2 = newpath.decode("UTF-8")

result = re.findall(r'\d+ words(.*?)Document \w+', newpath2, re.DOTALL)

save_path = "/path/to/write/docx/files/"

for each in result:
    import time
    time=str(time.time())
    finalpath = (os.path.join(save_path, time))
    finalpath2 = finalpath+".docx"
    mydoc = docx.Document()
    mydoc.add_paragraph(remove_control_characters(each.replace('\x00','')))
    mydoc.save(finalpath2)