当前位置: 首页 > news >正文

基于专利合作地址匹配的数据构建区域协同矩阵

文章目录

    • 地区地址提取
    • 完成的处理代码

在专利合作申请表中,有多家公司合作申请。在专利权人地址中, 有多个公司的地址信息。故想利用这里多个地址。想用这里的地址来代表区域之间的专利合作情况代表区域之间的协同、协作情况。

下图是专利合作表的一部分:

image-20250227200812529

最终的结果:

image-20250227201838199

假设在一个专利的地址中,有1家成都公司,1家武汉公司,2家北京公司:

成都市,武汉市,北京市,北京市

首先计算这些区域两两合作的关系:

import pandas as pd
from itertools import permutations
from collections import Counter
d = Counter(list(permutations(["成都市", "武汉市", "北京市", "北京市"], r=2)))
d

输出:

Counter({('成都市', '北京市'): 2,('武汉市', '北京市'): 2,('北京市', '成都市'): 2,('北京市', '武汉市'): 2,('北京市', '北京市'): 2,('成都市', '武汉市'): 1,('武汉市', '成都市'): 1})
rows = []
cols = []
values = []for k, v in d.items():row, col = krows.append(row)cols.append(col)values.append(v)demo_matrix = pd.DataFrame({"row": rows,"col": cols,"value": values,}
)
demo_df = demo_matrix.pivot(index="row", columns="col", values="value")
demo_df.fillna(0, inplace=True)
demo_df

输出:

image-20250227202716646

上述只是使用了一个专利合作地址构建的合作矩阵。特意选取了其中有多个同一个地区的例子进行展示。如上述例子中,同一个专利中有两家北京的企业,那么 北京-北京 的权重是2。代表了这个区域内部的合作关系。

地区地址提取

从专利的地址中,提取出省市信息。
最开始想的是写一个正则表达式,提取省市区,但是后面发现这不可行,因为会有自治区、省道,这些特殊名称的干扰。

为了达到比较高的准确率,我收集了全国66万个行政区划代码表,在其中逐个与专利的地址逐个对应。通过这种方式可以保证比较高的准确率。

image-20250227203734452

由于本次使用省与市的地址,使用下述代码筛选出只有省和市的数据,筛选代码如下:

address_df = pd.read_csv("66万个全国各级行政区划代码表.csv")
def is_str(item):return isinstance(item, str) and len(item) > 0
idxs = ((address_df["1"].apply(is_str))& (address_df["2"].apply(is_str))& (~address_df["3"].apply(is_str))
)
address_filter_df = address_df[idxs]
address_filter_df = address_filter_df.drop(columns=["3", "4", "5"])
address_filter_df = address_filter_df.rename(columns={"1": "prov", "2": "city"})

下图展示全国342个市级单位:

address_filter_df.head(), address_filter_df.shape

image-20250227203959220

完成的处理代码

处理整个表格的时候,把所有专利的区域合作次数加起来的代码如下:

加载专利合作表:

def split_address(text):if not isinstance(text, str):return []text = re.split(";", text)text = [item.strip() for item in text if len(item.strip()) > 0]return textaddress1 = "当前专利权人地址"
address2 = "工商注册地址"df = pd.read_excel("20250212合作申请.xlsx")

下述代码实现了,从专利地址中抽取出省市信息:

def extract_address(df, address) -> Dict:# 首先是直辖市判断Four_Municipality = ["北京市", "上海市", "天津市", "重庆市"]for item in Four_Municipality:if item in address:return {"prov": item, "city": ""}for _, row in df.iterrows():prov = row["prov"]city = row["city"]if prov in address and city in address:return {"prov": prov, "city": city}print(f"error not find prov and city, {address}")return None

利用抽取出的省、市,构建矩阵:

def build_marix(attr_name):addresses = df[address1].map(split_address).tolist()ans = {}for row_address in addresses:row_address_parse = []for address in row_address:address_parse = extract_address(address_filter_df, address)if address_parse is None:continuerow_address_parse.append(address_parse)row_address_parse = [tmp["prov"] + " " + tmp["city"] for tmp in row_address_parse]row_address_cnt = Counter(list(permutations(row_address_parse, r=2)))for k, v in row_address_cnt.items():if k not in ans.keys():ans[k] = 0ans[k] += vrows = []cols = []values = []for k, v in ans.items():row, col = krows.append(row)cols.append(col)values.append(v)df_matrix = pd.DataFrame({"row": rows,"col": cols,"value": values,})pivot_df = df_matrix.pivot(index="row", columns="col", values="value")pivot_df.fillna(0, inplace=True)pivot_df.to_excel(f"{attr_name}.xlsx")

项目文件夹的内容如下:

image-20250227204945954

http://www.lryc.cn/news/544087.html

相关文章:

  • Java集合List快速实现重复判断的10种方法深度解析
  • List的模拟实现(2)
  • 如何使用SaltStack批量替换SSL证书方案
  • Golang快速上手01/Golang基础
  • [Web 安全] 反序列化漏洞 - 学习笔记
  • 【学习笔记】Google的Lyra项目:基于神经网络的超低比特率语音编解码技术
  • Unity Dedicated Server 控制台 输出日志LOg 中文 乱码
  • 【Excel】 Power Query抓取多页数据导入到Excel
  • 去耦电容的作用详解
  • HTTPS 与 HTTP 的区别在哪?
  • let、const【ES6】
  • openharmony5.0中hdf框架中实现驱动程序的动态加载和管理的技术细节分析
  • TVS管学习记录
  • 数据库表的各种设计
  • JWT使用教程
  • 【大模型系列篇】如何解决DeepSeek-R1结构化输出问题,使用PydanticAl和DeepSeek构建结构化Agent
  • 老旧android项目编译指南(持续更)
  • linux中安装部署Jenkins,成功构建springboot项目详细教程
  • AI开发利器:Anaconda
  • java网络编程--基于TCP协议的网络编程
  • PageHelper新发现
  • Redis 数据结构和使用详解(带示例)
  • 深度解读 Chinese CLIP 论文:开启中文视觉对比语言预训练
  • SpringBoot 2 后端通用开发模板搭建(异常处理,请求响应)
  • 【Oracle专栏】sqlplus显示设置+脚本常用显示命令
  • DeepSeek 助力 Vue3 开发:打造丝滑的页眉(Header)
  • JVM线程分析详解
  • 【备赛】点亮LED
  • 【音视频】编解码相关概念总结
  • Python爬虫(四)- Selenium 安装与使用教程