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

如何在Spacy中实现Token与句子关联及构建可溯源的关键词列表

如何在spaCy中关联Token与原句子并实现关键词反向查询?

嘿,我来帮你搞定这个问题!在spaCy里关联Token和句子其实挺直观的,而且实现关键词反向查询也不难,咱们一步步来拆解:

一、让Token和对应的句子建立关联

spaCy处理文本后生成的Doc对象里,每个Token都自带一个sent属性——直接调用这个属性就能拿到它所属的句子(类型是Span对象)。而Doc的sents属性可以遍历所有被拆分好的句子,每个句子本身也是由一串Token组成的。

给你个实操的代码例子:

import spacy

# 加载预训练模型(英文用en_core_web_sm,中文换成zh_core_web_sm即可)
nlp = spacy.load("en_core_web_sm")

# 待处理文本
text = "SpaCy is a powerful NLP library. It makes tokenization and sentence segmentation easy. You can build keyword lists with it."
doc = nlp(text)

# 遍历Token,输出Token和它所属的句子
for token in doc:
    # 跳过停用词和标点,只看有效实词
    if not token.is_stop and not token.is_punct:
        print(f"Token: {token.text} | 所属句子: {token.sent.text}")

运行这段代码,你就能看到每个有效Token对应的完整句子了。token.sent返回的是Span对象,用.text就能提取出句子的文本内容。

二、构建关键词列表并反向查询所属句子

要实现这个需求,咱们可以分两步走:先筛选出符合要求的关键词,再建立关键词到句子的映射字典。之后查询时,直接查字典就能快速拿到关键词对应的所有原句子。

具体实现步骤:

  1. 定义关键词筛选规则:比如选名词、专有名词这类实词,或者去掉停用词/标点的内容;
  2. 遍历每个句子,把符合规则的Token(或短语)作为关键词,将句子文本关联到关键词上;
  3. 用字典存储映射关系,方便后续反向查询。

看这个示例代码:

# 基于上面生成的doc对象,构建关键词-句子映射字典
keyword_sent_map = {}

# 筛选规则:选取名词(NOUN)和专有名词(PROPN),排除停用词和标点
for sent in doc.sents:
    sent_text = sent.text
    for token in sent:
        if token.pos_ in ["NOUN", "PROPN"] and not token.is_stop and not token.is_punct:
            # 统一转小写,避免大小写导致的重复关键词
            keyword = token.text.lower()
            # 初始化关键词对应的句子列表
            if keyword not in keyword_sent_map:
                keyword_sent_map[keyword] = []
            # 避免同一个句子重复添加
            if sent_text not in keyword_sent_map[keyword]:
                keyword_sent_map[keyword].append(sent_text)

# 反向查询示例
query_keyword = "library"
if query_keyword in keyword_sent_map:
    print(f"关键词 '{query_keyword}' 所属的句子:")
    for idx, sent in enumerate(keyword_sent_map[query_keyword], 1):
        print(f"{idx}. {sent}")
else:
    print(f"未找到包含关键词 '{query_keyword}' 的句子")

进阶优化建议:

  • 如果想提取多词关键词(比如“NLP library”这类短语),可以用spaCy的Matcher或PhraseMatcher来匹配短语,再将短语作为关键词关联句子,原理和上面一致;
  • 用token.lemma_(词形还原)代替token.text,可以把“makes”和“make”这类变形词归为同一个关键词,让查询更精准——只需要把keyword = token.text.lower()改成keyword = token.lemma_.lower()就行。

内容的提问来源于stack exchange,提问作者Ravi Variar

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 10:23:36