如何防止 benepar 解析器在解析字符串时分割特定的子字符串?

问题描述 投票:0回答:1

我使用 benepar 解析器 将句子解析成树。如何防止 benepar 解析器在解析字符串时分割特定的子字符串?

例如,令牌

gonna
被 benepar 分成两个令牌
gon
na
,这是我不想要的。


代码示例,附带先决条件:

pip install spacy benepar
python -m nltk.downloader punkt benepar_en3
python -m spacy download en_core_web_md

如果我跑步:

import benepar, spacy
import nltk
benepar.download('benepar_en3')
nlp = spacy.load('en_core_web_md')
if spacy.__version__.startswith('2'):
    nlp.add_pipe(benepar.BeneparComponent("benepar_en3"))
else:
    nlp.add_pipe("benepar", config={"model": "benepar_en3"})
doc = nlp("This is gonna be fun.")
sent = list(doc.sents)[0]
print(sent._.parse_string)

它会输出:

(S (NP (DT This)) (VP (VBZ is) (VP (TO gon) (VP (TO na) (VP (VB be) (NP (NN fun)))))) (. .))

问题在于代币

gonna
被分成了两个代币
gon
na
。我怎样才能防止这种情况发生?

python nlp tokenize parse-tree benepar
1个回答
0
投票

使用

nlp.tokenizer.add_special_case

import benepar, spacy
import nltk
benepar.download('benepar_en3')
nlp = spacy.load('en_core_web_md')
from spacy.symbols import ORTH
nlp.tokenizer.add_special_case(u'gonna', [{ORTH: u'gonna'}])
if spacy.__version__.startswith('2'):
    nlp.add_pipe(benepar.BeneparComponent("benepar_en3"))
else:
    nlp.add_pipe("benepar", config={"model": "benepar_en3"})
doc = nlp("This is gonna be fun.")
sent = list(doc.sents)[0]
print(sent._.parse_string)

这是上述代码的输出:

(S (NP (DT This)) (VP (VBZ is) (VP (TO gonna) (VP (VB be) (NP (NN fun))))) (. .))
© www.soinside.com 2019 - 2024. All rights reserved.