ラオ語学習アプリ 音節区切り実装中。
先日から時間があいたが、ラオ語学習アプリの音節区切りのアルゴリズムを実装中。
取りあえず今日はここまで。色々と漏れがあるが、眠い。
方針は、ちょっと変えて、以下の通り。
1.文字を1文字取得して判定するループを基本とする
2.その中で、音節の区切りがあれば、そこで終了。
3.なければ音節の部分文字列として次のループに託す。
4.声調は音節の区切りには関係ないので飛ばす。
5.音節区切りと判定されたら、部分文字列をクリアして次の文字を最初とする。
6.音節の始まりのリストから文字を区切って音節とする。
private void button1_Click(object sender, EventArgs e) { StringBuilder sb = new StringBuilder(); char[] tempArray = textBox1.Text.ToCharArray(); List<int> startIdxArray = new List<int>(); int idx = 0; bool isEnd = false; char[] word = new char[0]; char tempChar = new Char(); while (!isEnd) { //文字列終了チェック if (idx >= tempArray.Length) { isEnd = true; continue; } //1文字取得 tempChar = tempArray[idx]; //声調なら読み捨てて次のIdxへ if (tempChar.Equals('່') || tempChar.Equals('້') || tempChar.Equals('໊') || tempChar.Equals('໋')) { idx++; continue; } //ラオス文字でなければ読み捨てて次のIdxへ if (tempChar.CompareTo('ກ')<0 ||tempChar.CompareTo('ໝ')>0) { idx++; continue; } //音節区切りチェック if (word.Length == 0) { startIdxArray.Add(idx); } //2文字で確定OR最後にサラアが来るパターン if (tempChar.Equals('ະ') || tempChar.Equals('ໍ')) { //確定 //次の文字が声調なら読み捨てて次のIdxへ if (tempArray[idx+1].Equals('່') || tempArray[idx + 1].Equals('້') || tempArray[idx + 1].Equals('໊') || tempArray[idx + 1].Equals('໋')) { idx++; word = new char[0]; continue; } } Array.Resize(ref word, word.Length + 1); word[word.Length - 1] = tempChar; if(word.Length == 3) { if (word[2].Equals('ກ') || word[2].Equals('ງ') || word[2].Equals('ຍ') || word[2].Equals('ດ') || word[2].Equals('ນ') || word[2].Equals('ບ') || word[2].Equals('ມ') || word[2].Equals('ວ')) { word = new char[0]; } }if(word.Length == 4) { if (word[2].Equals('ອ')) { word = new char[0]; } } if (word.Length == 10) { //TODO:長すぎるときは切り捨て。これ直します。 word = new char[0]; } //TODO:確定して一文字戻る場合は減らす //TODO:確定しない場合idxを進める idx++; } for(int i = 0; i < startIdxArray.Count; i++) { textBox2.Text = textBox2.Text + startIdxArray[i] + "\r\n"; } }
適当な文を入れて、区切りIndexで区切ってみたらこうなった。
判定対象:ທາງການລາວ ວາງແຜນການ ຂະຫຍາຍໂຄງຂ່າຍ ສາຍສົ່ງກະແສໄຟຟ້າ ເພື່ອຕອບສະໜອງ ການຊົມໃຊ້ ຂອງປະຊາຊົນລາວ ໃຫ້ໄດ້ເຖິງ 90 ເປີເຊັນ.
結果:
ທາງ
ການ
ລາວ
ວາງ
ແຜນ
ການ
ຂະຫຍາຍໂຄງຂ່
າຍ ສາຍສົ່ງກະ
ແສໄຟຟ້າ ເພື່ອ
ຕອບ
ສະໜອງ ການຊົ
ມໃຊ້ ຂອງປະຊາ
ຊົນ
ລາວ
ໃຫ້ໄດ້ເຖິງ 90 ເປ
ີເຊັນ.
明らかに実装漏れ、判定ミスがたくさんある。
まぁ、これからこれから。