spaCy自然语言处理实战:spaCy词汇处理基础课程

词汇表和词汇属性

学习目标

通过本课程,你将学习如何在spaCy中使用词汇表(Vocab)和词汇(Lexeme)对象,掌握访问和使用词汇属性的方法,如词频、词性等,为更复杂的自然语言处理任务打下坚实的基础。

相关知识点

  • 词汇表和词汇属性

学习内容

1 词汇表和词汇属性

1.1 模型背景

在spaCy中,词汇表(Vocab)是一个非常重要的概念,它存储了所有已知词汇的集合。每个词汇表对象都包含了一个或多个词汇(Lexeme)对象,这些对象代表了文本中的具体词汇。词汇表不仅帮助spaCy高效地处理文本,还提供了访问词汇属性的接口,如词频、词性等。

1.2 安装依赖环境
!wget https://model-community-picture.obs.cn-north-4.myhuaweicloud.com/ascend-zone/notebook_datasets/6356c4b4309111f0be93fa163edcddae/en_core_web_sm-3.7.1.tar.gz --no-check-certificate
%pip install wheel==0.44.0
%pip install en_core_web_sm-3.7.1.tar.gz
1.3 加载模型

在spaCy中,词汇表通常与模型一起加载。当你加载一个spaCy模型时,词汇表会自动加载。例如,加载英文模型可以使用以下代码:

import spacy

# 加载英文模型
nlp = spacy.load("en_core_web_sm")
1.4 词汇表
  • 词汇表的结构

词汇表对象包含了一个字典,键是词汇的哈希值,值是对应的词汇(Lexeme)对象。哈希值是通过spaCy的哈希函数生成的,确保了词汇的唯一性。通过词汇表,你可以快速查找和访问词汇对象。

  • 词汇表的使用

词汇表对象提供了多种方法来访问和操作词汇。例如,可以通过以下方法获取特定词汇的Lexeme对象:

# 获取词汇表
vocab = nlp.vocab

# 获取特定词汇的Lexeme对象
lexeme = vocab["apple"]
print(lexeme)
  • 词汇表的扩展

如果你需要向词汇表中添加新的词汇,可以使用以下方法。这在处理自定义词汇或特定领域的术语时非常有用:

from spacy.tokens import Doc

# 创建一个空文档并添加词
words = ["banana"]
doc = Doc(nlp.vocab, words=words)


print("banana" in nlp.vocab) 
1.5 词汇(Lexeme)对象

词汇(Lexeme)对象是词汇表中的基本单元,代表了文本中的具体词汇。每个Lexeme对象包含了一系列属性。通过Lexeme对象,你可以深入了解词汇的特征和用法。

  • 词汇对象的属性

Lexeme对象提供了多种属性,以下是一些常用的属性:

  • text:词汇的文本形式
  • orth:词汇的哈希值
  • norm:词汇的标准化形式
  • lower:词汇的小写形式
  • shape_:词汇的形状(如大写字母、小写字母、数字等)
  • prefix_:词汇的前缀
  • suffix_:词汇的后缀
  • is_alpha:词汇是否为字母
  • is_digit:词汇是否为数字
  • is_punct:词汇是否为标点符号
  • is_space:词汇是否为空格
  • is_stop:词汇是否为停用词
  • is_oov:词汇是否为未登录词
  • is_title:词汇是否为标题
  • is_ascii:词汇是否为ASCII字符
  • like_num:词汇是否像数字
  • like_email:词汇是否像电子邮件地址
  • like_url:词汇是否像URL

访问词汇属性

在 spaCy 中:

Lexeme:是词汇表中的静态条目,包含与上下文无关的信息(如文本、哈希值、是否为停用词等)。

Token:是文本中的具体实例,包含上下文相关的信息(如词性、形态分析、依存关系等)。

通过以下方法可以获取获取词汇的词频和词性:

- 访问词汇属性

在 spaCy 中:

Lexeme:是词汇表中的静态条目,包含与上下文无关的信息(如文本、哈希值、是否为停用词等)。

Token:是文本中的具体实例,包含上下文相关的信息(如词性、形态分析、依存关系等)。

通过以下方法可以获取获取词汇的词频和词性:
  • 词汇对象的使用

词汇对象不仅提供了丰富的属性,还可以用于文本处理和分析。例如,你可以使用词汇对象来过滤文本中的特定词汇:

# 过滤文本中的停用词
text = "This is a sample text with some stop words."
doc = nlp(text)

filtered_words = [token.text for token in doc if not token.is_stop]
print(filtered_words)
1.6 访问词汇属性

在spaCy中,访问词汇属性是一个常见的操作,可以帮助你更好地理解和处理文本数据。通过词汇表和词汇对象,你可以轻松获取和使用词汇的各种属性。

  • 词频

词频是词汇在文本中出现的频率。在spaCy中,词汇的词频可以通过rank属性获取。词频越低,词汇越常见:

# 获取词汇的词频
print(lexeme.rank)
  • 词性

词性是词汇在句子中的语法角色。在spaCy中,词汇的词性可以通过pos_属性获取。词性标签包括名词、动词、形容词等:

# 2. 获取词性(通过Token)
doc = nlp("I like apples.")
for token in doc:
    if token.text.lower() == "apples":
        print(f"词性: {token.pos_}")  
        print(f"详细词性: {token.tag_}")  
  • 形态特征

形态特征描述了词汇的语法特征,如时态、数、格等。在spaCy中,词汇的形态特征可以通过morph属性获取:

doc = nlp("I like apples.")
for token in doc:
    if token.text == "apples":
        print(f"文本: {token.text}")
        print(f"形态特征: {token.morph}")  
        print(f"词性: {token.pos_}")      
  • 实践示例

以下是一个完整的示例,展示了如何使用词汇表和词汇对象来处理文本数据:

import spacy

# 加载英文模型
nlp = spacy.load("en_core_web_sm")

# 获取词汇表
vocab = nlp.vocab

# 获取特定词汇的Lexeme对象
lexeme = vocab["apple"]

# 打印词汇的Lexeme属性
print(f"Text: {lexeme.text}")
print(f"Orth ID: {lexeme.orth}")  
print(f"Norm ID: {lexeme.norm}")  
print(f"Lowercase ID: {lexeme.lower}")  
print(f"Shape: {lexeme.shape_}")  
print(f"Prefix: {lexeme.prefix_}")  
print(f"Suffix: {lexeme.suffix_}")  
print(f"Is Alpha: {lexeme.is_alpha}")
print(f"Is Digit: {lexeme.is_digit}")
print(f"Is Punct: {lexeme.is_punct}")
print(f"Is Space: {lexeme.is_space}")
print(f"Is Stop: {lexeme.is_stop}")
print(f"Is OOV: {lexeme.is_oov}")
print(f"Is Title: {lexeme.is_title}")
print(f"Is ASCII: {lexeme.is_ascii}")
print(f"Like Num: {lexeme.like_num}")
print(f"Like Email: {lexeme.like_email}")
print(f"Like URL: {lexeme.like_url}")

# 获取词汇的词频
print(f"Rank: {lexeme.rank}") 

# 词性标注需要上下文,通过处理文本获取Token
doc_example = nlp("I like apples.")
for token in doc_example:
    if token.text == "apples":
        print(f"POS: {token.pos_}")  
        break

# 过滤文本中的停用词
text = "This is a sample text with some stop words."
doc = nlp(text)

filtered_words = [token.text for token in doc if not token.is_stop]
print(f"Filtered Words: {filtered_words}")
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值