我在 spacy 有一个用例,我想在德语句子中查找电话号码。不幸的是,分词器没有按预期进行分词。当数字位于句子末尾时,数字和点不会分成两个标记。英文版和德文版在这里有所不同,请参阅以下代码:
import spacy
nlp_en = spacy.blank("en")
nlp_de = spacy.blank("de")
text = "Die Nummer lautet 1234 123444."
doc_en = nlp_en(text)
doc_de = nlp_de(text)
print(doc_en[-1]) #output is: .
print(doc_de[-1]) #output is: 123444.
预期输出为:123444。被分成两个标记。 但我也想使用“de”版本,因为它对于德语句子还有其他有意义的默认值...
我的spaCy版本:3.7.4
在类似的情况下,我能够用
nlp_de.tokenizer.add_special_case
解决问题,但在这里我需要匹配一个我不知道的数字。我找不到使用正则表达式的方法 add_special_case
我还看了: 是否可以更改 Spacy 分词器的分词规则? 这看起来很有希望。但我无法弄清楚如何调整标记器。我想我应该使用自定义标记器和来自的信息 https://github.com/explosion/spaCy/blob/master/spacy/lang/de/punctuation.py !?
您可以使用“后缀”来解决标点符号问题。这是一个例子:
import spacy
nlp_en = spacy.blank("en")
nlp_de = spacy.blank("de")
text = "Die Nummer lautet 1234 123448."
suffixes = nlp_de.Defaults.suffixes + [r'\.',]
suffix_regex = spacy.util.compile_suffix_regex(suffixes)
nlp_de.tokenizer.suffix_search = suffix_regex.search
doc_en = nlp_en(text)
doc_de = nlp_de(text)
print(doc_en[-1]) #output is: .
print(doc_de[-1]) #output is: 123444.