spaCy基础入门
spaCy 概览说明
spaCy 是一个现代、快速、工业级 NLP 工具库,专门为实际工程应用设计,提供:
• 分词(Tokenization)
• 词性标注(POS Tagging)
• 命名实体识别(NER)
• 依存句法分析(Dependency Parsing)
• 句子分割(Sentence Segmentation)
• 词向量(Word Vectors)
• 文本相似度计算(Similarity)
并且内置多语言模型(英、德、法、中等),调用统一、速度极快,适合构建生产级 NLP 系统。
spaCy 典型方法功能总结
功能 | 方法 / 属性 | 说明 |
---|---|---|
加载语言模型 | spacy.load() | 加载指定语言模型 |
文本分析 | nlp(text) | 对文本进行 NLP 分析 |
分词 | for token in doc | 拆分为单词 Token |
词性标注 | token.pos_ | 查看单词的词性 |
依存句法分析 | token.dep_ , token.head | 分析句子成分依赖关系 |
命名实体识别 | for ent in doc.ents | 提取命名实体(人名、地名、组织等) |
句子分割 | for sent in doc.sents | 将文本自动拆分为句子 |
词向量 | token.vector | 获取词向量(中大型模型) |
相似度计算 | token1.similarity(token2) | 计算两个词或文本的相似度 |
spaCy 功能 示例
0.安装与模型下载
pip install spacy
python -m spacy download en_core_web_sm
常用语言模型
模型名称 | 语言 | 特点 | 下载命令 |
---|---|---|---|
en_core_web_sm | 英文 | 轻量级,适合测试与学习 | python -m spacy download en_core_web_sm |
en_core_web_md | 英文 | 中等体积,内置词向量 | python -m spacy download en_core_web_md |
en_core_web_lg | 英文 | 大型模型,词向量丰富,准确率高 | python -m spacy download en_core_web_lg |
zh_core_web_sm | 中文 | 轻量中文模型,分词、词性标注、NER | python -m spacy download zh_core_web_sm |
xx_ent_wiki_sm | 多语言 | 支持多语言命名实体识别 | python -m spacy download xx_ent_wiki_sm |
📌 推荐:开发实战用
en_core_web_md
或en_core_web_lg
,学习测试用en_core_web_sm
加载模型
import spacy
nlp = spacy.load("en_core_web_sm")
1.分词 Tokenization
doc = nlp("Apple is looking at buying a U.K. startup.")
for token in doc:print(token.text)
输出
Apple
is
looking
at
buying
a
U.K.
startup
.
2.词性标注 POS Tagging
for token in doc:print(f"{token.text} -> {token.pos_}")
输出
Apple -> PROPN
is -> AUX
looking -> VERB
at -> ADP
buying -> VERB
a -> DET
U.K. -> PROPN
startup -> NOUN
. -> PUNCT
3.命名实体识别 Named Entity Recognition (NER)
for ent in doc.ents:print(f"{ent.text} -> {ent.label_}")
输出
Apple -> ORG
U.K. -> GPE
4.依存句法分析 Dependency Parsing
for token in doc:print(f"{token.text} <--{token.dep_}-- {token.head.text}")
输出
Apple <--nsubj-- looking
is <--aux-- looking
looking <--ROOT-- looking
at <--prep-- looking
buying <--pcomp-- at
a <--det-- startup
U.K. <--compound-- startup
startup <--dobj-- buying
. <--punct-- looking
5.句子分割 Sentence Segmentation
doc = nlp("""
Apple is looking at buying a U.K. startup.
NOVIDA is considering setting up a factory in China.
The Taliban is planning to hold a presidential election.
""")
for sent in doc.sents:print(sent.text)
输出
Apple is looking at buying a U.K. startup.NOVIDA is considering setting up a factory in China.The Taliban is planning to hold a presidential election.
6.词向量 Word Vectors (中大型模型)
下载重大模型:
python -m spacy download en_core_web_md
nlp = spacy.load("en_core_web_md")
doc = nlp("apple banana orange")
print(doc[0].vector)
7.相似度计算 Similarity
print(doc[0].similarity(doc[1])) # 1.0
总结
spaCy 与 NLTK 功能对比
功能 | NLTK | spaCy |
---|---|---|
分词 | word_tokenize() | doc 对象自动分词 |
词性标注(POS) | pos_tag() | token.pos_ |
命名实体识别(NER) | ne_chunk() | doc.ents |
依存句法分析 | 基本不支持 | token.dep_ , token.head |
句子分割 | sent_tokenize() | doc.sents |
词向量 | 需外部 gensim | 中大型模型内置 |
相似度计算 | gensim 或自写算法 | similarity() 内置 |
模型管理 | 无 | 内置多语言模型,直接调用 |
速度 | 较慢 | 极快 |
应用场景 | 学术、教学、自定义分析 | 工业级应用、实战项目 |
📌 小结:
- 📌 spaCy 更快更适合工业化项目
- 📌 NLTK 灵活适合教学与学术研究