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
Phonotactis, Logatomes and Transliteration
Phonotactis, Logatomes and Transliteration
Last edited by janMato on Fri Jan 01, 2010 12:54 pm, edited 3 times in total.
Re: Phonotactis, Logatomes and Transliteration
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
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
Re: Phonotactis, Logatomes and Transliteration
A! Wikipedia lags Sonja's wiki. I'll update my code re-run and fix my post.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."
So (C)V(N)-CV(N)-CV(N)-...-(N)
In other words, internal /nm / and /nn/ is illegal
Re: Phonotactis, Logatomes and Transliteration
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++;
}
}
}
}