You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何基于textract提取的文本列表识别Word文档中的完整地址块?

识别非固定模板地址块的实现方案

输入文档示例(翻译后)

一些段落内容1

员工地址:A·约翰·多伊先生
黑客大道9号
美国某州
2192
电话:1411567323
传真:- 
邮箱:someemail@gmail.com

一些段落内容2
下一页
一些段落内容3

期望输出(翻译后)

员工地址:A·约翰·多伊先生
    黑客大道9号
    美国某州
    2192
    电话:1411567323
    传真:- 
邮箱:someemail@gmail.com

可行实现思路

1. 定位地址块的起止边界

  • 找起始点:遍历提取的文本行,优先定位带「员工地址:」这类明确标识的行作为地址块起点;如果没有明确标识,就找「电话、传真、邮编」等关键词密集出现的起始行。
  • 判断终点:当遇到空行之后的普通段落(既不含地址关键词,也不符合地址格式),或者连续两行非地址内容时,停止收集。

2. 判断行内容是否属于地址块

对于起始行之后的每一行,满足任意一条就归为地址块:

  • 包含「电话、传真、邮箱、街道、邮编、州」等地址相关关键词;
  • 符合地址常见格式:纯数字(邮编)、带数字的街道名、含@的邮箱、纯数字电话号码;
  • 前一行属于地址块且当前行非空(处理地址换行拆分的情况)。

3. 合并与格式化

把收集到的所有行合并成单个字符串,还可以按需求给子行添加缩进(比如示例中的格式)。

代码示例(Python)

# 假设textract提取的文本列表为text_lines
text_lines = [
    "一些段落内容1",
    "",
    "员工地址:A·约翰·多伊先生",
    "黑客大道9号",
    "美国某州",
    "2192",
    "电话:1411567323",
    "传真:- ",
    "邮箱:someemail@gmail.com",
    "",
    "一些段落内容2",
    "下一页",
    "一些段落内容3"
]

address_keywords = {"员工地址:", "电话:", "传真:", "邮箱:", "街道", "邮编", "州"}
address_block = []
collecting = False

for line in text_lines:
    line_stripped = line.strip()
    if not line_stripped:
        if collecting:
            address_block.append(line)
        continue
    
    # 触发地址块收集
    if "员工地址:" in line:
        collecting = True
        address_block.append(line)
        continue
    
    if collecting:
        is_address = False
        # 检查关键词
        if any(k in line for k in address_keywords):
            is_address = True
        # 检查格式
        elif "@" in line:
            is_address = True
        elif line_stripped.isdigit():
            is_address = True
        elif any(c.isdigit() for c in line_stripped):
            is_address = True
        # 处理换行的地址内容
        elif len(address_block) > 0 and address_block[-1].strip() != "":
            is_address = True
        
        if is_address:
            # 给子行加缩进(排除起始行和邮箱行)
            if not (address_block[0] == line or "邮箱:" in line):
                address_block.append("    " + line)
            else:
                address_block.append(line)
        else:
            collecting = False

# 合并为单个字符串
full_address = "\n".join(address_block)
print(full_address)

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.14 05:01:33