You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

基于企业名称对无线上公开信息的中小本地企业进行行业分类的Python程序化可扩展方案咨询

基于企业名称对无线上公开信息的中小本地企业进行行业分类的Python程序化可扩展方案咨询

我刚好之前帮本地商会做过类似的小项目,这种没公开信息的小公司分类确实头疼,纯靠名称的话得从关键词匹配+规则引擎入手,再结合少量人工校准,完全能做到可扩展。下面分享几个我亲测有效的思路和代码片段:

一、先搭一个基础的关键词规则库(核心)

小公司的名称里一般都会直接带行业相关的关键词——比如“XX汽修”“XX便利店”“XX科技工作室”,先整理一套行业-关键词映射表,这是最直接、准确率最高的基础方案,而且可以随着新数据不断迭代补充。

代码示例:基础关键词匹配

# 自定义行业-关键词映射表,可根据你的数据集随时扩充
sector_keywords = {
    "Tech": ["科技", "数码", "软件", "网络", "编程", "信息技术", "AI"],
    "Industrial": ["制造", "机械", "五金", "加工", "汽配", "模具", "重工"],
    "Finance": ["财务", "会计", "投资", "财税", "贷款", "担保", "理财"],
    "Retail": ["超市", "便利店", "生鲜", "百货", "服饰", "礼品", "鞋帽"],
    "Services": ["家政", "保洁", "维修", "美容", "美发", "餐饮", "物流", "快递"]
}

def preprocess_name(company_name):
    # 预处理:去掉常见后缀,避免干扰匹配
    common_suffixes = ["有限公司", "有限责任公司", "店", "部", "行", "工作室", "中心"]
    for suffix in common_suffixes:
        if company_name.endswith(suffix):
            company_name = company_name[:-len(suffix)]
    # 统一转半角(处理全角字符输入)
    def full2half(s):
        return s.translate(str.maketrans('0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ', '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'))
    return full2half(company_name.strip())

def match_sector_by_keywords(company_name):
    cleaned_name = preprocess_name(company_name)
    # 遍历匹配关键词,优先匹配精准词汇
    for sector, keywords in sector_keywords.items():
        for keyword in keywords:
            if keyword in cleaned_name:
                return sector
    # 无匹配项标记为待人工分类
    return "Unclassified"

# 测试效果
test_companies = ["朝阳五金加工店", "诚信财税咨询有限公司", "快乐便利店", "星辰科技工作室"]
for name in test_companies:
    print(f"{name} → {match_sector_by_keywords(name)}")

优化点

  • 给关键词加权重:比如“软件”比“科技”更精准,遇到同时包含的情况,优先返回权重高的关键词对应的行业
  • 补充模糊匹配:比如“XX电脑经营部”里的“电脑”可以关联到Tech行业,把这类衍生关键词也加入映射表

二、进阶:语义匹配处理模糊名称

有些小公司名称里没直接带行业词,比如“XX商行”“YY贸易中心”,这时候可以用中文分词+词向量语义匹配来补全分类能力。不用依赖大模型,自己用小语料训练一个轻量模型就行。

代码示例:轻量语义匹配

import jieba
from gensim.models import Word2Vec
import numpy as np

# 用行业核心词汇训练一个极小的词向量模型(也可以直接用本地加载的中文预训练模型)
train_corpus = [
    ["科技", "数码", "软件", "网络", "编程"],
    ["制造", "机械", "五金", "加工", "汽配"],
    ["财务", "会计", "财税", "投资", "理财"],
    ["超市", "便利店", "零售", "百货", "生鲜"],
    ["家政", "保洁", "维修", "餐饮", "物流"]
]
# 训练轻量模型
model = Word2Vec(sentences=train_corpus, vector_size=100, window=3, min_count=1, workers=2)

def get_name_vector(cleaned_name):
    # 分词后取词向量的平均值作为名称的语义向量
    words = jieba.lcut(cleaned_name)
    valid_vectors = [model.wv[word] for word in words if word in model.wv]
    if not valid_vectors:
        return None
    return np.mean(valid_vectors, axis=0)

def match_sector_by_semantic(company_name):
    cleaned_name = preprocess_name(company_name)
    name_vec = get_name_vector(cleaned_name)
    if not name_vec:
        return "Unclassified"
    
    # 预计算各行业的语义中心向量
    sector_centers = {
        "Tech": np.mean([model.wv[word] for word in train_corpus[0]], axis=0),
        "Industrial": np.mean([model.wv[word] for word in train_corpus[1]], axis=0),
        "Finance": np.mean([model.wv[word] for word in train_corpus[2]], axis=0),
        "Retail": np.mean([model.wv[word] for word in train_corpus[3]], axis=0),
        "Services": np.mean([model.wv[word] for word in train_corpus[4]], axis=0)
    }
    
    # 计算余弦相似度,取最匹配的行业
    max_similarity = -1
    best_sector = "Unclassified"
    for sector, center_vec in sector_centers.items():
        similarity = np.dot(name_vec, center_vec) / (np.linalg.norm(name_vec) * np.linalg.norm(center_vec))
        if similarity > max_similarity:
            max_similarity = similarity
            best_sector = sector
    return best_sector

# 测试模糊名称
test_fuzzy_names = ["XX商行", "YY贸易中心", "ZZ维修服务部"]
for name in test_fuzzy_names:
    print(f"{name} → {match_sector_by_semantic(name)}")

三、可扩展的迭代优化机制(越用越准的关键)

纯程序不可能100%准确,得结合人工校准形成闭环:

  • 把标记为Unclassified的公司导出,用简单的本地工具(比如Streamlit搭个5分钟就能搞定的小界面)让人工分类,然后自动提取新的关键词补充到sector_keywords
  • 给关键词加优先级:比如“餐饮”比“管理”优先级高,避免“XX餐饮管理公司”被误分到Finance或Services的其他子类
  • 按地域调整规则:比如沿海地区的“XX海鲜行”归Retail,内陆地区可能归Services(餐饮类),可以给不同地域加专属关键词组

四、避坑提醒

  • 预处理一定要做:别小看“有限公司”“店”这些后缀,很容易干扰关键词匹配,先清理干净再处理
  • 别迷信大模型:这类没公开信息的小公司,大模型的猜测全是瞎蒙,反而不如自己搭的规则库+轻量NLP模型靠谱
  • 小步迭代:不用一开始就做完美,先搭基础规则库,跑一遍现有数据,把错误和未分类的整理出来,再逐步补充规则和模型语料,效率最高

我当时用这套思路处理了2000多家本地小公司,一开始准确率大概70%,迭代3次后就到90%以上了,剩下的10%人工处理也花不了多少时间,完全符合可扩展的要求。如果你的数据集有特殊属性(比如都是某类地域的公司),还可以针对性加规则,灵活调整就行~

火山引擎 最新活动