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

如何使用spaCy判断句子中是否包含名词

使用spaCy判断句子中是否存在名词的实现方案

前置准备

首先安装spaCy以及对应语言的预训练模型:

  • 安装spaCy核心库:pip install spacy
  • 下载中文预训练模型:python -m spacy download zh_core_web_sm
  • 如果处理英文内容,替换模型下载命令为:python -m spacy download en_core_web_sm

核心实现逻辑

spaCy的词性标注体系中,名词相关的通用标签分为三类:

  • NOUN:普通名词
  • PROPN:专有名词(人名、地名、机构名等)
  • PRON:代词,可根据业务需求选择是否纳入名词判定范围

参考封装函数如下:

import spacy

# 加载对应语言模型,英文场景替换为 "en_core_web_sm"
nlp = spacy.load("zh_core_web_sm")

def has_noun(sentence: str, include_pron: bool = False) -> bool:
    """
    判断输入句子是否包含名词
    :param sentence: 待检测的目标句子
    :param include_pron: 是否将代词计入名词范围,默认不包含
    :return: 存在名词返回True,否则返回False
    """
    doc = nlp(sentence)
    target_tags = {"NOUN", "PROPN"}
    if include_pron:
        target_tags.add("PRON")
    # 遍历所有token匹配词性标签
    for token in doc:
        if token.pos_ in target_tags:
            return True
    return False

测试用例示例

# 中文测试
print(has_noun("我周末去博物馆看展览"))  # 输出True,包含"周末""博物馆""展览"等名词
print(has_noun("奔跑跳跃攀爬"))  # 输出False,全为动词

# 英文测试(切换英文模型后)
print(has_noun("I ate an apple this morning"))  # 输出True
print(has_noun("Run jump eat")) # 输出False

优化提示

如果需要更细粒度的名词筛选,可以调用token.tag_获取细分词性标签,比如中文的NR(人名)、NN(普通名词)等按需匹配;口语化、专业领域场景建议使用更大参数的预训练模型(如zh_core_web_md/zh_core_web_lg)提升标注准确率。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 17:48:02