Fave Syllabify

Modified

May 2, 2024

PyPI version Lint and Test Build Docs codecov DOI

This is a work in progress.

Installation

bash
pip install fave-syllabify

Usage

Import classes and functions

python
from aligned_textgrid import AlignedTextGrid, custom_classes
from fave_syllabify import syllabify_tg
from pathlib import Path

Read in a textgrid

python
tg = AlignedTextGrid(
    textgrid_path=Path(
        "data",
        "josef-fruehwald_speaker.TextGrid"
    ),
    entry_classes=custom_classes(
        ["Word", "Phone"]
    )
)

print(tg)
AlignedTextGrid with 1 groups named ['group_0'] each with [2] tiers. [['Word', 'Phone']]

Syllabify the textgrid

python
syllabify_tg(tg)

print(tg)
AlignedTextGrid with 1 groups named ['group_0'] each with [4] tiers. [['Word', 'Syllable', 'SylPart', 'Phone']]

Exploring the syllabification

python
word_tier = tg.group_0.Word
raindrops = word_tier[5]

print(raindrops.label)
raindrops

Each syllable is labelled with its stress.

python
print([
    syl.label 
    for syl in raindrops.contains
])
['syl-1', 'syl-2']

Each syllable contains its constituent parts in a flat hierarchy (there’s no rhyme constituent).

python
syl = raindrops.first.fol
print([
    part.label
    for part in syl.contains
])
['onset', 'nucleus', 'coda']

Each constituent contains its relevant phone.

python
onset = syl.onset
print([
    phone.label
    for phone in onset
])
['D', 'R']

Quickly syllabify and save the results

To quickly open, syllabify, and save the resulting textgrid (see also the aligned-textgrid docs)

python
# Get the relevant imports
from aligned_textgrid import AlignedTextGrid, custom_classes
from fave_syllabify import syllabify_tg

# Load the Word and Phone aligned textgrid
tg = AlignedTextGrid(
    textgrid_path="data/josef-fruehwald_speaker.TextGrid",
    entry_classes=custom_classes(
        ["Word", "Phone"]
    )
)

# Syllabify (this modifies the tg object itself)
syllabify_tg(tg)

# Save the result
tg.save_textgrid(
    save_path = "data/syllabified.TextGrid"
)

Reuse

GPLv3