使用spacy对文档进行词形归并?

5
我是一个能翻译文本的有用助手。下面是您需要翻译的内容:

我有一个 spaCy 的 doc,我想进行词形还原。

例如:

import spacy
nlp = spacy.load('en_core_web_lg')

my_str = 'Python is the greatest language in the world'
doc = nlp(my_str)

如何将doc中的每个标记转换为其词形变化形式?
3个回答

6
每个标记都有一些属性,你可以遍历文档来访问它们。
例如:[token.lemma_ for token in doc] 如果要重构句子,可以使用:' '.join([token.lemma_ for token in doc]) 有关令牌属性的完整列表,请参见:https://spacy.io/api/token#attributes

那么,当在字符串上调用“doc”时,词形还原器会自动运行吗? - max
2
默认情况下是的。您可以控制默认运行哪些管道组件,但我不确定词形还原发生在哪里。https://spacy.io/usage/processing-pipelines#disabling - polm23
补充polm23的评论,这个链接中展示了处理管道的不同组件,并指出了词形还原发生的位置。 - piedpiper

6

如果您不需要管道中的某个特定组件,例如命名实体识别(NER)或解析器(parser),则可以禁用其加载。这有时可能会产生很大的差异并提高加载速度。

对于您的情况(使用spaCy使文档进行词形还原),您只需要使用tagger组件。

因此,以下是示例代码:

import spacy

# keeping only tagger component needed for lemmatization
nlp = spacy.load('en_core_web_lg',  disable=["parser", "ner"])

my_str = 'Python is the greatest language in the world'

doc = nlp(my_str)
words_lemmas_list = [token.lemma_ for token in doc]
print(words_lemmas_list)

输出:

['Python', '是', '世界上', '最伟大的', '语言']


2
如果有其他人在阅读此内容时想知道管道的不同组件(即可以启用/禁用哪些组件),则文档中的此链接显示了处理管道的不同组件。 - piedpiper

1
这篇答案涵盖了文本由多个句子组成的情况。
如果您想获取正在进行词形还原的所有标记列表,请执行以下操作:
import spacy
nlp = spacy.load('en')
my_str = 'Python is the greatest language in the world. A python is an animal.'
doc = nlp(my_str)

words_lemmata_list = [token.lemma_ for token in doc]
print(words_lemmata_list)
# Output: 
# ['Python', 'be', 'the', 'great', 'language', 'in', 'the', 'world', '.', 
# 'a', 'python', 'be', 'an', 'animal', '.']

如果您想获得每个标记均进行词形还原的所有句子列表,请执行以下操作:

sentences_lemmata_list = [sentence.lemma_ for sentence in doc.sents]
print(sentences_lemmata_list)
# Output:
# ['Python be the great language in the world .', 'a python be an animal .']

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接