在 spacy 中保存和加载 nlp 结果
Save and load nlp results in spacy
我想使用 SpaCy 分析许多小文本,我想存储 nlp 结果以供进一步使用以节省处理时间。我在 Storing and Loading spaCy Documents Containing Word Vectors 找到了代码,但出现错误,而且我找不到修复方法。我是 python.
的新手
在下面的代码中,我将 nlp 结果存储到一个文件中并尝试再次读取它。我可以写第一个文件,但找不到第二个文件 (vocab)。我还收到两个错误:未定义 Doc
和 Vocab
。
我们欢迎任何修复此方法或其他方法以达到相同结果的想法。
谢谢!
import spacy
nlp = spacy.load('en_core_web_md')
doc = nlp("He eats a green apple")
for token in doc:
print(token.text, token.lemma_, token.pos_, token.tag_, token.dep_,
token.shape_, token.is_alpha, token.is_stop)
NLP_FName = "E:\SaveTest.nlp"
doc.to_disk(NLP_FName)
Vocab_FName = "E:\SaveTest.voc"
doc.vocab.to_disk(Vocab_FName)
#To read the data again:
idoc = Doc(Vocab()).from_disk(NLP_FName)
idoc.vocab.from_disk(Vocab_FName)
for token in idoc:
print(token.text, token.lemma_, token.pos_, token.tag_, token.dep_,
token.shape_, token.is_alpha, token.is_stop)
我试过你的代码,我在下面的代码中修复了一些小问题。
请注意,SaveTest.nlp
是一个包含您的文档信息的二进制文件,
SaveTest.voc
是一个包含所有 spacy 模型词汇信息(向量、字符串等)的文件夹。
我所做的更改:
- 从
spacy.tokens
导入 Doc
class
- 从
spacy.vocab
导入 Vocab
class
- 使用以下命令下载
en_core_web_md
模型:
python -m spacy download en_core_web_md
请注意,spacy 对于每种语言都有多个模型,通常您必须先下载它(通常是 sm
、md
和 lg
模型)。阅读更多相关信息 here。
代码:
import spacy
from spacy.tokens import Doc
from spacy.vocab import Vocab
nlp = spacy.load('en_core_web_md')
doc = nlp("He eats a green apple")
for token in doc:
print(token.text, token.lemma_, token.pos_, token.tag_, token.dep_,
token.shape_, token.is_alpha, token.is_stop)
NLP_FName = "E:\SaveTest.nlp"
doc.to_disk(NLP_FName)
Vocab_FName = "E:\SaveTest.voc"
doc.vocab.to_disk(Vocab_FName)
#To read the data again:
idoc = Doc(Vocab()).from_disk(NLP_FName)
idoc.vocab.from_disk(Vocab_FName)
for token in idoc:
print(token.text, token.lemma_, token.pos_, token.tag_, token.dep_,
token.shape_, token.is_alpha, token.is_stop)
让我知道这是否对您有帮助,如果没有,请将您的错误消息添加到您的原始问题中,以便我提供帮助。
执行此操作的有效方法是使用 DocBin
代替:https://spacy.io/usage/saving-loading#docs
改编自文档的示例(您可以使用 doc_bin.to/from_disk
而不是 to/from_bytes
):
import spacy
from spacy.tokens import DocBin
doc_bin = DocBin()
texts = ["Some text", "Lots of texts...", "..."]
nlp = spacy.load("en_core_web_sm")
for doc in nlp.pipe(texts):
doc_bin.add(doc)
bytes_data = doc_bin.to_bytes()
# Deserialize later, e.g. in a new process
nlp = spacy.blank("en")
doc_bin = DocBin().from_bytes(bytes_data)
docs = list(doc_bin.get_docs(nlp.vocab))
我想使用 SpaCy 分析许多小文本,我想存储 nlp 结果以供进一步使用以节省处理时间。我在 Storing and Loading spaCy Documents Containing Word Vectors 找到了代码,但出现错误,而且我找不到修复方法。我是 python.
的新手在下面的代码中,我将 nlp 结果存储到一个文件中并尝试再次读取它。我可以写第一个文件,但找不到第二个文件 (vocab)。我还收到两个错误:未定义 Doc
和 Vocab
。
我们欢迎任何修复此方法或其他方法以达到相同结果的想法。
谢谢!
import spacy
nlp = spacy.load('en_core_web_md')
doc = nlp("He eats a green apple")
for token in doc:
print(token.text, token.lemma_, token.pos_, token.tag_, token.dep_,
token.shape_, token.is_alpha, token.is_stop)
NLP_FName = "E:\SaveTest.nlp"
doc.to_disk(NLP_FName)
Vocab_FName = "E:\SaveTest.voc"
doc.vocab.to_disk(Vocab_FName)
#To read the data again:
idoc = Doc(Vocab()).from_disk(NLP_FName)
idoc.vocab.from_disk(Vocab_FName)
for token in idoc:
print(token.text, token.lemma_, token.pos_, token.tag_, token.dep_,
token.shape_, token.is_alpha, token.is_stop)
我试过你的代码,我在下面的代码中修复了一些小问题。
请注意,SaveTest.nlp
是一个包含您的文档信息的二进制文件,
SaveTest.voc
是一个包含所有 spacy 模型词汇信息(向量、字符串等)的文件夹。
我所做的更改:
- 从
spacy.tokens
导入 - 从
spacy.vocab
导入 - 使用以下命令下载
en_core_web_md
模型:
Doc
class
Vocab
class
python -m spacy download en_core_web_md
请注意,spacy 对于每种语言都有多个模型,通常您必须先下载它(通常是 sm
、md
和 lg
模型)。阅读更多相关信息 here。
代码:
import spacy
from spacy.tokens import Doc
from spacy.vocab import Vocab
nlp = spacy.load('en_core_web_md')
doc = nlp("He eats a green apple")
for token in doc:
print(token.text, token.lemma_, token.pos_, token.tag_, token.dep_,
token.shape_, token.is_alpha, token.is_stop)
NLP_FName = "E:\SaveTest.nlp"
doc.to_disk(NLP_FName)
Vocab_FName = "E:\SaveTest.voc"
doc.vocab.to_disk(Vocab_FName)
#To read the data again:
idoc = Doc(Vocab()).from_disk(NLP_FName)
idoc.vocab.from_disk(Vocab_FName)
for token in idoc:
print(token.text, token.lemma_, token.pos_, token.tag_, token.dep_,
token.shape_, token.is_alpha, token.is_stop)
让我知道这是否对您有帮助,如果没有,请将您的错误消息添加到您的原始问题中,以便我提供帮助。
执行此操作的有效方法是使用 DocBin
代替:https://spacy.io/usage/saving-loading#docs
改编自文档的示例(您可以使用 doc_bin.to/from_disk
而不是 to/from_bytes
):
import spacy
from spacy.tokens import DocBin
doc_bin = DocBin()
texts = ["Some text", "Lots of texts...", "..."]
nlp = spacy.load("en_core_web_sm")
for doc in nlp.pipe(texts):
doc_bin.add(doc)
bytes_data = doc_bin.to_bytes()
# Deserialize later, e.g. in a new process
nlp = spacy.blank("en")
doc_bin = DocBin().from_bytes(bytes_data)
docs = list(doc_bin.get_docs(nlp.vocab))