如何从金融新闻中精准提取公司名称?SmoothNLP金融实体识别手把手教程
【免费下载链接】SmoothNLP专注于可解释的NLP技术 An NLP Toolset With A Focus on Explainable Inference项目地址: https://gitcode.com/gh_mirrors/smo/SmoothNLP
SmoothNLP 是一款专注于可解释 NLP 技术的开源工具集,内置面向金融场景的实体识别能力。本教程手把手教你使用 SmoothNLP 的金融实体识别功能,从一条金融新闻中精准提取公司名称,并进一步构建企业知识图谱——即使你是 NLP 新手,也能在几分钟内跑通第一个示例 🚀
为什么金融实体识别这么难?
财经新闻里,公司名称往往以"简称、别名、中英混排"的形式出现:
"旷视科技预计将在今年9月在港IPO" "中行9.78亿收购国开行旗下15家村镇银行" "东芝23亿美元收购Landis+Gyr"
人工阅读容易,程序自动提取却很难。SmoothNLP 的金融实体识别针对这类场景做了专门优化,官方测试用例(smoothnlp/unittest/test2_NER.py)覆盖了"公司简称识别、英文公司名识别、非公司名词防误判"等典型 case,准确率表现稳定。
三步完成环境安装与首次调用
第 1 步:安装 SmoothNLP
pip install smoothnlp>=0.4.0💡 要求 Python 3 环境,版本检查逻辑见 smoothnlp/__init__.py。
第 2 步:一行代码提取公司名称
import smoothnlp smoothnlp.company_recognize("旷视科技预计将在今年9月在港IPO")第 3 步:解读返回结果
[{'charStart': 0, 'charEnd': 4, 'text': '旷视科技', 'nerTag': 'COMPANY_NAME', 'normalizedEntityValue': '旷视科技'}]每个实体都是带完整信息的字典:text是实体文本,charStart/charEnd是它在原句中的起止位置(方便高亮标注),nerTag是实体类型,normalizedEntityValue是规范化后的实体值。
两个核心接口:company_recognize 与 ner
SmoothNLP 提供了两层 API,按需选择:
| 接口 | 用途 | 适用场景 |
|---|---|---|
smoothnlp.company_recognize | 直接返回公司实体 | 只关心公司名称,最省事 |
smoothnlp.ner | 返回全部类型实体 | 需要同时抽取公司、金额、日期等多类信息 |
接口一:直接抽取公司
company_recognize内部实际调用ner接口,再按COMPANY_NAME标签过滤(实现见 smoothnlp/server/init.py),对你来说它就是一个"一键提公司"的快捷方式。
接口二:全量实体识别
import smoothnlp smoothnlp.ner("中国平安2019年度长期服务计划于2019年5月7日至5月14日通过二级市场完成购股")一次调用就能拿到 4 类实体:
COMPANY_NAME(中国平安)NUMBER(2019年)DATETIME(2019年5月7日、5月14日)
做金融信息结构化时,通常先用ner全量抽取,再按nerTag过滤出COMPANY_NAME,灵活度更高。
长新闻怎么处理?切句 + 批量处理
📌关键限制:单次请求的文本长度不能超过200 字符(限制逻辑见 smoothnlp/server/init.py)。处理长新闻时,标准姿势是"先切句、再识别":
import smoothnlp news = "句子1!句子2!句子3!" sentences = smoothnlp.split2sentences(news) # 按标点切句 for s in sentences: print(smoothnlp.company_recognize(s))处理整篇新闻或大批量语料时,直接把句子列表(list)传入接口即可,SmoothNLP 会默认用2 个线程并发请求提升吞吐:
from smoothnlp import config config.setNumThreads(2) # 调整并发线程数 smoothnlp.company_recognize(sentence_list) # 传入 list 触发并发并发与重试机制实现见 smoothnlp/server/init.py,遇到 QPS 超限时客户端会自动退避重试,无需额外处理。
进阶:从公司名称到企业知识图谱
提取出公司只是第一步,更进一步可以用 SmoothNLP 的知识图谱模块,从公司描述文本中抽取"公司—关系—属性"三元组:
from smoothnlp import kg kg.extract("上海培罗蒙西服公司成立于1928年,总部位于上海,是一家西服制作有限公司", pretty=True)返回的 N 元组包含subject、object、action、type和置信度_conf_score,可以进一步用kg.rel2graph构建 NetworkX 有向图。调用方式与字段说明详见 tutorials/知识图谱/README.md。
上图中,"上海培罗蒙西服公司"作为核心节点,与"有限公司"(状态修饰)、"于1928年"(成立)、"于上海"(地点)之间自动关联——这正是实体识别 + 关系抽取的组合效果。
常见问题速查
Q1:识别结果偶尔漏抽怎么办?这是 NER 模型的常见边界情况,官方专门为此维护了测试用例集,运行python -m unittest test2_NER可查看当前模型在"公司漏识别、非实体误判"上的表现,说明见 smoothnlp/unittest/README.md。
Q2:调试时想看详细日志?
from smoothnlp import config config.setLogLevel("DEBUG")Q3:想解析"百度与携程"这类多实体 Query 并区分修饰关系?可以关注 SmoothNLP 的 Query 解析功能(Pro 版),它能把"国产特斯拉"拆成"国产 + 特斯拉",功能介绍见 tutorials/Query解析/README.md。
总结
- ✅ 安装:
pip install smoothnlp>=0.4.0,Python 3 环境即可 - ✅ 提取公司:
smoothnlp.company_recognize一键抽取,smoothnlp.ner全量抽取 - ✅ 长文本:
smoothnlp.split2sentences切句预处理(单句 ≤200 字符),列表入参自动并发 - ✅ 进阶:
kg.extract把公司实体升级为结构化知识图谱
从一条新闻到一个企业知识图谱,SmoothNLP 帮你把"可解释的 NLP 推理"落到了实处。现在就可以动手跑通第一个示例了 ✨
【免费下载链接】SmoothNLP专注于可解释的NLP技术 An NLP Toolset With A Focus on Explainable Inference项目地址: https://gitcode.com/gh_mirrors/smo/SmoothNLP
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考