词汇表和词汇属性
学习目标
通过本课程,你将学习如何在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}")
984

被折叠的 条评论
为什么被折叠?



