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模型:
- 首先安装解析美国地址的专用包:
npm install parse-address - 示例代码:
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
相关产品推荐
相关产品推荐

