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. Terraform中的for_each和count

    通过Terraform创建云主机时,在某些业务场景下,一个机器需要挂载多个云盘,一般云厂商都是单独创建云主机和云硬盘然后通过attachment的资源去挂载,因此我们的模板大致如下: resource ...

  2. 全网最适合入门的面向对象编程教程:39 Python常用复合数据类型-集合

    全网最适合入门的面向对象编程教程:39 Python 常用复合数据类型-集合 摘要: 在 Python 中,集合(set)是一种常用的复合数据类型.集合是一组无序且不重复的元素.与列表和元组不同,集合 ...

  3. Ubuntu 添加虚拟内存文件

    添加交换文件 准备工作 查看当前系统中启用的交换空间(swap space)的详细信息: sudo swapon --show 查看系统的内存和总交换空间的使用情况: free -h 为了有足够的空间 ...

  4. ChatGPT 客户端推荐

    通过按量计费的 Token 使用 ChatGPT 可以获得比免费 ChatGPT 更快的响应速度,但又不必支付昂贵的每月 20 美金订阅费用.下面是一些我个人喜欢的支持 Token 的 ChatGPT ...

  5. VC 单文档FormView视图增加打印预览

    1修改my.rc文件二处 3 TEXTINCLUDE BEGIN "#define _AFX_NO_OLE_RESOURCES\r\n" "#define _AFX_NO ...

  6. 鸿蒙应用开发:环境搭建(Mac)与项目构建

    ​ 2021年6月2日,华为发布了鸿蒙操作系统-HarmonyOS.它是一款"面向未来".面向全场景(移动办公.运动健康.社交通信.媒体娱乐等)的分布式操作系统.我们要基于Harm ...

  7. 合合信息亮相新加坡科技周——Big Data & AI World Expo展示AI驱动文档数字化的前沿能力

    合合信息亮相新加坡科技周--Big Data & AI World Expo展示AI驱动文档数字化的前沿能力   展会规模背景: 2023年10月11日-12日,合合信息在TECH WEEK ...

  8. HTML & CSS – dir, direction, writing-mode, ltr (left to rigth), rtl (right to left)

    前言 世界上有很多语言的阅读方向是不同的. 英文 中文 (以前才有竖排文字, 现在中文和英语一样了) 阿拉伯文 (Arabic) 面对不同的语言, HTML 和 CSS 就需要不同的写法. 虽然我没有 ...

  9. C# – 10.0

    前言 之前写过 6.0, 7.0, 8.0, 9.0 总结. 10.0 也是有些好东西哦, 尤其是 pattern matching 的完善, 差不多是时候可以重构 if else switch 的写 ...

  10. AJAX——简介

    AJAX 同步与异步 AJAX 快速入门