Skip to main content

Library for manipulating pronunciations using the International Phonetic Alphabet (IPA)

Project description

Gruut IPA

Library for manipulating International Phonetic Alphabet (IPA) pronunciations.

Features include:

  • Getting the category and details of a phone, e.g. "open front unrounded vowel" for ɶ
  • Splitting IPA pronunciations into groups of:
    • Phones (/ˈt͡ʃuːz/ to ˈt͡ʃ uː z )
    • Phonemes (/kˈaʊ/ to k ˈaʊ for U.S. English)
  • Converting pronunciations between:

Supported Languages:

  • Arabic (ar)
  • Czech (cs-cz)
  • German (de-de)
  • U.S. English (en-us)
  • U.K. English (en-gb)
  • Spanish (es-es)
  • Persian/Farsi (fa)
  • Spanish (es-es)
  • Italian (it-it)
  • Luxembourgish (lb-lb)
  • Dutch (nl)
  • Portuguese (pt)
  • Russian (ru-ru)
  • Swahili (sw)

Installing

$ pip install gruut-ipa

Dependencies

  • Python 3.6 or higher

For command-line usage, you may also want:

Install these with:

$ sudo apt-get install espeak jq

Phones and Phonemes

IPA phones

Phones in IPA are composed of different components:

  • Letters
    • Non-combining Unicode characters that represent a distinct human sound (phone)
  • Suprasegmentals
    • Non-combining Unicode characters that represent language features above individual vowels or consonants
    • Stress (ˈˌ), elongation (ː), linking/ties (t͡s), and short/long breaks (| ‖) are suprasegmentals
  • Diacritics

See IPA Chart for more details.

Phonemes

While phones represent individual sounds, phonemes are the phonetic units of a language that meaningfully distinguish words. A phoneme may be realized by many different phones. For example, the /r/ in Standard German can be realized as a uvular fricative (χ/ʁ), a uvular approximant (ɹ), or a uvular tap or trill (ʀ/r).

A phoneme may also be composed of multiple phones, such as the dipthong in U.S. English (the "ow" in "cow").

Supported languages in gruut-ipa contain a phonemes.txt file in the gruut_ipa/data directory. This file has the following format:

<phoneme> <example> [<replace> ...]

where <phoneme> is a set of IPA letters, like ɶ or . The <example> is a word whose pronunciation contains the <phoneme>. After that, there are one or more optional <replace> strings that will be replaced with <phoneme>. The German /r/ example from above might be represented as:

r brot χ ʁ ɹ ʀ

Phonemes for a given language come from phonological analyses and from public databases. Ultimately, they are geared towards capturing pronunciations from Wiktionary.

Usage

Print JSON information about phones:

$ python3 -m gruut_ipa describe "ˈãː" | jq .
{
  "text": "ˈãː",
  "letters": "a",
  "stress": "primary",
  "height": "open",
  "placement": "front",
  "rounded": false,
  "type": "Vowel",
  "nasalated": true,
  "elongated": true
}

Split an IPA pronunciation into phones:

$ python3 -m gruut_ipa phones "ˈjɛs|ˈt͡ʃuːz aɪpiːeɪ‖"
ˈj ɛ s | ˈt͡ʃ  z a ɪ p  e ɪ 

Group phones into phonemes for a specific language:

$ python3 -m gruut_ipa phonemes en-us "/dʒʌst ə kaʊ/"
d͡ʒ ʌ s t ə k 

Convert between IPA, espeak, and sampa:

$ python3 -m gruut_ipa convert ipa espeak "mʊmˈbaɪ"
[[mUm'baI]]

$ python3 -m gruut_ipa convert espeak ipa "[[D,Is Iz sVm f@n'EtIk t'Ekst 'InpUt]]"
ðˌɪs ɪz sʌm fɘnˈɛtɪk tˈɛkst ˈɪnpʊt

Chain commands together:

$ python3 -m gruut_ipa convert espeak ipa "[[k'aU]]" | \
    python3 -m gruut_ipa phonemes en-us --keep-stress
k ˈaʊ

Alternative Phoneme Sets

Some languages have multiple phoneme sets available:

  • U.S. English (en-us)
    • CMUDict (en-us/cmudict)
    • Zamia (en-us/zamia)
  • Swahili (sw)

Convert from IPA to alternative phoneme set:

$ python3 -m gruut_ipa convert ipa en-us/cmudict "h ɛ l ˈoʊ w ˈɚ l d"
HH EH0 L OW1 W ER1 L D

Convert from alternative phoneme set to IPA:

$ python3 -m gruut_ipa convert en-us/cmudict ipa "HH EH0 L OW1 W ER1 L D"
h ɛ l ˈoʊ w ˈɚ l d

Scripts

Use the speak-ipa script to have espeak pronounce IPA. You may need to apt-get install espeak first.

$ echo '/hɛloʊ wɝld/' | bin/speak-ipa en-us -s 60 -w 'hello world.wav'
$ aplay 'hello world.wav'

Phones

Supported IPA phones can be printed with:

$ python3 -m gruut_ipa print
{"text": "i", "letters": "i", "stress": "none", "height": "close", "placement": "front", "rounded": false, "type": "Vowel", "nasalated": false, "elongated": false, "description": "close front unrounded vowel", "espeak": "i", "sampa": "i"}
{"text": "y", "letters": "y", "stress": "none", "height": "close", "placement": "front", "rounded": true, "type": "Vowel", "nasalated": false, "elongated": false, "description": "close front rounded vowel", "espeak": "y", "sampa": "y"}
...

A nice table can be generated with jq:

$ python3 -m gruut_ipa print | \
    jq -r '. | "\(.text)\t\(.espeak)\t\(.sampa)\t\(.description)"'

Converted to Markdown:

IPA eSpeak Sampa Description
i i i close front unrounded vowel
y y y close front rounded vowel
ɨ i" 1 close central unrounded vowel
ʉ u" } close central rounded vowel
ɯ u- M close back unrounded vowel
u u u close back rounded vowel
ɪ I I near-close near-front unrounded vowel
ʏ I. Y near-close near-front rounded vowel
ʊ U U near-close near-back rounded vowel
e e e close-mid front unrounded vowel
ø Y 2 close-mid front rounded vowel
ɘ @ @\ close-mid central unrounded vowel
ɵ @. 8 close-mid central rounded vowel
ɤ o- 7 close-mid back unrounded vowel
o o o close-mid back rounded vowel
ɛ E E open-mid front unrounded vowel
œ W 9 open-mid front rounded vowel
ɜ V" 3 open-mid central unrounded vowel
ɞ O" 3\ open-mid central rounded vowel
ʌ V V open-mid back unrounded vowel
ɔ O O open-mid back rounded vowel
æ a { near-open front unrounded vowel
ɐ V 6 near-open central unrounded vowel
a a a open front unrounded vowel
ɶ W & open front rounded vowel
ɑ A A open back unrounded vowel
ɒ A. Q open back rounded vowel
m m m voiced bilabial nasal
ɱ M F voiced labio-dental nasal
n n n voiced alveolar nasal
ɳ n. n` voiced retroflex nasal
ŋ N N voiced velar nasal
ɴ n" N\ voiced uvular nasal
p p p voiceless bilabial plosive
b b b voiced bilabial plosive
t t t voiceless alveolar plosive
d d d voiced alveolar plosive
ʈ t. t` voiceless retroflex plosive
ɖ d. d` voiced retroflex plosive
c c c voiceless palatal plosive
ɟ J J\ voiced palatal plosive
k k k voiceless velar plosive
ɡ g g voiced velar plosive
g g g voiced velar plosive
q q q voiceless uvular plosive
ɢ G G\ voiced uvular plosive
ʡ >\ voiceless pharyngeal plosive
ʔ ? ? voiceless glottal plosive
p͡f pf pf voiceless labio-dental affricate
b͡v bv bv voiced dental affricate
t̪͡s ts t_ds voiceless dental affricate
t͡s ts ts voiceless alveolar affricate
d͡z dz dz voiced alveolar affricate
t͡ʃ tS tS voiceless post-alveolar affricate
d͡ʒ dZ dZ voiced post-alveolar affricate
ʈ͡ʂ tS ts` voiceless retroflex affricate
ɖ͡ʐ dz dz` voiced retroflex affricate
t͡ɕ tS; ts\ voiceless palatal affricate
d͡ʑ dZ; dz\ voiced palatal affricate
k͡x k k_x voiceless velar affricate
ɸ F p\ voiceless bilabial fricative
β B B voiced bilabial fricative
f f f voiceless labio-dental fricative
v v v voiced labio-dental fricative
θ T T voiceless dental fricative
ð D D voiced dental fricative
s s s voiceless alveolar fricative
z z z voiced alveolar fricative
ʃ S S voiceless post-alveolar fricative
ʒ Z Z voiced post-alveolar fricative
ʂ s. s` voiceless retroflex fricative
ʐ z. z` voiced palatal fricative
ç C C voiceless palatal fricative
x x x voiceless velar fricative
ɣ Q G voiced velar fricative
χ X X voiceless uvular fricative
ʁ g" R voiced uvular fricative
ħ H X\ voiceless pharyngeal fricative
h h h voiceless glottal fricative
ɦ h<?> h\ voiced glottal fricative
w w w voiced bilabial approximant
ʋ v# v\ voiced labio-dental approximant
ɹ r r\ voiced alveolar approximant
ɻ r. r\` voiced retroflex approximant
j j j voiced palatal approximant
ɰ Q M\ voiced velar approximant
voiced labio-dental flap
ɾ * 4 voiced alveolar flap
ɽ *. r` voiced retroflex flap
ʙ b B\ voiced bilabial trill
r r r voiced alveolar trill
ʀ r" R\ voiced uvular trill
l l l voiced alveolar lateral-approximant
ɫ l 5 voiced alveolar lateral-approximant
ɭ l. l` voiced retroflex lateral-approximant
ʎ l^ L voiced palatal lateral-approximant
ʟ L L\ voiced velar lateral-approximant
ə @ @ schwa
ɚ 3 @` r-coloured schwa
ɝ 3 @` r-coloured schwa
ɹ̩ r- r\̩ voiced alveolar approximant

If you see anything wrong or missing, please let me know.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

gruut-ipa-0.12.0.tar.gz (91.6 kB view details)

Uploaded Source

File details

Details for the file gruut-ipa-0.12.0.tar.gz.

File metadata

  • Download URL: gruut-ipa-0.12.0.tar.gz
  • Upload date:
  • Size: 91.6 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.4.2 importlib_metadata/4.8.1 pkginfo/1.7.1 requests/2.25.1 requests-toolbelt/0.9.1 tqdm/4.62.3 CPython/3.9.2

File hashes

Hashes for gruut-ipa-0.12.0.tar.gz
Algorithm Hash digest
SHA256 564e2e77d3076b66294845d14db452dd44ff258431f38c415696819949948bc7
MD5 ad636af4592dd59df5c27b4b2a35360e
BLAKE2b-256 f2b6ea22d27bbad53b992afc436e34c4de5d4cda2af495abb4d3825ae5829ef5

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page