2024-05-29 05:26:49 发布
网友
默认情况下,(德语)spacy标记器不会在斜杠、下划线或星号上拆分,这正是我所需要的(因此“der/die”生成一个标记)
然而,它确实在括号中拆分,所以“dies(und)das”被拆分为5个标记。有没有一种(简单的)方法可以告诉默认标记器也不要在两边都用字母括起来且没有空格的括号上拆分
这些括号上的拆分是如何为标记器定义的
括号上的拆分在这一行中定义,它在两个字母之间的括号上拆分:
https://github.com/explosion/spaCy/blob/23ec07debdd568f09c7c83b10564850f9fa67ad4/spacy/lang/de/punctuation.py#L18
没有简单的方法可以删除中缀模式,但是您可以定义一个定制的标记器来实现您想要的功能。一种方法是从spacy/lang/de/punctuation.py复制中缀定义并修改它:
spacy/lang/de/punctuation.py
import re import spacy from spacy.tokenizer import Tokenizer from spacy.lang.char_classes import ALPHA, ALPHA_LOWER, ALPHA_UPPER, CONCAT_QUOTES, LIST_ELLIPSES, LIST_ICONS from spacy.lang.de.punctuation import _quotes from spacy.util import compile_prefix_regex, compile_infix_regex, compile_suffix_regex def custom_tokenizer(nlp): infixes = ( LIST_ELLIPSES + LIST_ICONS + [ r"(?<=[{al}])\.(?=[{au}])".format(al=ALPHA_LOWER, au=ALPHA_UPPER), r"(?<=[{a}])[,!?](?=[{a}])".format(a=ALPHA), r'(?<=[{a}])[:<>=](?=[{a}])'.format(a=ALPHA), r"(?<=[{a}]),(?=[{a}])".format(a=ALPHA), r"(?<=[{a}])([{q}\]\[])(?=[{a}])".format(a=ALPHA, q=_quotes), r"(?<=[{a}]) (?=[{a}])".format(a=ALPHA), r"(?<=[0-9])-(?=[0-9])", ] ) infix_re = compile_infix_regex(infixes) return Tokenizer(nlp.vocab, prefix_search=nlp.tokenizer.prefix_search, suffix_search=nlp.tokenizer.suffix_search, infix_finditer=infix_re.finditer, token_match=nlp.tokenizer.token_match, rules=nlp.Defaults.tokenizer_exceptions) nlp = spacy.load('de') nlp.tokenizer = custom_tokenizer(nlp)
括号上的拆分在这一行中定义,它在两个字母之间的括号上拆分:
https://github.com/explosion/spaCy/blob/23ec07debdd568f09c7c83b10564850f9fa67ad4/spacy/lang/de/punctuation.py#L18
没有简单的方法可以删除中缀模式,但是您可以定义一个定制的标记器来实现您想要的功能。一种方法是从
spacy/lang/de/punctuation.py
复制中缀定义并修改它:相关问题 更多 >
编程相关推荐