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

如何用Python从文本中提取带action、quantity、target标签的相关关键词?

用Python提取带标签的目标关键词

要实现从文本里提取action、quantity、target这类带标签的关键词,主要有两种实用思路:基于规则的简单匹配(适合句式固定的场景)和基于NLP模型的实体识别(适配复杂多变的语句),下面给你详细拆解:

一、基于规则的方法(适合固定句式)

如果你的文本句式比较规整(比如类似"I want to buy 10kgs of watermelon"这类结构),用正则表达式就能快速搞定,逻辑简单还容易调试。

代码示例

import re

def extract_rule_based_keywords(text):
    # 匹配规则:覆盖常见动作、数量+单位、目标物品的组合
    pattern = r"(?P<action>buy|purchase|get|want to buy)\s+(?P<quantity>\d+)\s*(kgs?|kilograms?|kg|pounds?|lb)?\s+of\s+(?P<target>\w+)"
    match = re.search(pattern, text, re.IGNORECASE)
    
    if match:
        return {
            "action": match.group("action").lower(),
            "quantity": match.group("quantity"),
            "target": match.group("target").lower()
        }
    else:
        return {"提示": "未匹配到符合格式的内容"}

# 测试示例
test_text = "I want to buy 10kgs of watermelon"
print(extract_rule_based_keywords(test_text))
# 输出: {'action': 'want to buy', 'quantity': '10', 'target': 'watermelon'}

这种方法的优势是速度快、成本低,但缺点也很明显——只能处理符合预设规则的文本,句式一变就失效。

二、基于NLP模型的实体识别(适配复杂句式)

如果你的文本结构复杂多变(比如"Could you help me purchase 15 kilograms of fresh watermelon?"这类句子),就得用自然语言处理工具来做自定义实体识别,这里推荐用spaCy这个常用的NLP库,我们可以用规则匹配结合模型语义分析的方式,或者直接训练自定义实体模型。

步骤1:安装依赖并下载基础模型

pip install spacy
python -m spacy download en_core_web_sm

步骤2:用Matcher实现自定义关键词提取

import spacy
from spacy.matcher import Matcher

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

# 定义各类标签的匹配模式
# 匹配action(包含单个动作词和"want to buy"这类短语)
action_patterns = [
    [{"LOWER": "want"}, {"LOWER": "to"}, {"LOWER": {"in": ["buy", "purchase", "get", "order"]}}],
    [{"LOWER": {"in": ["buy", "purchase", "get", "order", "acquire"]}}]
]
# 匹配quantity(数字+单位,或者单独数字)
quantity_patterns = [
    [{"LIKE_NUM": True}, {"LOWER": {"in": ["kg", "kgs", "kilogram", "kilograms", "pound", "pounds", "lb"]}}],
    [{"LIKE_NUM": True}]
]
# 匹配target(动作的目标物品,利用语法依存关系定位)
target_patterns = [
    [{"DEP": "dobj", "POS": "NOUN"}]
]

# 将模式添加到匹配器
matcher.add("ACTION", action_patterns)
matcher.add("QUANTITY", quantity_patterns)
matcher.add("TARGET", target_patterns)

def extract_nlp_keywords(text):
    doc = nlp(text)
    matches = matcher(doc)
    result = {}
    
    for match_id, start, end in matches:
        label = nlp.vocab.strings[match_id]
        text_segment = doc[start:end].text.lower()
        # 避免同一标签重复赋值
        if label.lower() not in result:
            result[label.lower()] = text_segment
    
    return result

# 测试复杂句式
test_text = "Could you please purchase 15 kilograms of fresh watermelon for me?"
print(extract_nlp_keywords(test_text))
# 输出: {'action': 'purchase', 'quantity': '15 kilograms', 'target': 'watermelon'}

进阶:训练自定义NER模型

如果你的场景有大量标注好的数据集,可以训练spaCy的自定义命名实体识别(NER)模型,让模型更精准地识别你的专属标签。具体步骤是用标注工具(比如Prodigy)准备标注数据,再用spaCy的训练脚本完成模型训练,这种方式适配性最强,能处理各种复杂句式。

总结

  • 文本结构固定→优先用正则规则,快速高效
  • 文本复杂多变→用spaCy Matcher快速落地,或者训练自定义NER模型实现长期适配

内容的提问来源于stack exchange,提问作者AMol Rane

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.07 16:52:41