代码之家  ›  专栏  ›  技术社区  ›  alecxe

将Spacy文档的一部分提取为新文档

  •  10
  • alecxe  · 技术社区  · 7 年前

    我有一个相当长的文本由 Spacy 变成一个 Doc 实例:

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

    doc 这里变成了一个 Doc class instance .

    现在,由于文本很大,我想在Jupyter笔记本中只使用文档的一部分进行处理、实验和可视化,例如,前100个句子。

    如何切片并创建新的 文件 实例是否来自现有文档的一部分?

    3 回复  |  直到 7 年前
        1
  •  8
  •   Sofie VL    5 年前

    有一个更好的解决方案,使用 as_doc() Span 对象( https://spacy.io/api/span#as_doc ):

    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'>
    

    (为了清晰起见,代码段完整写出-当然可以进一步缩短)

        2
  •  5
  •   Uvar    7 年前

    达到目的的一种相当丑陋的方法是构建一个句子列表,并从句子子集构建一个新文档。

    sentences = [sent.string.strip() for sent in doc.sents][:100]
    minidoc = nlp(' '.join(sentences))
    

    感觉应该有更好的解决方案,但我想这至少可行。

        3
  •  1
  •   Aus_10    6 年前

    char_end = 200
    subdoc = nlp(doc.text[:char_end])