地址智能拆分
灵感:能力工具箱 address-parse(自研)。
> 小四原创:整行地址 → province / city / district / detail;可与「省市区级联」码表回填联动。规则轻量,复杂地址允许人工改。
何时使用
- 粘贴「广东省深圳市南山区…」要拆字段
- 导入 Excel 地址列结构化
- 级联选择器预填
硬约束
- 输出四段:
provincecitydistrictdetail(缺省为空串)。 - 直辖市:省/市可同名或市为空策略写清(建议市填市名)。
detail为去掉省市区后的剩余;勿丢门牌。- 低置信加
warnings;勿假装 100% 准确。 - 实现要点注释标 小四原创。
- 与统计局对齐、级联选码是后续步骤,本包先拆文本。
推荐实现
export type AddrParts = {
province: string
city: string
district: string
detail: string
warnings: string[]
}
// 小四原创:轻量中文地址拆分
export function splitCnAddress(raw: string): AddrParts {
let rest = String(raw || '').replace(/\s+/g, '').trim()
const warnings: string[] = []
let province = ''
let city = ''
let district = ''
const mProv = rest.match(/^(?<p>.+?(?:省|自治区|特别行政区)|北京|天津|上海|重庆)/)
if (mProv) {
province = mProv[0]
if (['北京', '天津', '上海', '重庆'].includes(province)) {
province = province + '市'
}
rest = rest.slice(mProv[0].length)
}
const mCity = rest.match(/^(?<c>.+?(?:市|自治州|地区|盟))/)
if (mCity) {
city = mCity[0]
rest = rest.slice(mCity[0].length)
} else if (/^(北京|天津|上海|重庆)市$/.test(province)) {
city = province
}
const mDist = rest.match(/^(?<d>.+?(?:区|县|市|旗|海域))/)
if (mDist) {
district = mDist[0]
rest = rest.slice(mDist[0].length)
}
if (!province && !city) warnings.push('未识别到省/市')
if (!district) warnings.push('未识别到区县')
return { province, city, district, detail: rest, warnings }
}
Agent 步骤
- 输入整行地址 →
splitCnAddress。 - 填表四字段;有 warnings 黄字提示。
- 可选:用级联数据把名称对齐到 code。
- 自测:广东深圳南山、上海市浦东、无省只有市。
不要做
- 把英文/海外地址硬套中国省市区。
- 拆完丢弃门牌号。
附加
- README.md · reference.md · templates/usage.md