我有Spacy
解析为Doc
个实例的相当长的文字:
import spacy
nlp = spacy.load('en_core_web_lg')
doc = nlp(content)
doc
此处变为Doc
class instance。
现在,由于文本很大,我想在Jupyter笔记本中仅使用文档的一部分进行处理,实验和可视化 - 例如,前100个句子。
如何从现有文档的一部分切片并创建新的Doc
实例?
答案 0 :(得分:2)
实现目的的一种相当丑陋的方法是构建一个句子列表,并从一个句子子集中构建一个新文档。
sentences = [sent.string.strip() for sent in doc.sents][:100]
minidoc = nlp(' '.join(sentences))
感觉应该有一个更好的解决方案,但我想这至少有效。
答案 1 :(得分:1)
我的个人喜好将按字符进行切片。 Spacy的句子分段对于结构化文本非常好,但是对于结构性较差的文本,以固定的速率(即按字符)抓取一堆文本则更具可预测性:
char_end = 200
subdoc = nlp(doc.text[:char_end])
答案 2 :(得分:0)
在as_doc()
对象(https://spacy.io/api/span#as_doc)上使用Span
有一个更好的解决方案:
nlp = spacy.load('en_core_web_lg')
content = "This is my sentence. And here's another one."
doc = nlp(content)
for i, sent in enumerate(doc.sents):
print(i, "a", sent, type(sent))
doc_sent = sent.as_doc()
print(i, "b", doc_sent, type(doc_sent))
给出输出:
0 a This is my sentence. <class 'spacy.tokens.span.Span'>
0 b This is my sentence. <class 'spacy.tokens.doc.Doc'>
1 a And here's another one. <class 'spacy.tokens.span.Span'>
1 b And here's another one. <class 'spacy.tokens.doc.Doc'>
(为清楚起见,代码段已完整写出-当然可以进一步缩短)