You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

基于Python NLP的句子特定关键词提取咨询 含400万词库场景

算法逻辑

整体分三个核心环节:

  1. 数据预处理:加载百万行CSV文件,抽取四个字段(默认约定为style_no/style_name/color_no/color_name,可根据实际字段名调整)的所有值,分别构建属性值到完整行数据的映射关系,避免匹配后反复检索CSV。
  2. 匹配器构建:使用Spacy的PhraseMatcher构建多模式匹配规则,将四类属性的所有值分别注册为对应标签的匹配模式,PhraseMatcher针对大批量固定短语匹配做了性能优化,完全适配百万级数据的匹配需求。
  3. 匹配与结果输出:对输入文本做分词后运行匹配器,提取所有命中的属性,基于命中属性关联到对应的完整行数据,输出所有匹配到的字段内容,支持2-3个属性命中的场景。
实现步骤与可运行代码

首先安装所需依赖:

pip install spacy pandas
python -m spacy download en_core_web_sm

完整可运行代码:

import spacy
import pandas as pd
from spacy.matcher import PhraseMatcher

# 加载Spacy预训练模型
nlp = spacy.load("en_core_web_sm")

# 1. 加载并预处理CSV数据,可根据实际情况修改字段名
df = pd.read_csv("your_data.csv", dtype=str)
# 已确认行唯一可省略去重步骤
df = df.drop_duplicates()

# 2. 构建映射关系与匹配规则
matcher = PhraseMatcher(nlp.vocab, attr="LOWER") # 开启大小写不敏感匹配
attr_types = ["style_no", "style_name", "color_no", "color_name"]
value_to_row = {}

for attr in attr_types:
    # 提取当前属性非空唯一值
    values = df[attr].dropna().unique().tolist()
    # 生成匹配模式
    patterns = [nlp.make_doc(val) for val in values]
    matcher.add(attr, patterns)
    # 构建属性值到完整行的映射
    for val in values:
        row = df[df[attr] == val].iloc[0].to_dict()
        value_to_row[(attr, val.lower())] = row

# 3. 匹配函数
def match_attributes(input_text):
    doc = nlp(input_text)
    matches = matcher(doc)
    hit_rows = set()
    result = []
    for match_id, start, end in matches:
        attr_type = nlp.vocab.strings[match_id]
        match_val = doc[start:end].text.lower()
        row = value_to_row.get((attr_type, match_val))
        # 去重避免同一行重复返回
        if row and tuple(row.items()) not in hit_rows:
            hit_rows.add(tuple(row.items()))
            result.append(row)
    return result

# 测试示例
test_input = "BLA BLA ABC44, FUNNY CAT TEST COLOR BE SAFE, STAY HOME"
matches = match_attributes(test_input)
for item in matches:
    print(f"Style_no: {item['style_no']}, Style_name: {item['style_name']}, Color_no: {item['color_no']}, Color_name: {item['color_name']}")
优化建议
  • 首次运行可以用pickle将预处理好的matcher和value_to_row序列化存储到本地,后续启动直接加载,无需重复处理百万行数据,大幅降低启动耗时。
  • 若存在属性值重叠的情况,可调整PhraseMatcher的匹配优先级,给长度更长的属性值更高权重,避免短值优先匹配导致的错误。
  • 有模糊匹配需求时,可在精确匹配无结果的场景下,补充使用Spacy词向量计算输入片段与属性值的余弦相似度,取高于阈值的结果作为候选,适配拼写错误、表述差异的场景。
  • 相关进阶学习可直接参考Spacy官方内置的文档与示例,覆盖匹配器全量用法。

内容的提问来源于stack exchange,提问作者ashish zarekar

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.13 15:03:04