专利申请人/权利人归一
对专利数据表中的申请人/专利权人名称做实体归一:统一企业后缀、母子公司归并、高校院所归并、美国个人申请人归入公司、联合申请人拆分。产出视觉优化的 xlsx(数据表 + 归一对照表两个 sheet)。
红线:所有归并结论必须可溯源(工商登记 / 官方校史 / 专利文献),查不到就标"待复核",禁止编造。
工作流程
Phase 1 — 文件解析与结构探查
- 支持格式:
.xlsx、.csv。.xls(老格式)先请用户在 Excel/WPS 中另存为.xlsx。 - 运行探查脚本(受管 Python,缺 openpyxl 时先
python -m pip install openpyxl装进受管 venv):
"C:\Users\23306\.workbuddy\binaries\python\versions\3.13.12\python.exe" \
"C:\Users\23306\.workbuddy\skills\patent-applicant-normalizer\scripts\normalize_pipeline.py" \
inspect "<数据文件路径>"
- 输出包含:sheet 列表、行数、全部表头、自动识别的候选归一列(含每个候选列的前几个样本值)、辅助列(受让人地址,R5 归一参考)。
Phase 2 — 列确认(必须交互)
- 用 AskUserQuestion(multiSelect + 自由输入兜底)列出候选列,请用户确认对哪些列执行归一。表头不规范、候选遗漏时,让用户自由输入列名。
- 同时确认两件事:
- 联合申请人是否拆分为多条记录(默认拆分;拆分时整行复制,专利关联信息天然保留,原始列内容不动);
- 拆分分隔符:默认;;|。中文申请人列可加、(先抽样确认无误拆再加)。严禁用,,拆分——英文公司名(如 Co., Ltd.)内含逗号。
Phase 3 — 名称库(映射表)构建
- 对每个选定列提取唯一值及出现次数;美国个人申请人归一务必带
--with-cols拉取受让人/受让人地址辅助值:
"C:\Users\23306\.workbuddy\binaries\python\versions\3.13.12\python.exe" \
"C:\Users\23306\.workbuddy\skills\patent-applicant-normalizer\scripts\normalize_pipeline.py" \
unique "<数据文件路径>" --column "<列名>" [--sheet "<sheet名>"] [--split] \
[--with-cols "受让人" "受让人地址"]
--split 按拆分后的名称计数(构建映射用这个);--with-cols 输出每个名称所在行的受让人、受让人地址候选值(各取 top 5)。
- 按
references/rules.md的 R1–R6 规则为每个唯一名称生成归一映射:
- R1 后缀统一、R3 高校院系/校区/更名:模式明确,可直接归一;
- R2 母子公司、R4 院所分支:涉及实际控制关系/法人主体,需 WebSearch 核验(国家企业信用信息公示系统、企查查/天眼查、公司官网年报、学校官网校史);无法确证 →review;
- R5 美国个人→公司:三路证据综合判定——①互联网搜索个人名(新闻/公告确认任职公司)→ ②同表"受让人地址"检索对应公司 → ③同表"受让人"字段;两路以上证据指向同一公司 →ok,矛盾或单一模糊证据 →review(详见 references/rules.md R5);
- 仅参股、独立法人研究院、三路均无果的个人 →keep(保留原名)或review。 - 唯一值多时按批处理(每批 200–500 个),逐批给进度。可先用样本批(30–50 个)给用户看归一格式,确认后再批量。
- 边缘案例、存疑项集中列出,请用户批量复核拍板后再应用。
- 将映射写入 config JSON(模板见下)。
status三值:ok已归一 /keep保留原名 /review待复核。
Phase 4 — 应用与输出
"C:\Users\23306\.workbuddy\binaries\python\versions\3.13.12\python.exe" \
"C:\Users\23306\.workbuddy\skills\patent-applicant-normalizer\scripts\normalize_pipeline.py" \
apply "<config.json 路径>"
执行内容:在每个选定原列后紧邻位置插入新列(表头"申请人归一"/"专利权人归一",多列时列名带序号区分)、按映射填值、按需拆分、写两个 sheet、应用样式。脚本输出 QC 摘要(拆分前后行数、名称数、ok/keep/review 计数、映射表中缺失的名称清单)。
config JSON 规范
{
"file": "D:/path/input.xlsx",
"sheet": "Sheet1",
"columns": [
{"header": "申请人", "new_header": "申请人归一"}
],
"split": {"enabled": true, "extra_separators": ["、"]},
"mapping": {
"原始名称A": {"out": "归一后名称A", "type": "企业", "status": "ok", "rule": "R2", "note": "全资子公司,工商信息可溯"},
"原始名称B": {"out": "原始名称B", "type": "企业", "status": "keep", "rule": "R2", "note": "仅参股,保留原名"},
"原始名称C": {"out": "原始名称C", "type": "高校", "status": "review", "rule": "R3", "note": "法人资格待核验"}
},
"output": "D:/path/output.xlsx"
}
columns[].header必须与表头完全一致(脚本先精确匹配,再唯一包含匹配)。new_header省略时自动派生:列名含"专利权人"或"权利人"→"专利权人归一";含"申请人"→"申请人归一";两者都不含则必须在 config 中指定。type取值:企业 / 高校 / 科研院所 / 个人 / 其他。output省略时默认<原文件名>_归一.xlsx。- 映射缺失的名称不报错中断,自动按
review处理并计入 QC 摘要。
输出规范(强制)
- Sheet1 数据表:原列后紧跟对应归一列;表头深蓝底白字加粗、冻结首行、自动筛选、列宽自适应(8–45,CJK 按 2 字符宽)、
review行黄色高亮。 - Sheet2 "归一对照表":列 = 序号 / 原始名称 / 归一后名称 / 主体类型 / 规则依据 / 出现次数 / 状态 / 备注。
ok无底色、keep绿色、review黄色。同样式。 - 拆分启用时:一条专利有 N 个联合申请人 → N 行,除归一列外其余字段全部复制,原始列保留完整原文。
常见坑
- csv 编码:脚本自动尝试 utf-8-sig → gbk,仍乱码时让用户确认编码。
- 英文表名:
Applicant/Assignee/Original Assignee/Current Assignee均为候选列;受让人地址/Assignee Address自动识别为 R5 辅助列。 - 映射键必须与拆分后的名称逐字一致(含空格、大小写);构建映射前以
unique --split的输出为准,不要手打名称。 - 大表(万行级)apply 正常可跑;超过 10 万行先提示用户可能耗时数分钟。
关于作者
本人专注于专利检索分析与专利导航服务,致力于帮助创新主体洞察技术态势、明晰研发方向。如果你需要专利检索、专利态势分析、专利导航报告等专业支持,或在使用本 skill 过程中有任何疑问,欢迎添加微信交流:xyk3320026,期待与你交流!