配置 PunktSentenceTokenizer 并指定语言

Configure PunktSentenceTokenizer and specify language

我想使用 PunktSentenceTokenizer 将德语文本拆分成句子。由于预训练模型偶然发现了一些缩写词(例如 z. B.),我想将这些缩写词配置到分词器中。

我找不到既指定语言(因此使用预训练模型)又使用自定义缩写列表的方法。

以下是有效但未合并的代码示例:

默认德语分词器:

nltk.sent_tokenize('Das ist z. B. ein Vogel.', language='german')

带有缩写列表但没有德语模型的自定义分词器:

punkt_parameters = PunktParameters()
abbreviations = ["z. B."]
punkt_parameters.abbrev_types = set(abbreviations)
tokenizer = PunktSentenceTokenizer(punkt_parameters)
split_sentences = tokenizer.tokenize('Das ist z. B. ein Vogel.')

我找不到将这两者结合起来的任何选项。有没有可能实现这个或者这是不可能的(例如模型是不可变的)?

根据 Josh 在这里的回答:

additional_abbreviations = ["z.B", "z.b", "ca", "dt"]
sentence_tokenizer = nltk.data.load("tokenizers/punkt/german.pickle")
sentence_tokenizer._params.abbrev_types.update(additional_abbreviations)
split_sentences = sentence_tokenizer.tokenize("Das ist z.B. ein Vogel. Das ist dt. Geschichte. Das sind ca. 2 kg.")

附加缩写不能以点结尾。如果你有带空格的缩写,这是行不通的。