【问题标题】:Extracting a part of a Spacy document as a new document将 Spacy 文档的一部分提取为新文档
【发布时间】:2018-05-14 18:54:30
【问题描述】:

我有一个相当长的文本被 Spacy 解析成一个 Doc 实例:

import spacy

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

doc 在这里变成了Doc class instance

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

如何从现有文档的一部分切片并创建一个新的Doc 实例?

【问题讨论】:

  • 具体问题有些不清楚。你可以通过Doc[index1:index2]Doc中获取一个切片,就像你通常使用python列表或数组一样。只要内容是字符串,切片内容也可以正常工作。如果你想对句子本身进行切片,那么它会变得有点困难。
  • @Uvar 对不起,如果它有点混乱。切片doc[index1:index2] 的第一个问题是切片的结果将是Span 类型而不是Doc 类型,第二个问题,正如您所提到的,是“按句子切片”。谢谢。
  • 好吧...我将在这里提出一个完全古怪的东西..随意将其更正为更有意义的东西,例如将句子切入理解而不是外面。 (我没有对它进行广泛的测试,所以我觉得工作很安全):sentences = [sent.string.strip() for sent in doc.sents][:100]minidoc = nlp(' '.join(sentences))
  • @Uvar 是的,我想这是一种方法,请随时将其发布为答案。不确定 Spacy 是否有更好的选择。谢谢!

标签: python nlp document spacy


【解决方案1】:

Span 对象 (https://spacy.io/api/span#as_doc) 上使用 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'>

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

【讨论】:

    【解决方案2】:

    我个人的偏好是按字符切片。 Spacy 的句子分割非常适合结构化文本,但对于结构不佳的文本,以固定速率(即按字符)抓取一堆文本更可预测:

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

    【讨论】:

      【解决方案3】:

      实现您的目的的一种相当丑陋的方法是构造一个句子列表并从句子子集构建一个新文档。

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

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

      【讨论】:

        猜你喜欢
        • 2019-09-01
        • 2020-04-04
        • 1970-01-01
        • 1970-01-01
        • 2012-12-16
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多