1.背景

本qiang~本周在处理手头项目工作的时候,遇到了一个问题,就是友方提供了一个公司名称列表(量不小~,因此无法人工处理),且该公司名称列表均为简称,需要与库中的全称做一个映射匹配。

看似简单的一个需求,但传统的技术手段貌似都无法派上用场,比如语义相似度,文本编辑距离等等。

因此本qiang花费了半天的时间思考并解决了该任务,遂将工作记录如下,且本着开放共享,将核心源码进行公开,欢迎讨论~

2.整体框架

其实,原理也非常简单,由于本地数据库缺乏公司的完整信息,但可以借助互联网资源来搜索公司的相关信息,比如官网介绍、天眼查等来源,然后将检索后的结果通过大模型自带的推理能力输出最终结果。

本文中使用的搜索引擎是duckduckgo_search(需要kexue上网),大模型调用使用的duckduckgo_search内部集成的gpt-4o-mini(理论上只要能kexue上网,即可免费使用gpt-4o-mini)。

3. 效果展示

AutoX

深圳安途智行科技有限公司

Cosmose

翱觅苷(上海)信息科技有限公司

Magic Data

北京晴数智慧科技有限公司

Minimax

名之梦(上海)科技有限公司

Momenta

北京初速度科技有限公司

Testin云测

北京云测信息技术有限公司

一流科技

一流科技有限公司

三六零

三六零安全科技股份有限公司

东杰智能

东杰智能科技集团股份有限公司

东软

东软集团股份有限公司

中心通讯

中兴通讯股份有限公司

中科创达

中科创达软件股份有限公司

中科曙光

曙光信息产业股份有限公司

中科视拓

中科视拓(北京)科技有限公司

中译语通

中译语通科技股份有限公司

九四智能

广州九四智能科技有限公司

九章云极

北京九章云极科技有限公司

云天励飞

深圳云天励飞技术股份有限公司

云徙科技

广州云徙科技有限公司

亚信科技

亚信科技控股有限公司

4. 全部源码

由于调用检索相对耗时,因此分为公司简称检索和公司全称提取两个模块

4.1公司简称检索

from duckduckgo_search import DDGS
import json
import time def save_datas(file_path, datas, json_flag=True, all_flag=False, with_indent=False, mode='w'):
"""保存文本文件"""
with open(file_path, mode, encoding='utf-8') as f:
if all_flag:
if json_flag:
f.write(json.dumps(datas, ensure_ascii=False, indent= 4 if with_indent else None))
else:
f.write(''.join(datas))
else:
for data in datas:
if json_flag:
f.write(json.dumps(data, ensure_ascii=False) + '\n')
else:
f.write(data + '\n') def search_companies(companies):
results = []
for company in companies:
if '公司' in company:
results.append({
'company': company,
'search_results': 'company'
})
continue
text = f'{company} 公司名全称' search_results = None
while search_results is None:
try:
search_results = DDGS().text(text, max_results=10)
if search_results: break
except Exception as e:
print('sleep 2s')
time.sleep(2)
continue
results.append({
'company': company,
'search_results': search_results
})
time.sleep(2)
save_datas('data/公司简称检索结果.json', results) def get_datas(file_path, json_flag=True, all_flag=False, mode='r'):
"""读取文本文件"""
results = [] with open(file_path, mode, encoding='utf-8') as f:
for line in f.readlines():
if json_flag:
results.append(json.loads(line))
else:
results.append(line.strip())
if all_flag:
if json_flag:
return json.loads(''.join(results))
else:
return '\n'.join(results)
return results if __name__ == '__main__':
search_companies(get_datas('data/公司简称列表.txt', json_flag=False))

4.2公司全名提取

from duckduckgo_search import DDGS
import json
import time PROMPT = """你是一个助手,你的任务是基于输入的公司名简称以及搜索结果,分析并提取出公司名简称对应的公司名全称。要求如下:
1. "简称"是公司名简称,"搜索结果"是基于互联网的搜索后的资源,需要根据"简称"和"搜索结果"进行分析,并输出公司全称,如果无法确认,请返回"无";
2. 如果检索结果不包含公司全称,请基于你所学习的知识可以进一步判断;
3. 输出结果只包含公司名的全称信息,且只能包含一个,不需要输出解释信息;
4. 输入的公司名简称均是科技领域的知名公司,这点请注意; 示例:
简称: 京东
搜索结果:
1. 京东(中国1998年创立的自营式电商企业)_百度百科\n京东(股票代码:jd),中国自营式电商企业,创始人刘强东初期担任京东集团董事局主席兼首席执行官,2021年9月,徐雷获任集团总裁。京东旗下设有京东商城、京东金融、拍拍网、京东智能、o2o及海外事业部等。1998年6月18日,刘强东在 中关村成立京东公司。
2. 京东集团 - 维基百科,自由的百科全书\n东集团. 京东集团 (NASDAQ: JD 、 港交所: 9618 、 港交所: 89618 (人民幣結算)),前稱 360buy 和 京東商城,由刘强东于1998年6月18日创立,是一家总部位于 北京 的 中国 电子商务公司,主要為 B2C 模式的購物網站 。. 2014年,京东集团在 美国 纳斯达克证券交易 ...
3. 京东集团股份有限公司 - 爱企查\n简介: 京东集团股份有限公司(JD.com, Inc.)于2006年11月6日在在英属维尔京群岛注册成立的公司,通过中国境内的子公司和VIE开展经营活动,公司总部位于北京。. 京东是专业的综合性网上购物商城,是中国B2C市场最大的3C网购专业平台,是中国电子商务领域最受 ...
输出: 京东集团股份有限公司 现在,请按照要求完成:
简称: {company_name}
搜索结果: {search_results}
输出:
""" def save_datas(file_path, datas, json_flag=True, all_flag=False, with_indent=False, mode='w'):
"""保存文本文件"""
with open(file_path, mode, encoding='utf-8') as f:
if all_flag:
if json_flag:
f.write(json.dumps(datas, ensure_ascii=False, indent= 4 if with_indent else None))
else:
f.write(''.join(datas))
else:
for data in datas:
if json_flag:
f.write(json.dumps(data, ensure_ascii=False) + '\n')
else:
f.write(data + '\n') def get_datas(file_path, json_flag=True, all_flag=False, mode='r'):
"""读取文本文件"""
results = [] with open(file_path, mode, encoding='utf-8') as f:
for line in f.readlines():
if json_flag:
results.append(json.loads(line))
else:
results.append(line.strip())
if all_flag:
if json_flag:
return json.loads(''.join(results))
else:
return '\n'.join(results)
return results def get_company_full_names():
results = []
for ele in get_datas('data/公司简称检索结果.json'):
company_name = ele['company']
search_results = ele['search_results']
if isinstance(search_results, str):
results.append(f'{company_name}\t{company_name}')
continue prompt = PROMPT.format(company_name=company_name, search_results=search_results)
result = ''
while result == '':
try:
result = DDGS().chat(prompt, model='gpt-4o-mini')
if result.strip(): break
except Exception as e:
time.sleep(2)
continue
results.append(f'{company_name}\t{result}')
save_datas('data/公司全称提取结果.txt', results, json_flag=False) if __name__ == '__main__':
get_company_full_names()

5.总结

一句话足矣~

开发了一款基于公司简称补全公司全称的工具,包括具体的框架、实现原理以及完整源码,满满诚意,提供给各位看官。欢迎转发、订阅~有问题可以私信或留言沟通!

虽然需求比较简单,且实现过程也比较简单,但通过搜索引擎搜素以及大模型的各种奇技淫巧,相信可以完成更加复杂且效果惊艳的项目。

有兴趣的客官可以进行沟通合作,感谢~

6.参考

(1) Duckduckgo_search: https://github.com/deedy5/duckduckgo_search.git

LLM应用实战: 给个公司简称,输出公司全称的更多相关文章

  1. 记录某公司(简称SMKJ) 的一次面试

    昨天去了一家公司面试 Java 开发岗位,这篇文章主要是做一个面试的记录以及总结. 这家公司的规模大概100-200人,环境还可以,在一栋大厦租了两层办公室(31层和32层).一同搭电梯上去的还有一位 ...

  2. 庆祝下:iOS 开发者企业级计划(299美元/年帐户+邓白氏码免费) 和 Windows Phone公司应用(公司帐户99美元+Symantec企业证书299美元/年))顺利发布成功

    时间:2013-11-15,地址:http://192.168.0.8  网站可下载三个终端应用直接安装IOS,Windows Phone,Android iOS: 企业版IDP通过 iTunes.使 ...

  3. Unity3d外包公司|UE4外包公司:谷歌首款Daydream VR设备上手

    这款售价仅为79美元(约合人民币525元)的产品内含“够用”的手柄和一台头戴设备,只要你有一台支持月日,10月5日,dream平台的手机(未来将成为安卓平台的标配),就能体验VR的乐趣. 即使该产品最 ...

  4. 物联网常见通信协议RFID、NFC、Bluetooth、ZigBee等梳理

    1  概述 在上一篇文章<物联网常见通信协议与通讯协议梳理[上]-通讯协议>中,对物联网常用通信协议和通讯协议作了区分,并对通讯协议进行了分享:本文将对常用的通信协议进行剖析,重点面向市场 ...

  5. 基于EasyUI的Web应用程序及过去一年的总结

    前言 在这家公司服务了一年时间,一个多月之前已经提交了离职申请,好在领导都已经批准了,过几天就办理手续了,在此感谢领导的栽培与挽留,感谢各位同事在工作中的给我的帮助,感谢师傅(在我心中当他是我师傅,跟 ...

  6. 重学 Java 设计模式:实战迭代器模式「模拟公司组织架构树结构关系,深度迭代遍历人员信息输出场景」

    作者:小傅哥 博客:https://bugstack.cn - 原创系列专题文章 沉淀.分享.成长,让自己和他人都能有所收获! 一.前言 相信相信的力量! 从懵懂的少年,到拿起键盘,可以写一个Hell ...

  7. scrapy实战6爬取IT桔子国内所有融资公司:

    爬取融资公司,融资公司简介,融资时间,轮次,融资额,投资方,股权占比以及融资公司完整融资历史 如图 源码地址:https://github.com/huwei86/spiderITjuzi

  8. JavaScript之闭包就是个子公司

    在计算机科学中,闭包(Closure)是词法闭包(Lexical Closure)的简称,是引用了自由变量的函数.这个被引用的自由变量将和这个函数一同存在,即使已经离开了创造它的环境也不例外.所以,有 ...

  9. JVM 性能调优实战之:一次系统性能瓶颈的寻找过程

    玩过性能优化的朋友都清楚,性能优化的关键并不在于怎么进行优化,而在于怎么找到当前系统的性能瓶颈.性能优化分为好几个层次,比如系统层次.算法层次.代码层次…JVM 的性能优化被认为是底层优化,门槛较高, ...

  10. 项目实战7—Mysql实现企业级数据库主从复制架构实战

    Mysql实现企业级数据库主从复制架构实战 环境背景:公司规模已经形成,用户数据已成为公司的核心命脉,一次老王一不小心把数据库文件删除,通过mysqldump备份策略恢复用了两个小时,在这两小时中,公 ...

随机推荐

  1. NVM 使用

    NVM(Node Version Manager)是 Node.js 的版本管理工具. NVM 项目为 macOS 和 Linux 开发.Windows 用户需要使用 NVM for Windows. ...

  2. EF Core报错“Format of the initialization string does not conform to specification starting at index 0.”

    问题分析: 今天在EF Core数据库迁移的过程中无意中发现此错误,我的项目仅仅复制黏贴了配置文件而已,自此发现是数据库配置文件json在作祟. 对比了下发现是.json文件没有被设置"复制 ...

  3. JS 希尔排序完全理解

    希尔排序的思想直白点来说就是间隔对比,比如说 我有一个数组,长度为9,则第一次分割间隔为长度的1/3 + 1,则第一次对比就是1 比 4,2 比 5, 3 比 6,4 比 7,5 比 8 , 6 比 ...

  4. Angular 18+ 高级教程 – Getting Started

    前言 这篇主要是教大家如何快速搭建一个 Angular 项目,纯用于学习. Before Starting 开始前,我们需要知道几个小知识. 1. Angular Compilation 游览器支持的 ...

  5. k8s-部署

    目录 1 k8s 组件功能介绍 1.2 K8s 集群API: kube-apiserver 1.3 K8s 调度程序:kube-scheduler 1.4 K8s 控制器:kube-controlle ...

  6. 【赵渝强老师】大数据工作流引擎Oozie

    一.什么是工作流? 工作流(WorkFlow)就是工作流程的计算模型,即将工作流程中的工作如何前后组织在一起的逻辑和规则在计算机中以恰当的模型进行表示并对其实施计算.工作流要解决的主要问题是:为实现某 ...

  7. 论文解读《MASTERKEY: Automated Jailbreaking of Large Language Model Chatbots》

    导言 ​ 在参加东南大学网络安全学院夏令营的契机下,我第一次接触大模型安全领域.L老师是网络安全领域的一位大牛,在和L老师交流期间,被告知需要准备一次paper presentation介绍四大会中感 ...

  8. USB协议详解第11讲(USB描述符-总结)

    描述符回顾总结 1.其实所有的描述符都是USB设备用来描述自己属性及用途的,所以必须在设备端实现对应的描述符,主机会在枚举此设备的时候根据设备实现的描述符去确定设备到底是一个什么样的设备.设备需要的总 ...

  9. Transformer原理+代码详解

    简介 Transformer是一种深度学习模型,它在自然语言处理(NLP)领域中非常流行和有效.它最初由Vaswani等人在2017年的论文<Attention is All You Need& ...

  10. unable to find sdk 'iphoneos XX' 报错

    解决方法: Build Setting->Base SDK->修改为iOS