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

Node.js如何从原始文本中提取地址 多格式订单邮件地址识别方法

Node.js提取非结构化文本中美国地址的可行方案

方案1:正则匹配(新手友好,无需额外依赖)

美国地址的格式标准化程度较高,通常遵循「门牌号+街道信息, 城市名, 州缩写(2位大写)+ 5位邮编」的规则,你可以先清洗文本再用正则匹配:

// 1. 清洗原始文本,去除多余的>、换行、连续空格、内嵌链接
function cleanRawText(raw) {
  return raw.replace(/[>]+/g, ' ').replace(/<[^>]+>/g, ' ').replace(/\s+/g, ' ').trim()
}

// 2. 匹配美国标准地址的正则
const addressRegex = /(\d+\s+[A-Za-z0-9\s,.]+?,\s*[A-Za-z\s]+?,\s*[A-Z]{2}\s*\d{5})/g

// 测试用例
const rawText1 = `order pickup details>>> >>> pick up before the store closes on Wed, Apr 11>>> >>> 
scan in-store for order pickup>>> >>> >>> 9019560>>>    Warrenville Target Store>>> 28201 Diehl Rd, Warrenville, IL 60555`
const rawText2 = `    Come to collect your order in the next 2 days (after that it'll be cancelled). Your payment will be processed as soon as you collect your order.>> >>  >> 
Pickup Store:>> >> Lush Naperville <https://click.e.lush.com/?qs=cbb6669d6dac2528c696ad86bb5b6fd3ebae7703b0b05e2a40dbc6705d0f3325fe891806d5a629b19dbc9b8e9d36e46e7d944d995ea896decd587d210c8bb838>>> 
119 S. Main Street , Naperville, IL 60540>> >> Choose between curbside or in-store pickup.>>`

console.log(cleanRawText(rawText1).match(addressRegex))
// 输出:[ '28201 Diehl Rd, Warrenville, IL 60555' ]
console.log(cleanRawText(rawText2).match(addressRegex))
// 输出:[ '119 S. Main Street , Naperville, IL 60540' ]

如果你的场景里地址格式有变体,只需要调整正则规则即可,入门门槛极低。

方案2:使用专用解析库(适配更复杂的场景,准确率更高)

如果遇到地址格式不规整、有变体的情况,可以直接用成熟的npm包来处理,不需要自己训练NLP模型:

  1. 首先安装解析美国地址的专用包:npm install parse-address
  2. 示例代码:
const parseAddress = require('parse-address')
function cleanRawText(raw) {
  return raw.replace(/[>]+/g, ' ').replace(/<[^>]+>/g, ' ').replace(/\s+/g, ' ').trim()
}

function extractAddress(raw) {
  const cleaned = cleanRawText(raw)
  // 按句子拆分后逐句尝试解析地址
  const sentences = cleaned.split(/[.?!]/g)
  for (const sen of sentences) {
    const parsed = parseAddress.parseLocation(sen)
    // 解析到州和邮编就认为是有效地址
    if (parsed?.state && parsed?.zip) {
      return sen.trim()
    }
  }
  return null
}

// 测试和方案1相同的文本,输出结果一致
console.log(extractAddress(rawText1))
console.log(extractAddress(rawText2))

优化建议

如果后续接入的商户越来越多,可以提前收集各商户邮件里的地址前置关键词(比如Pickup Store:、Store Address:、Pickup location:等),先截取关键词后面的文本再做解析,可以进一步提升准确率。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 10:36:06