Sacremoses
许可
安装
pip install -U sacremoses
注意:Sacremoses 现在只支持 Python 3(sacremoses>=0.0.41
)。如果你使用的是 Python 2,最后支持的版本是 sacremoses==0.0.40
。
用法(Python)
分词器和去分词器
>>> from sacremoses import MosesTokenizer, MosesDetokenizer
>>> mt = MosesTokenizer(lang='en')
>>> text = 'This, is a sentence with weird\xbb symbols\u2026 appearing everywhere\xbf'
>>> expected_tokenized = 'This , is a sentence with weird \xbb symbols \u2026 appearing everywhere \xbf'
>>> tokenized_text = mt.tokenize(text, return_str=True)
>>> tokenized_text == expected_tokenized
True
>>> mt, md = MosesTokenizer(lang='en'), MosesDetokenizer(lang='en')
>>> sent = "This ain't funny. It's actually hillarious, yet double Ls. | [] < > [ ] & You're gonna shake it off? Don't?"
>>> expected_tokens = ['This', 'ain', ''t', 'funny', '.', 'It', ''s', 'actually', 'hillarious', ',', 'yet', 'double', 'Ls', '.', '|', '[', ']', '<', '>', '[', ']', '&', 'You', ''re', 'gonna', 'shake', 'it', 'off', '?', 'Don', ''t', '?']
>>> expected_detokens = "This ain't funny. It's actually hillarious, yet double Ls. | [] < > [] & You're gonna shake it off? Don't?"
>>> mt.tokenize(sent) == expected_tokens
True
>>> md.detokenize(tokens) == expected_detokens
True
大小写恢复器
>>> from sacremoses import MosesTruecaser, MosesTokenizer
# 从 'big.txt' 文件中训练一个新的大小写恢复模型。
>>> mtr = MosesTruecaser()
>>> mtok = MosesTokenizer(lang='en')
# 使用 `save_to` 将大小写恢复模型保存到 'big.truecasemodel'。
>> tokenized_docs = [mtok.tokenize(line) for line in open('big.txt')]
>>> mtr.train(tokenized_docs, save_to='big.truecasemodel')
# 在训练后将大小写恢复模型保存到 'big.truecasemodel'(以防忘记使用 `save_to`)。
>>> mtr = MosesTruecaser()
>>> mtr.train('big.txt')
>>> mtr.save_model('big.truecasemodel')
# 在训练模型后,对字符串进行大小写恢复。
>>> mtr = MosesTruecaser()
>>> mtr.train('big.txt')
>>> mtr.truecase("THE ADVENTURES OF SHERLOCK HOLMES")
['the', 'adventures', 'of', 'Sherlock', 'Holmes']
# 加载模型并使用训练好的模型对字符串进行大小写恢复。
>>> mtr = MosesTruecaser('big.truecasemodel')
>>> mtr.truecase("THE ADVENTURES OF SHERLOCK HOLMES")
['the', 'adventures', 'of', 'Sherlock', 'Holmes']
>>> mtr.truecase("THE ADVENTURES OF SHERLOCK HOLMES", use_known=True)
['the', 'ADVENTURES', 'OF', 'SHERLOCK', 'HOLMES']
>>> mtr.truecase("THE ADVENTURES OF SHERLOCK HOLMES", return_str=True)
'the adventures of Sherlock Holmes'
标点符号标准化
>>> from sacremoses import MosesPunctNormalizer
>>> mpn = MosesPunctNormalizer()
>>> mpn.normalize('THIS EBOOK IS OTHERWISE PROVIDED TO YOU "AS-IS."')
'THIS EBOOK IS OTHERWISE PROVIDED TO YOU "AS-IS."'
用法(CLI)
从版本 0.0.42
开始,引入了 CLI 的流水线功能,因此在调用命令之前,应该先设置全局选项:
- 语言
- 进程数
- 编码
- 静默模式
$ pip install -U sacremoses>=0.1
$ sacremoses --help
Usage: sacremoses [OPTIONS] COMMAND1 [ARGS]... [COMMAND2 [ARGS]...]...
Options:
-l, --language TEXT 使用特定语言的规则进行分词
-j, --processes INTEGER 进程数。
-e, --encoding TEXT 指定文件编码。
-q, --quiet 禁用进度条。
--version 显示版本并退出。
-h, --help 显示此帮助信息并退出。
Commands:
detokenize
detruecase
normalize
tokenize
train-truecase
truecase
流水线
链式执行以下命令的示例:
- 使用
-c
选项的normalize
命令删除控制字符。 - 使用
-a
选项的tokenize
命令进行激进的破折号分割规则。 - 使用
-a
选项的truecase
命令指示模型用于 ASR。- 如果存在
big.truemodel
,则使用-m
选项加载模型, - 否则训练一个模型并使用
-m
选项将其保存到big.truemodel
文件中。
- 如果存在
- 将输出保存到控制台上的
big.txt.norm.tok.true
文件。
cat big.txt | sacremoses -l en -j 4 \
normalize -c tokenize -a truecase -a -m big.truemodel \
> big.txt.norm.tok.true
分词器
$ sacremoses tokenize --help
Usage: sacremoses tokenize [OPTIONS]
Options:
-a, --aggressive-dash-splits 触发破折号分割规则。
-x, --xml-escape 为 XML 转义特殊字符。
-p, --protected-patterns TEXT 指定文件中需要在分词中保护的模式。
-c, --custom-nb-prefixes TEXT 指定一个自定义的不分段前缀文件,将前缀添加到默认语言的前缀中。
-h, --help 显示此帮助信息并退出。
$ sacremoses -l en -j 4 tokenize < big.txt > big.txt.tok
100%|██████████████████████████████████| 128457/128457 [00:05<00:00, 24363.39it/s]
$ wget https://raw.githubusercontent.com/moses-smt/mosesdecoder/master/scripts/tokenizer/basic-protected-patterns
$ sacremoses -l en -j 4 tokenize -p basic-protected-patterns < big.txt > big.txt.tok
100%|██████████████████████████████████| 128457/128457 [00:05<00:00, 22183.94it/s
去分词器
$ sacremoses detokenize --help
Usage: sacremoses detokenize [OPTIONS]
Options:
-x, --xml-unescape 取消 XML 转义特殊字符。
-h, --help 显示此帮助信息并退出。
$ sacremoses -l en -j 4 detokenize < big.txt.tok > big.txt.tok.detok
100%|██████████████████████████████████| 128457/128457 [00:16<00:00, 7931.26it/s]
大小写恢复
$ sacremoses truecase --help
Usage: sacremoses truecase [OPTIONS]
Options:
-m, --modelfile TEXT 保存/加载模型文件的文件名。 [required]
-a, --is-asr 指示模型用于 ASR 的标志。
-p, --possibly-use-first-token 在大小写恢复训练中使用第一个标记。
-h, --help 显示此帮助信息并退出。
$ sacremoses -j 4 truecase -m big.model < big.txt.tok > big.txt.tok.true
100%|██████████████████████████████████| 128457/128457 [00:09<00:00, 14257.27it/s]
去大小写恢复
$ sacremoses detruecase --help
Usage: sacremoses detruecase [OPTIONS]
Options:
-j, --processes INTEGER 进程数。
-a, --is-headline 文件是否为标题。
-e, --encoding TEXT 指定文件编码。
-h, --help 显示此帮助信息并退出。
$ sacremoses -j 4 detruecase < big.txt.tok.true > big.txt.tok.true.detrue
100%|█████████████████████████████████| 128457/128457 [00:04<00:00, 26945.16it/s]
标准化
$ sacremoses normalize --