python:spaCy 工业级 NLP 库

spaCy 是 Python 生态中最主流、最适合生产环境的工业级 NLP 库,主打速度快、API简洁、开箱即用,支持分词、词性标注、NER、依存句法、词向量等全套 NLP 能力。


一、核心特点

  • 速度极快:底层 Cython 优化,处理效率远超 NLTK。
  • 开箱即用:内置 70+ 语言预训练模型(含中文),无需从零训练。
  • 统一 API :Doc/Token/Span 封装所有结果,便于后续处理。
  • 可扩展:支持自定义组件、与 PyTorch/TensorFlow/LLM 集成。
  • 可视化 :内置 displacy 做句法/实体可视化。

二、安装与模型下载(Python 3.7+)

1. 安装 spaCy
bash 复制代码
# 基础安装
pip install spacy
# 安装可视化工具(可选)
pip install spacy[displacy]
# 国内镜像加速
pip install spacy -i https://pypi.tuna.tsinghua.edu.cn/simple

pip show spacy
Name: spacy
Version: 3.8.13
Summary: Industrial-strength Natural Language Processing (NLP) in Python
Home-page: https://spacy.io
Author: Explosion
Author-email: contact@explosion.ai
License: MIT
Location: D:\Python311\Lib\site-packages
Requires: catalogue, confection, cymem, jinja2, murmurhash, numpy, packaging, preshed, pydantic, requests, setuptools, spacy-legacy, spacy-loggers, srsly, thinc, tqdm, typer, wasabi, weasel
Required-by: fastai
2. 下载预训练模型
bash 复制代码
# 英文轻量模型(推荐入门)
python -m spacy download en_core_web_sm
# 中文轻量模型(支持分词、NER、词性)
python -m spacy download zh_core_web_sm
# 英文大模型(含词向量,准确率更高)
# python -m spacy download en_core_web_lg

三、基础用法(英文 + 中文示例)

1. 英文示例:分词、词性、NER、依存
python 复制代码
import spacy

# 加载英文模型
nlp = spacy.load("en_core_web_sm")
text = "Apple is looking at buying U.K. startup for $1 billion."
doc = nlp(text)

# 1. 分词 + 词性 + 依存
print("=== Token 信息 ===")
for token in doc:
    print(f"{token.text:10} {token.pos_:6} {token.dep_:8} {token.head.text}")

# 2. 命名实体识别(NER)
print("\n=== 命名实体 ===")
for ent in doc.ents:
    print(f"{ent.text:15} {ent.label_:8} {spacy.explain(ent.label_)}")

# 3. 句子拆分
print("\n=== 句子 ===")
for sent in doc.sents:
    print(sent.text)
2. 中文示例:分词、词性、NER
python 复制代码
import spacy

# 加载中文模型
nlp = spacy.load("zh_core_web_sm")
text = "北京是中国的首都,字节跳动总部位于北京海淀区。"
doc = nlp(text)

# 分词 + 词性
print("=== 中文 Token ===")
for token in doc:
    print(f"{token.text:4} {token.pos_:6} {token.dep_:8}")

# 实体识别
print("\n=== 中文实体 ===")
for ent in doc.ents:
    print(f"{ent.text:6} {ent.label_:8} {spacy.explain(ent.label_)}")

四、核心对象与属性

  • Doc:处理后的文档,可遍历、切片、访问句子/实体。
  • Token :单个词/标点,常用属性:
    • token.text:原文
    • token.pos_:词性(如 NOUN/VERB/PROPN)
    • token.dep_:依存关系(如 nsubj/dobj)
    • token.lemma_:词形还原
    • token.ent_type_:实体类型(如 GPE/ORG)
  • Span :连续片段(如 doc[0:3]),可用于实体/短语提取。

五、进阶常用功能

1. 词向量(需 lg 模型)
python 复制代码
nlp = spacy.load("en_core_web_lg")
doc = nlp("cat dog banana")
print(doc[0].vector)  # cat 的向量
print(doc[0].similarity(doc[1]))  # cat 与 dog 相似度
2. 可视化(displacy)
python 复制代码
from spacy import displacy

# 实体可视化
displacy.serve(doc, style="ent")
# 句法树可视化
displacy.serve(doc, style="dep")
3. 自定义 pipeline(添加规则/组件)
python 复制代码
from spacy.language import Language

@Language.component("custom_component")
def custom_component(doc):
    # 自定义逻辑:给含 "AI" 的 Token 加标签
    for token in doc:
        if "AI" in token.text:
            token._.set("is_ai", True)
    return doc

# 注册并添加到 pipeline
nlp.add_pipe("custom_component", last=True)

六、与 NLTK 对比(快速选型)

特性 spaCy NLTK
定位 工业级、生产就绪 教学、研究、灵活实验
速度 极快(Cython) 较慢(纯 Python)
API 简洁统一 零散、多模块
预训练模型 丰富、多语言 较少、需额外下载
中文支持 较好(zh_core_web_sm) 需额外工具(如 jieba)

七、常见问题

  • 模型下载慢 :用国内镜像或手动下载 .whl 安装。
  • 中文分词不准 :可结合 jieba 自定义分词器,或使用更大模型。
  • 版本冲突 :建议用虚拟环境(venv/conda)隔离依赖。

这是一份可直接运行的 spaCy 中文 NER + 关键词提取 + 文本分类 完整脚本。

这是一份可复制、可直接运行、中文全功能 spaCy 脚本,包含:

  • 中文分词
  • 词性标注
  • 命名实体识别(NER)
  • 关键词提取
  • 简单文本分类(基于规则 + 实体)
  • 句法依存可视化
  • 干净输出格式

你只需要安装依赖就能跑。


一、先安装(复制运行)

bash 复制代码
pip install spacy
python -m spacy download zh_core_web_sm

二、完整可运行代码(直接复制)

python 复制代码
import spacy
from spacy import displacy
from collections import Counter

# ======================
# 1. 加载中文模型
# ======================
nlp = spacy.load("zh_core_web_sm")

# ======================
# 2. 测试文本(可自己改)
# ======================
text = """
北京是中国的首都,华为公司总部位于深圳龙岗区。
2025年人工智能技术快速发展,马斯克访问中国并参观了上海特斯拉工厂。
"""

# 处理文本
doc = nlp(text.strip())

# ======================
# 3. 中文分词 + 词性标注
# ======================
print("=" * 50)
print("【分词 & 词性标注】")
print("=" * 50)
for token in doc:
    print(f"词语:{token.text:<6} | 词性:{token.pos_:<8} | 依存:{token.dep_}")

# ======================
# 4. 命名实体识别 NER(最常用!)
# ======================
print("\n" + "=" * 50)
print("【命名实体识别 NER】")
print("=" * 50)
for ent in doc.ents:
    print(f"实体:{ent.text:<10} | 类型:{ent.label_:<8} | 说明:{spacy.explain(ent.label_)}")

# ======================
# 5. 关键词提取(基于名词/实体)
# ======================
print("\n" + "=" * 50)
print("【关键词提取】")
print("=" * 50)
keywords = []
for token in doc:
    # 提取名词、专有名词、实体词
    if token.pos_ in ["NOUN", "PROPN"] and token.ent_type_:
        keywords.append(token.text)

# 统计高频词
key_count = Counter(keywords)
for word, count in key_count.most_common(10):
    print(f"{word} ({count}次)")

# ======================
# 6. 简单文本分类(基于实体)
# ======================
print("\n" + "=" * 50)
print("【智能文本分类】")
print("=" * 50)

labels = []
for ent in doc.ents:
    if ent.label_ == "GPE":
        labels.append("地理/城市")
    if ent.label_ == "ORG":
        labels.append("公司/机构")
    if ent.label_ == "PERSON":
        labels.append("人物")
    if ent.label_ == "DATE":
        labels.append("时间")

labels = list(set(labels))  # 去重
print(f"这段文本包含类别:{', '.join(labels)}")

# ======================
# 7. 句法可视化(浏览器打开)
# ======================
print("\n正在启动句法可视化...(浏览器自动打开)")
displacy.serve(doc, style="dep", host="127.0.0.1", port=5000)

三、运行后你会得到:

  1. 分词结果
  2. 每个词的词性
  3. 实体识别(地点、公司、人名、时间)
  4. 自动提取关键词
  5. 自动判断文本类别
  6. 浏览器打开句法树可视化

四、如果你想,我还能帮你做:

  • 批量处理 Excel/CSV 文件
  • 训练自己的 NER 模型
  • 提取新闻中的公司、人物、地址
  • 做情感分析
  • 做文本摘要
相关推荐
迅猛龙办公室2 分钟前
Python实现获取星期字符串
java·前端·python
wewowilling13 分钟前
Coze智能体入门 --- AI Agent开发入门--第一章
python·低代码·agent·零代码·coze
Wx-bishekaifayuan16 分钟前
springboot公考微信小程序35511-计算机课程设计、毕业设计
spring boot·后端·python·django·课程设计·express·旅游
小猴子爱上树25 分钟前
跨马翻译:批量图片翻译+视频字幕+智能抠图,一站式跨境电商翻译工具
python·音视频
溪语流沙27 分钟前
【Web全栈进阶】OAuth实战——GitHub第三方登录
前端·python·github
计算机编程指导师30 分钟前
【计算机毕设选题】基于Hadoop的全球企业邮件安全合规数据可视化分析系统源码 毕业设计 选题推荐 毕设选题 数据分析 机器学习
大数据·hadoop·python·数据分析·毕业设计·课程设计·企业邮件
SimonKing37 分钟前
零大模型依赖!SQLite FTS5 + jieba 打造纯本地知识库搜索
后端·python·程序员
慢云智慧空间37 分钟前
从智能终端到空间AI,慢云科技如何重新定义智慧人居?
人工智能·python·科技
for_ever_love__38 分钟前
LangChain SelfQueryRetriever:让模型自己写过滤条件
人工智能·语言模型·langchain·nlp·全文检索·元数据查询·自查询检索
空 白II1 小时前
10.11 大语言模型研究简报:Anthropic 披露 Claude Agent 四类越权失序行为
人工智能·语言模型·自然语言处理