pronunciation-dictionary
Library to save and load pronunciation dictionaries (language-independent).
Features
- Load dictionary from file or URL
- Parsing of
- line comments
- pronunciation comments
- numbers indicating alternative pronunciations for words
- weights
- Multiprocessing for faster deserialization
- Parsing of
- Save dictionary to file
- including numbers for alternative pronunciations
- include weights
- set word/weight/pronunciation separator
- Select pronunciation via
- first/last
- longest/shortest
- highest/lowest weight
- random
- weight
- Get phoneme set
Example dictionaries and deserialization arguments
- Montreal Forced Aligner dictionaries
encoding: "UTF-8"
- CMU
encoding: "ISO-8859-1"consider_numbers: Trueconsider_pronunciation_comments: True
- LibriSpeech
encoding: "UTF-8"
- Prosodylab
- Old: CMU 0.7b
encoding: "ISO-8859-1"consider_comments: Trueconsider_numbers: True
Excerpt from CMU (as example)
a.d. EY2 D IY1
a.m. EY2 EH1 M
a.s EY1 Z
aaa T R IH2 P AH0 L EY1
aaberg AA1 B ER0 G
aachen AA1 K AH0 N
aachener AA1 K AH0 N ER0
aaker AA1 K ER0
aalborg AO1 L B AO0 R G # place, danish
aalborg(2) AA1 L B AO0 R G
Installation
pip install pronunciation-dictionary --user
Usage
from pronunciation_dictionary import load_dict, save_dict, MultiprocessingOptions, DeserializationOptions, SerializationOptions
Example
from pathlib import Path
from pronunciation_dictionary import (DeserializationOptions,
MultiprocessingOptions, SerializationOptions,
get_phoneme_set, load_dict_from_url, save_dict)
dictionary = load_dict_from_url(
"https://raw.githubusercontent.com/cmusphinx/cmudict/master/cmudict.dict",
"ISO-8859-1",
DeserializationOptions(False, True, True, False),
MultiprocessingOptions(4, None, 10000)
)
phoneme_set = get_phoneme_set(dictionary)
print(phoneme_set)
# {'Z', 'EY1', 'AH0', 'F', 'AE0', 'UW0', 'CH', 'G', 'V', 'AY1', 'AO2', 'ZH', 'AA1', 'IY1', 'AW0', 'T', 'TH', 'AY2', 'DH', 'S', 'W', 'ER1', 'AA2', 'AE2', 'AE1', 'AW1', 'UW1', 'AH1', 'Y', 'EY2', 'AO0', 'OW2', 'OY2', 'IY2', 'JH', 'N', 'NG', 'P', 'IH2', 'M', 'OW0', 'L', 'UH1', 'IY0', 'EY0', 'HH', 'IH0', 'SH', 'AH2', 'AW2', 'EH2', 'OW1', 'D', 'R', 'IH1', 'AO1', 'B', 'UH2', 'UH0', 'ER0', 'UW2', 'ER2', 'EH0', 'AY0', 'AA0', 'EH1', 'OY1', 'OY0', 'K'}
pronunciations_distmantle = dictionary.get("dismantle")
for pronunciation, weight in pronunciations_distmantle.items():
print(pronunciation, weight)
# ('D', 'IH0', 'S', 'M', 'AE1', 'N', 'T', 'AH0', 'L') 1.0
# ('D', 'IH0', 'S', 'M', 'AE1', 'N', 'AH0', 'L') 1.0
save_dict(dictionary, Path("/tmp/cmu.dict"), "UTF-8",
SerializationOptions("DOUBLE-SPACE", False, False))
head /tmp/cmu.dict
# 'bout B AW1 T
# 'cause K AH0 Z
# 'course K AO1 R S
# 'cuse K Y UW1 Z
# 'em AH0 M
# 'frisco F R IH1 S K OW0
# 'gain G EH1 N
# 'kay K EY1
# 'm AH0 M
# 'n AH0 N
Roadmap
- replace
SerializationOptions,DeserializationOptionsandMultiprocessingOptionswith parameters - add default parameter values
- add more tests
Development setup
# update
sudo apt update
# install Python 3.8, 3.9, 3.10 & 3.11 for ensuring that tests can be run
sudo apt install python3-pip \
python3.8 python3.8-dev python3.8-distutils python3.8-venv \
python3.9 python3.9-dev python3.9-distutils python3.9-venv \
python3.10 python3.10-dev python3.10-distutils python3.10-venv \
python3.11 python3.11-dev python3.11-distutils python3.11-venv \
python3.12 python3.12-dev python3.12-distutils python3.12-venv
# install pipenv for creation of virtual environments
python3.8 -m pip install pipenv --user
# check out repo
git clone https://github.com/stefantaubert/pronunciation-dictionary.git
cd pronunciation-dictionary
# create virtual environment
python3.8 -m pipenv install --dev
Running the tests
# first install the tool like in "Development setup"
# then, navigate into the directory of the repo (if not already done)
cd pronunciation-dictionary
# activate environment
python3.8 -m pipenv shell
# run tests
tox
Final lines of test result output:
py38: commands succeeded
py39: commands succeeded
py310: commands succeeded
py311: commands succeeded
py312: commands succeeded
congratulations :)
License
MIT License
Acknowledgments
Funded by the Deutsche Forschungsgemeinschaft (DFG, German Research Foundation) – Project-ID 416228727 – CRC 1410
Citation
If you want to cite this repo, you can use this BibTeX-entry generated by GitHub (see About => Cite this repository).
Taubert, S. (2024). pronunciation-dictionary (Version 0.0.6) [Computer software]. https://doi.org/10.5281/zenodo.7386813
Metadata
Release files for pronunciation-dictionary 0.0.6
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | Provenance | |
|---|---|---|---|---|
| pronunciation-dictionary-0.0.6.tar.gz | 12.1 kB | Without provenance | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| pronunciation_dictionary-0.0.6-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 24.0 kB
Release files / pronunciation-dictionary-0.0.6.tar.gz
| Download URL | pronunciation-dictionary-0.0.6.tar.gz |
|---|---|
| Size | 12.1 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
f087ccd375dfb80f37cf5905594b3cba7d36071d31a6c08b4f4245a0d799efad
|
|
BLAKE2b-256 checksum How to use checksums |
70f56c5aa437d6ddcb47d688e7bda4d735d17fbf278c37772ffe4f6e1ec20284
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/4.0.2 CPython/3.8.18
|
Release files / pronunciation_dictionary-0.0.6-py3-none-any.whl
| Download URL | pronunciation_dictionary-0.0.6-py3-none-any.whl |
|---|---|
| Size | 11.9 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
6f6e70176e8f4c707f67a1cf913e0ca33d5d44ce0fe4d0ce7a35b7329e7577cd
|
|
BLAKE2b-256 checksum How to use checksums |
931d58e186e9abd0bbac690deb2be96b21f1a156807830df1a6bec471dfbea87
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/4.0.2 CPython/3.8.18
|
Security for pronunciation-dictionary 0.0.6
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
No provenance found
None of the files in this release were uploaded with provenance metadata.
A note on package security
PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.
To learn more about protecting yourself from malicious actors, visit our package security documentation.