我有一根绳子,里面有几个句子。我想得到每个句子的选区解析。为此,我将对完整字符串执行nlp解析,以获得spacy Doc,然后循环遍历doc.sents并使用span.as_doc()将跨文档转换为Docs。但是,当我将跨度转换回Docs时,并不是所有的原始数据都被保留了。具体来说,贝纳帕选区分析已经不复存在。
import spacy
import benepar
nlp = spacy.load("en_core_sci_md", disable=["ner", "lemmatizer", "textcat"])
nlp.add_pipe('benepar', config={'model': BENEPAR_DIR})
nlp_test1 = nlp('The quick brown fox jumps over the lazy dog')
print(list(nlp_test1.sents)[0]._.parse_string) # Uses benepar (works)
nlp_test2 = list(nlp_test1.sents)[0].as_doc()
print(list(nlp_test2.sents)[0]._.parse_string) # No constituency parse found (no benepar)
nlp_test3 = list(nlp_test.sents)[0].as_doc(array_head=nlp_test._get_array_attrs())
print(list(nlp_test3.sents)[0]._.parse_string) # Doesn't work either如何将Span转换为Doc,同时保持benepar选区解析数据?或者这是不可能的,而benepar只解析doc.sents的第一个
发布于 2022-09-26 07:58:01
这是不可能的,因为benepar将整个文档的解析信息存储在一个内部对象中,而Span.as_doc不能在这个范围内拆分它。
发布于 2022-09-23 12:45:39
似乎as_doc()不会运行nlp.add_pipe()添加的额外管道。
而不是
nlp_test2 = list(nlp_test1.sents)[0].as_doc()做
nlp_test2 = nlp(list(nlp_test1.sents)[0].text)因此,nlp_test2将使用benepar管道创建。
https://stackoverflow.com/questions/73816979
复制相似问题