Phonotactis, Logatomes and Transliteration

Language learning: How to speak Toki Pona, translation problems, advice, memory aids, tools and methods to learn Toki Pona and other languages faster
Lingva lernado: Kiel paroli Tokiponon, tradukproblemoj, konsiloj, memoraj helpiloj, iloj kaj metodoj por pli rapide lerni Tokiponon kaj aliajn lingvojn
Post Reply
janMato
Posts: 1545
Joined: Wed Dec 02, 2009 12:21 pm
Location: Takoma Park, MD
Contact:

Phonotactis, Logatomes and Transliteration

Post by janMato »

UPDATE: Fixed to add the additional rules in Sonya's wiki that weren't in Wikipedia.

I wrote a program to generate the 483,528 valid 1 to 3 syllable logatomes in toki pona, from a to uwiwi (hmm, that doesn't sound alphabetical). I thought it would be handy as the start of a spell check dictionary for transliterations.

Now that I've added the new code, it looks like the remaining iffy possible logatomes are a matter of taste and style, namely these:

Minimal pairs of the official words
pimejan, junpa, sitilin, lowe

Tmesis, official words as subset of logatome
kimoku,namoku

Pseduocompounds, pairs of official words in word
limoku, pumoku

All vowels and semi vowels
ijoje, ejeje, wije, iwije, ewije
Last edited by janMato on Fri Jan 01, 2010 12:54 pm, edited 3 times in total.
User avatar
jan Josan
Posts: 326
Joined: Sun Oct 18, 2009 12:41 pm
Location: ma tomo Nujoka
Contact:

Re: Phonotactis, Logatomes and Transliteration

Post by jan Josan »

I don't think vowel strings are allowed. "1.The first syllable of a word can begin without a consonant." (akesi is allowed but not aakesi and 'ona' can only be broken down as "o.na" not "on.a", sina is "si.na" not "sin.a")
I don't think you can have the final n with an initial n : "n cannot occur at the end of a syllable if the next one begins with m or n."

Of the words you've listed, I think the only ones that are allowed are:
i, (nananan), anan, (nana), nanan, pimejan, junpa, sitilin, lowe, joje, jeje, wije, iwije, ewije
janMato
Posts: 1545
Joined: Wed Dec 02, 2009 12:21 pm
Location: Takoma Park, MD
Contact:

Re: Phonotactis, Logatomes and Transliteration

Post by janMato »

jan Josan wrote:I don't think vowel strings are allowed. "1.The first syllable of a word can begin without a consonant." (akesi is allowed but not aakesi and 'ona' can only be broken down as "o.na" not "on.a", sina is "si.na" not "sin.a")
I don't think you can have the final n with an initial n : "n cannot occur at the end of a syllable if the next one begins with m or n."
A! Wikipedia lags Sonja's wiki. I'll update my code re-run and fix my post.

So (C)V(N)-CV(N)-CV(N)-...-(N)

In other words, internal /nm / and /nn/ is illegal
janMato
Posts: 1545
Joined: Wed Dec 02, 2009 12:21 pm
Location: Takoma Park, MD
Contact:

Re: Phonotactis, Logatomes and Transliteration

Post by janMato »

In case anyone is curious, here is the code for generating all the 1 to 3 syllable logatomes of tokipona.

Code: Select all

            string[] consonants = {"p", "t", "k", "s", "m", "n", "l", "j", "w", ""};
            string[] vowels = {"a", "e", "i", "o", "u"};
            string[] finalconsonants = {"n", ""};
            string[] illegal = {"ji", "wu", "wo", "ti", "nm", "nn"};

            ArrayList syllables = new ArrayList();
            ArrayList syllablesSecond = new ArrayList();

            int count = 0;

            for (int i = 0; i < consonants.Length; i++)
            {
                for (int j = 0; j < vowels.Length; j++)
                {
                    for (int k = 0; k < finalconsonants.Length; k++)
                    {
                        string word = consonants[i] + vowels[j] + finalconsonants[k];
                        bool isLegal = true;
                        for (int l = 0; illegal.Length < 4; l++)
                        {
                            if (word.Contains(illegal[l]))
                            {
                                isLegal = false;
                            }
                        }
                        if (isLegal)
                        {
                            syllables.Add(word);
                            if (
                                !(word.StartsWith("a") || word.StartsWith("e") || word.StartsWith("i") ||
                                  word.StartsWith("o") || word.StartsWith("u")))
                            {
                                syllablesSecond.Add(word);
                            }
                            Response.Write(count + ": (1 syllable) : " + word + "<br/>");
                            count++;
                        }
                    }
                }
            } // top for loop

            for (int i = 0; i < syllables.Count; i++)
            {
                for (int j = 0; j < syllablesSecond.Count; j++)
                {
                    string word = syllables[i].ToString() + syllablesSecond[j].ToString();
                    bool isLegal = true;
                    for (int l = 0; l < illegal.Length; l++)
                    {
                        if (word.Contains(illegal[l]))
                        {
                            isLegal = false;
                        }
                    }
                    if (isLegal)
                    {
                        Response.Write(count + " : (2 syllable) : " + word + "<br/>");
                        count++;
                    }
                }
            }

            for (int i = 0; i < syllables.Count; i++)
            {
                for (int j = 0; j < syllablesSecond.Count; j++)
                {
                    for (int k = 0; k < syllablesSecond.Count; k++)
                    {
                        string word = syllables[i].ToString() + syllablesSecond[j].ToString() +
                                      syllablesSecond[k].ToString();
                        bool isLegal = true;
                        for (int l = 0; l < illegal.Length; l++)
                        {
                            if (word.Contains(illegal[l]))
                            {
                                isLegal = false;
                            }
                        }
                        if (isLegal)
                        {
                            Response.Write(count + " : (3 syllable) : " + word + "<br/>");
                            count++;
                        }
                    }
                }
            }
Post Reply