如何调整 spaCy 分词器,以便在德国模型中分割行尾的数字和点

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

我在 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 !?

python spacy tokenize
1个回答
0
投票

您可以使用“后缀”来解决标点符号问题。这是一个例子:

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.
© www.soinside.com 2019 - 2024. All rights reserved.