Things to do with the simple syllabifier
Pst! Can you build syllables around /s/?
When you have experimented with the simple syllabifier for a while you will probably discover - at least if you are trying it out on English - that from time to time it throws up syllabifications which make you unhappy. If you haven't checked out its reaction to words like spot and stops, try it now. Can you modify it so that it deals correctly (?) with these words?
And other problems . . .
Syllables built around /s/ are not the only problems. What happens to make the syllabification of practical go wrong? Can you think of other words which cause the same difficulty? And other words which cause other difficulties? And can you fix these problems too? Defining new predicates is often useful. You might find, for example, that something like more.sonorous? :seg1 :seg2 could help you with your modifications.
Sonority scales and natural classes
A claim that is made in support of sonority scales is that they allow for the derivation of phonologically important classes of sounds - natural classes of sounds - in a simple, direct manner. Test this claim by taking advantage of :sonority.scale to define a set of predicates which identify an input segment (character) as as, for example, a sonorant, or a vowel, or an obstruent or a liquid. You can clearly think of these predicates as feature detectors.
Onsets and rhymes
As it stands, the syllabifier provides no internal analysis of syllables - it merely isolates syllables as wholes. It is commonly held, however, that syllables are hierarchically structured and that the primary structural divide falls between an onset constituent (roughly everything before the first vowel) and a rhyme consituent (roughly everything else). Can you develop a set of procedures which split a syllable in two in this way? Or, perhaps to start with, two operations rhyme :syllable and onset :syllable which output the corresponding sub-constituents of any input syllable sequence. (Here you can make use of the feature detectors you have defined.)
Once you can identify the rhyme of a syllable, you can obviously go on to define a predicate heavy.syllable? (to detect syllables with rhymes exceeding some critical size) and then start to experiment with automating the assignment of stress. For example, set up heavy.syllable? on the assumption that a heavy syllable is one which contains two or more segments in its rhyme consituent. Now try to define a procedure stress which accepts the output of the simple syllabifier (i.e. a list of syllables) as input and which implements the rule: Stress the penultimate syllable if it is heavy, otherwise stress the antipenultimate if there is one, or the first syllable if not. The output of stress might identify the stressed syllable of the input list simply by prefixing some character - like ! - to it.
Department of Linguistic Science
The University of Reading