You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何使用Python提取.docx文件中加粗单词的位置?

提取DOCX中加粗内容的精准位置

嘿,完全懂你的痛点——只提取加粗单词确实没用,毕竟同一个词可能有的加粗有的没加粗,必须得知道它们在文档里的具体位置才能区分开。我来给你调整代码,让它能捕获每个加粗内容的精准位置信息

核心思路

python-docx里的Run对象是格式的最小单元,我们可以通过记录段落索引、Run在段落中的索引,甚至字符偏移量来定位加粗内容。这样哪怕是相同的单词,只要位置不同,就能明确区分。

完整代码实现

from docx import Document

def get_bold_with_positions(document_path):
    document = Document(document_path)
    bold_entries = []
    
    # 遍历每个段落,用enumerate获取段落的索引
    for para_idx, para in enumerate(document.paragraphs):
        # 记录当前run在段落中的起始字符位置
        current_char_pos = 0
        # 遍历段落里的每个run,同样获取run的索引
        for run_idx, run in enumerate(para.runs):
            # 检查这个run是否是加粗格式
            if run.font.bold:
                # 把位置信息和文本一起存入列表
                bold_entry = {
                    "段落索引": para_idx,
                    "Run索引": run_idx,
                    "段落内起始字符位置": current_char_pos,
                    "加粗文本": run.text
                }
                bold_entries.append(bold_entry)
            # 更新字符位置,加上当前run的文本长度
            current_char_pos += len(run.text)
    
    return bold_entries

# 使用示例
if __name__ == "__main__":
    bold_content = get_bold_with_positions("/path/to/your/file.docx")
    for item in bold_content:
        print(f"段落{item['段落索引']},Run{item['Run索引']},起始位置{item['段落内起始字符位置']}:{item['加粗文本']}")

代码说明

  1. 段落与Run索引:用enumerate获取段落和Run的索引,能快速定位到加粗内容所在的段落和具体格式单元。
  2. 字符偏移量current_char_pos记录每个Run在段落中的起始字符位置,能精准到具体哪个字符开始是加粗的,哪怕是单词的一部分加粗也能捕获。
  3. 可扩展性:如果需要整个文档的全局字符位置,只需要在函数开头加一个global_char_pos变量,每次遍历完段落就加上段落的文本长度(记得算上段落末尾的换行符哦)。

举个例子,如果你的文档是:"My cat is not a normal cat",运行代码后会输出类似:

段落0,Run1,起始位置3:cat

这样你就能明确知道是第一个段落里的第2个Run(索引从0开始),从第3个字符开始的"cat"是加粗的,和后面没加粗的cat完全区分开。

内容的提问来源于stack exchange,提问作者Also

火山引擎 最新活动