在文档中的页面上查找单词

bir*_*git 7 python python-docx pdfminer

我正在寻找一个优雅的解决方案,以找到文档中的哪个页面出现我存储在python词典/列表中的某个单词.

我首先将.docx格式视为输入,并查看了具有搜索功能的PythonDocx,但显然没有docx/xml格式的页面属性.如果我解析文档,我可以<w:br w:type="page"/>在xml树中查找出现但不幸的是,这些不显示非强制分页符.

我甚至考虑首先将文件转换为PDF并使用类似PDFminer的内容页解析文档.

是否有任何直接的解决方案来搜索.docx文档中的字符串并返回它发生的页面

[('foo' ,[1, 4, 7 ]), ('bar', [2]), ('baz', [2, 5, 8, 9 )]
Run Code Online (Sandbox Code Playgroud)

mab*_*e02 3

解析组成docx的xml文件

\n\n

看来您的问题中最大的挑战是如何能够逐页解析文档。Word 文档的这个答案并不总是相同的,它取决于页边距、纸张设置、用于打开它的应用程序等。可以在 google group 中找到有关用于此目的的任何脚本准确性的良好推理

\n\n

但是,如果您对几乎 100% 的准确率感到满意,您就开始按照此google 群组中的建议寻找解决方案:\xc2\xa0

\n\n
\n

我发现我可以解压缩 .docx 文件并提取docProps/app.xml,然后使用 ElementTree 解析 XML 以获取元素<Pages></Pages>。我发现大多数情况下该数字是准确的,但我见过一些该元素中的数字不正确的情况。\xc2\xa0\xc2\xa0

\n
\n\n

使用 Win32com.Client

\n\n

另一种方法可能是win32com.client打开文件,对其进行分页,进行搜索,然后以您想要的格式返回结果。

\n\n

您可以在此答案中找到语法示例:

\n\n
from win32com.client import Dispatch\n#open Word\nword = Dispatch(\'Word.Application\')\nword.Visible = False\nword = word.Documents.Open(doc_path)\n\n#get number of sheets\nword.Repaginate()\nnum_of_sheets = word.ComputeStatistics(2)\n
Run Code Online (Sandbox Code Playgroud)\n\n

您还可以查看有关使用 win32com.client 在 Word 文档中查找和替换的答案。

\n