首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在解析字符串时,如何防止benepar解析器拆分特定的子字符串?

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

Stack Overflow用户
提问于 2022-09-06 21:49:17
回答 1查看 113关注 0票数 1

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

例如,令牌gonna被benepar拆分成两个令牌gonna,我不想要这两个令牌。

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

代码语言:javascript
复制
pip install spacy benepar
python -m nltk.downloader punkt benepar_en3
python -m spacy download en_core_web_md

如果我跑:

代码语言:javascript
复制
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)

它将输出:

代码语言:javascript
复制
(S (NP (DT This)) (VP (VBZ is) (VP (TO gon) (VP (TO na) (VP (VB be) (NP (NN fun)))))) (. .))

问题是令牌gonna被分成两个令牌-- gonna。我怎么才能防止这种情况?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-09-06 21:58:19

使用nlp.tokenizer.add_special_case

代码语言:javascript
复制
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)

输出:

代码语言:javascript
复制
(S (NP (DT This)) (VP (VBZ is) (VP (TO gonna) (VP (VB be) (NP (NN fun))))) (. .))
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73628064

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档