如何在 spacy 中设置最大句子长度?
How to set maximum sentence length in spacy?
我有一个字符串已转换为空字符串 Doc
。但是,当我遍历 Doc.sents
对象时,我发现它们太长了。
在做doc = nlp(string)
时有没有办法设置单个句子的最大长度?
非常感谢,这真的很有帮助。
不,没有办法做到这一点。
在正常的语言中,虽然实际上句子不会太长,但对句子的长度没有严格的限制。想象一下所有水果或其他东西的清单。
部分原因在于,不清楚如何处理超长句子。您是否将它们分成最大长度或更短的段?你是把它们完全扔掉,还是在第一块之后就把单词删掉?正确的方法取决于您的应用程序。
通常应该很容易在 .sents
迭代器之上实现您想要的策略。
要将句子拆分为最大长度或更短,您可以这样做:
def my_sents(doc, max_len):
for sent in doc.sents:
if len(sent) < max_len:
yield sent
continue
# this is a long one
offset = 0
while offset < len(sent):
yield sent[offset:offset+max_len]
offset += max_len
但是,请注意,对于许多应用程序来说,这没有用。如果你有句子的最大长度,你应该真正考虑你为什么有它并根据它调整你的方法。
我有一个字符串已转换为空字符串 Doc
。但是,当我遍历 Doc.sents
对象时,我发现它们太长了。
在做doc = nlp(string)
时有没有办法设置单个句子的最大长度?
非常感谢,这真的很有帮助。
不,没有办法做到这一点。
在正常的语言中,虽然实际上句子不会太长,但对句子的长度没有严格的限制。想象一下所有水果或其他东西的清单。
部分原因在于,不清楚如何处理超长句子。您是否将它们分成最大长度或更短的段?你是把它们完全扔掉,还是在第一块之后就把单词删掉?正确的方法取决于您的应用程序。
通常应该很容易在 .sents
迭代器之上实现您想要的策略。
要将句子拆分为最大长度或更短,您可以这样做:
def my_sents(doc, max_len):
for sent in doc.sents:
if len(sent) < max_len:
yield sent
continue
# this is a long one
offset = 0
while offset < len(sent):
yield sent[offset:offset+max_len]
offset += max_len
但是,请注意,对于许多应用程序来说,这没有用。如果你有句子的最大长度,你应该真正考虑你为什么有它并根据它调整你的方法。