Gruut是一个支持多种人类语言的分词器、文本清洗器和国际音标(IPA)音素转换器,支持SSML。
from gruut import sentences text = 'He wound it around the wound, saying "I read it was $10 to read."' for sent in sentences(text, lang="en-us"): for word in sent: if word.phonemes: print(word.text, *word.phonemes)
输出结果如下:
He h ˈi
wound w ˈaʊ n d
it ˈɪ t
around ɚ ˈaʊ n d
the ð ə
wound w ˈu n d
, |
saying s ˈeɪ ɪ ŋ
I ˈaɪ
read ɹ ˈɛ d
it ˈɪ t
was w ə z
ten t ˈɛ n
dollars d ˈɑ l ɚ z
to t ə
read ɹ ˈi d
. ‖
注意,"wound"和"read"在不同(语法)上下文中有不同的发音。
还支持SSML的子集:
from gruut import sentences ssml_text = """<?xml version="1.0" encoding="ISO-8859-1"?> <speak version="1.1" xmlns="http://www.w3.org/2001/10/synthesis" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.w3.org/2001/10/synthesis http://www.w3.org/TR/speech-synthesis11/synthesis.xsd" xml:lang="en-US"> <s>Today at 4pm, 2/1/2000.</s> <s xml:lang="it">Un mese fà, 2/1/2000.</s> </speak>""" for sent in sentences(ssml_text, ssml=True): for word in sent: if word.phonemes: print(sent.idx, word.lang, word.text, *word.phonemes)
输出结果如下:
0 en-US Today t ə d ˈeɪ
0 en-US at ˈæ t
0 en-US four f ˈɔ ɹ
0 en-US P p ˈi
0 en-US M ˈɛ m
0 en-US , |
0 en-US February f ˈɛ b j u ˌɛ ɹ i
0 en-US first f ˈɚ s t
0 en-US , |
0 en-US two t ˈu
0 en-US thousand θ ˈaʊ z ə n d
0 en-US . ‖
1 it Un u n
1 it mese ˈm e s e
1 it fà f a
1 it , |
1 it due d j u
1 it gennaio d͡ʒ e n n ˈa j o
1 it duemila d u e ˈm i l a
1 it . ‖
更多详细信息请参阅文档。
pip install gruut
除英语外的其他语言可以在安装时添加。例如,添加法语和意大利语支持:
pip install -f 'https://synesthesiam.github.io/prebuilt-apps/' gruut[fr,it]
额外的pip仓库是为了使用更新的num2words分支,其中包含对更多语言的支持。
你也可以手动下载语言文件并将它们放在$XDG_CONFIG_HOME/gruut/
目录下(默认为$HOME/.config/gruut
)。
如果未安装相应的Python包,gruut将在$XDG_CONFIG_HOME/gruut/<lang>/
目录中查找语言文件。注意,这里的<lang>
是完整的语言名称,例如de-de
而不是仅de
。
gruut目前支持:
ar
)cs
或 cs-cz
)de
或 de-de
)en
或 en-us
)es
或 es-es
)fa
)fr
或 fr-fr
)it
或 it-it
)lb
)nl
)ru
或 ru-ru
)sv
或 sv-se
)sw
)目标是支持所有voice2json的语言
gruut
可以自动将数字、日期和其他表达式转换为文字。这是以区域感知的方式进行解析和转换的,因此"1/1/2020"可能会被解释为"月/日/年"或"日/月/年",具体取决于单词或句子的语言(例如,<s lang="...">
)。
gruut
可以自动将以下类型的表达式扩展为文字:
verbalize_numbers=False
或--no-numbers
禁用)
Babel
进行解析,num2words
进行转换verbalize_dates=False
或--no-dates
禁用)
pydateparser
进行解析,Babel
和num2words
进行转换