----MySQL Script(語料庫)------
---------SegmentationSymbolTool Script (斷字功能)----------
------LongWordsFirst2 Scrit (長詞優先法)
-----Layout Script (介面)
專案下載
------ 結果圖-----
using System.Collections.Generic; using System.Data; using System; using MySql.Data.MySqlClient; using System.Text; namespace MySQL { public class MySQL { public static MySqlConnection mySqlConnection; // DataBase Ip; private static string HOST = "163.15.198.171"; public static string HOST_TYPE { set { HOST = value; } get { return HOST; } } // DataBase user Id private static string ID = "gsp40213"; public static string ID_TYPE { set { ID = value; } get { return ID; } } // DataBase password private static string PASSWORD = "******"; public static string PASSWORD_TYPE { set { PASSWORD = value; } get { return PASSWORD; } } // DataBase Name private static string DATABASE = "corpus2"; public static string DATABASE_TYPE { set { DATABASE = value; } get { return DATABASE; } } private static string PORT = "****"; public static string PORT_TYPE { set { PORT = value; } get { return PORT; } } // 連線結果 public static string RESULT = ""; // Connect to SQL public static void OpenSqlConnection(string connction) { try { mySqlConnection = new MySqlConnection(connction); mySqlConnection.Open(); RESULT = mySqlConnection.ServerVersion; } catch { RESULT = "無法連接資料庫"; } } // Close Sql public static void closeSqlConnection() { mySqlConnection.Close(); mySqlConnection.Dispose(); mySqlConnection = null; } // SQL Query public static void DOQUERY(string sqlQuery) { IDbCommand dbcommand = mySqlConnection.CreateCommand(); dbcommand.CommandText = sqlQuery; IDataReader reader = dbcommand.ExecuteReader(); reader.Close(); reader = null; dbcommand.Dispose(); dbcommand = null; } // Get DataSet public static DataSet GetDataSet(string sqlString) { DataSet ds = new DataSet(); try { MySqlDataAdapter da = new MySqlDataAdapter(sqlString, mySqlConnection); } catch (Exception e) { throw new Exception("SQL:" + sqlString + "\n"); } return ds; } ////// string to uft8 /// /// ///message: sentence ///public static string STRING_UTF8(string message) { UTF8Encoding encoder = new UTF8Encoding(); byte[] bytes = Encoding.UTF8.GetBytes(message); string utf8ReturenString = encoder.GetString(bytes); return utf8ReturenString; } /// /// INQUIRE_DATABASE /// /// /// /// ///* dataBaseTitle : DataBaseName ///* dataBaseTitle : DataBaseName ///* numberingType : 0(Message)、1(Words)、2(Mark)、3(Words2)、4(Mark2)、5(Lexical) ///* message: message ///public static string INQUIRE_DATABASE(string dataBaseTitle, int numberingType, string message) { string sqlText = "select * from " + dataBaseTitle + " where Message='" + message + "'"; string str = ""; MySqlCommand cmd = new MySqlCommand(sqlText, mySqlConnection); MySqlDataReader data = cmd.ExecuteReader(); while (data.Read()) { try { str = data[numberingType].ToString(); } finally { } } data.Close(); return str; } /// /// /// ///詞性標記顯示 ///words: dataBase table[1] ///public static string wordsMark(string words) { string str = ""; switch (words.ToString()) { case "A": str = "非謂形容詞"; break; case "Caa": str = "對等連接詞"; break; case "Cab": str = "連接詞"; break; case "Cba": str = "連接詞"; break; case "Cbb": str = "關聯連接詞"; break; case "Da": str = "數量副詞"; break; case "Dfa": str = "動詞前副詞"; break; case "Dfb": str = "動詞後副詞"; break; case "Di": str = "時態標記"; break; case "Dk": str = "句副詞"; break; case "D": str = "副詞"; break; case "Na": str = "普通名詞"; break; case "Nb": str = "專有名詞"; break; case "Nc": str = "地方詞"; break; case "Ncd": str = "位置詞"; break; case "Nd": str = "時間詞"; break; case "Neu": str = "數量定詞"; break; case "Nes": str = "特指定詞"; break; case "Nep": str = "指代定詞"; break; case "Neqa": str = "數量定詞"; break; case "Neqb": str = "數量定詞(後置)"; break; case "Nf": str = "量詞"; break; case "Ng": str = "後置詞"; break; case "Nh": str = "代名詞"; break; case "Nv": str = "名物化動詞"; break; case "I": str = "感嘆詞"; break; case "P": str = "介詞"; break; case "T": str = "語助詞"; break; case "VA": str = "動作不及物動詞"; break; case "VAC": str = "動作使動動詞"; break; case "VB": str = "動作類及物動詞"; break; case "VC": str = "動作及物動詞"; break; case "VCL": str = "動作接地方賓語動詞"; break; case "VD": str = "雙賓動詞"; break; case "VE": str = "動作句賓動詞"; break; case "VF": str = "動作謂賓動詞"; break; case "VG": str = "分類動詞"; break; case "VH": str = "狀態不及物動詞"; break; case "VHC": str = "狀態使動動詞"; break; case "VI": str = "狀態類及物動詞"; break; case "VJ": str = "狀態及物動詞"; break; case "VK": str = "狀態句賓動詞"; break; case "VL": str = "狀態謂賓動詞"; break; case "V_2": str = "不及物連接動詞"; break; case "DE": str = "狀態感嘆詞"; break; case "SHI": str = "不及物狀態動詞"; break; case "FW": str = "外文"; break; case "COMMACATEGORY": str = "逗號"; break; case "DASHCATEGORY": str = "破折號"; break; case "ETCCATEGORY": str = "刪節號"; break; case "EXCLAMATIONCATEGORY": str = "感嘆號"; break; case "PARENTHESISCATEGORY": str = "括號"; break; case "PAUSECATEGORY": str = "頓號"; break; case "PERIODCATEGORY": str = "句號"; break; case "QUESTIONCATEGORY": str = "問號"; break; case "SEMICOLONCATEGORY": str = "分號"; break; case "SPCHANGECATEGORY": str = "雙直號"; break; } return str; } } }
---------SegmentationSymbolTool Script (斷字功能)----------
using System.Collections; using System.Collections.Generic; using System.Text.RegularExpressions; namespace SegmentationSymbolTool { public class SegmentationSymbol2 { // 斷詞標記括號 private string[] specialSymbol = new string[] { "(", ")" }; // 斷字狀態 private string statusBroken; // 刪除特殊符號 public string delectSymbol(string userMessage) { string strs = userMessage; for (int x = 0; x < specialSymbol.Length; x++) strs = strs.Replace(specialSymbol[x], " "); return strs; } ////// 斷字字數 /// /// private void status_conter(int status) { statusBroken = ""; for (int x = 0; x <= status; x++) statusBroken += @"\S"; } ///status: sentence Lenght ////// 刪除訊息 /// /// /// ///message: sentence ///status: Hyphenation state ///public string delectWord(string message, int status) { string str = message; return str.Remove(status).ToString(); } /// /// 斷字狀態 /// /// /// ///message: sentence ///status: Hyphenation state ///public List brokenSatus(string message, int status) { status_conter(status); List match = new List (); MatchCollection splitResult = Regex.Matches(message, statusBroken, RegexOptions.IgnoreCase); foreach (Match test in splitResult) match.Add(test); return match; } /// /// 組合處理 /// /// /// ///message: sentence ///int: Hyphenation state ///public List delect_Word_Combination(string message, int status) { status_conter(status); string str = message; List match = new List (); List stringList = new List (); MatchCollection splitResult = Regex.Matches(str, statusBroken, RegexOptions.IgnoreCase); foreach (Match test in splitResult) match.Add(test.ToString()); foreach (string strs in match) { stringList.Add(str.Replace(strs, "")); return stringList; } return stringList; } /// /// /// /// ///斷字處理 ///message: sentence ///status: Hyphenation state ///public List delect_oneWord(string message, int status) { status_conter(status); string str = message; List match = new List (); List stringList = new List (); MatchCollection splitResult = Regex.Matches(str, statusBroken, RegexOptions.IgnoreCase); foreach (Match test in splitResult) match.Add(test.ToString()); foreach (string strs in match) stringList.Add(str.Replace(strs, "")); return stringList; } } }
------LongWordsFirst2 Scrit (長詞優先法)
using System.Collections; using System.Collections.Generic; using UnityEngine; using System.Text.RegularExpressions; using System; public class LongWordsFirst2 : MonoBehaviour { // 斷詞工具 private SegmentationSymbolTool.SegmentationSymbol2 segmentationSybolTool = new SegmentationSymbolTool.SegmentationSymbol2(); // 斷字系統資料表 private static string dataBasetitle = "glossary"; // 顯示結果 private string resultMessage; public string resultMessageType { get { return resultMessage; } } // 使用者輸入句子 private string message = ""; public string messageType { set { message = value; } get { return message; } } // 正向長詞優先 public string logeWordForward; // 反向長詞優先 public string logeWordReverse; public string logeWordReverseType { get { return logeWordReverse; } } // 正向長詞優先長度, 反向長詞優先長度, 組合長度 private int logeWordForwadLenght, logeWordReverseLenght; // 正向長詞優先結果 private ListlogeWordForwardFunctionList = new List (); public List logeWordForwardFunctionListType { get { return logeWordForwardFunctionList; } } // 反向長詞優先結果 private List logeWordReverseFunctuinList = new List (); // 正向長詞優先標記結果 private List logeWordForwardLexicalFunctionList = new List (); public List logeWordForwardLexicalFunctionListType { get { return logeWordForwardLexicalFunctionList; } } // 反向長詞優先結果 public List logeWordReverseLexicalFunctionList = new List (); public List logeWordReverseLexicalFunctionListType { get { return logeWordReverseLexicalFunctionList; } } // 反向長詞方向校正結果 public List logeWordReverseCorrectionList = new List (); public List logeWordReverseCorrectionListType { get { return logeWordReverseCorrectionList; } } // 正向長詞優先詞性變化1 private List logeWordForwardMark1List = new List (); public List logeWordForwardMark1Type { get { return logeWordForwardMark1List; } } // 反向長詞優先詞性變化1 private List logeWordReverseMark1List = new List (); public List logeWordReverseMark1Tpye { get { return logeWordReverseMark1List; } } // 打開資料庫 public void OpenDataBase() { string connectionString = string.Format("Server = {0}; Database = {1}; UserID = {2}; Password = {3}; Port = {4};", MySQL.MySQL.HOST_TYPE, MySQL.MySQL.DATABASE_TYPE, MySQL.MySQL.ID_TYPE, MySQL.MySQL.PASSWORD_TYPE, MySQL.MySQL.PORT_TYPE); MySQL.MySQL.OpenSqlConnection(connectionString); } /// /// 關閉資料庫 /// public void closeDataBase() { MySQL.MySQL.closeSqlConnection(); } ////// 切字準備 /// public void cuttingReady() { logeWordForward = message; logeWordReverse = message; logeWordForwadLenght = logeWordForward.Length; logeWordReverseLenght = logeWordReverse.Length; // 清除List logeWordForwardFunctionList.Clear(); logeWordReverseFunctuinList.Clear(); logeWordForwardLexicalFunctionList.Clear(); logeWordReverseLexicalFunctionList.Clear(); logeWordReverseCorrectionList.Clear(); logeWordForwardMark1List.Clear(); logeWordReverseMark1List.Clear(); // 執行正向長詞優先 StartCoroutine(loneWordForwardFunction()); // 執行反向長詞優先 StartCoroutine(longWordReverseFunction(0)); // 正向長詞優先詞位標記 StartCoroutine(logeWordForwardLexicalFunction(logeWordForwardFunctionList, logeWordForwardLexicalFunctionList)); // 反向長詞優先方校校正 StartCoroutine(logeWordReverseCorrectionFunction()); // 反向長詞優先詞位標記 StartCoroutine(logeWordForwardLexicalFunction(logeWordReverseCorrectionList, logeWordReverseLexicalFunctionList)); // 正向長詞優先詞性變化1 StartCoroutine(logeMakesFunction()); } ///優先執行 ////// 檢查沒有數據 /// /// /// ///Message: contence ///Database No Data ///private string inspection(string message, List list) { string str = message; foreach (string str1 in list) { str = str.Replace(str1, ""); } return str; } /// /// 反向長詞優先校正 /// IEnumerator logeWordReverseCorrectionFunction() { while (true) { if (logeWordReverse.Equals("")) { for (int x = logeWordReverseFunctuinList.Count-1; x >= 0; x--) logeWordReverseCorrectionList.Add(logeWordReverseFunctuinList[x]); break; } yield return new WaitForSeconds(0.5f); } } ////// 詞位標籤 /// /// /// ///longWord: positive longWord / reverse longWord ///LexicalResult: positive longWord Result / reverse longWord Result ///IEnumerator logeWordForwardLexicalFunction(List longWord, List LexicalResult) { int number = 0; while (true) { if (logeWordForward.Equals("")) { foreach (string str in longWord) { LexicalResult.Add(MySQL.MySQL.INQUIRE_DATABASE(dataBasetitle, 5, str)); number += 1; } // 限制迴圈執行 if (number <= longWord.Count) break; } yield return new WaitForSeconds(0.5f); } } /// /// 正向長詞優先 /// ///IEnumerator: unity執行序 ///IEnumerator loneWordForwardFunction() { while (true) { foreach (Match match in segmentationSybolTool.brokenSatus(logeWordForward, logeWordForwadLenght)) { if (match.ToString() == MySQL.MySQL.INQUIRE_DATABASE(dataBasetitle, 0, match.ToString())) { logeWordForwardFunctionList.Add(match.ToString()); logeWordForward = inspection(logeWordForward, logeWordForwardFunctionList); logeWordForwadLenght = logeWordForward.Length; } } if (logeWordForwadLenght <= 0) logeWordForwadLenght = 0; else logeWordForwadLenght -= 1; yield return new WaitForSeconds(0.5f); } } /// /// 後向長詞優先 /// /// ///lenght: sentence lenght ///IEnumerator: unity 執行序 ///IEnumerator longWordReverseFunction(int lenght) { while (true) { foreach (Match match in segmentationSybolTool.brokenSatus(logeWordReverse, logeWordReverse.Length)) { if (match.ToString() == MySQL.MySQL.INQUIRE_DATABASE(dataBasetitle, 0, match.ToString())) { logeWordReverseFunctuinList.Add(match.ToString()); logeWordReverse = segmentationSybolTool.delectWord(logeWordReverse, match.Length); } } try { foreach (string str in segmentationSybolTool.delect_Word_Combination(logeWordReverse, lenght)) { if (str == MySQL.MySQL.INQUIRE_DATABASE(dataBasetitle, 0, str)) { logeWordReverseFunctuinList.Add(str); lenght = 0; logeWordReverse = segmentationSybolTool.delectWord(logeWordReverse, logeWordReverse.Length - str.Length); } } lenght += 1; if (logeWordReverse == MySQL.MySQL.INQUIRE_DATABASE(dataBasetitle, 0, logeWordReverse)) { logeWordReverseFunctuinList.Add(logeWordReverse); logeWordReverse = segmentationSybolTool.delectWord(logeWordReverse, logeWordReverse.Length - MySQL.MySQL.INQUIRE_DATABASE(dataBasetitle, 0, logeWordReverse).Length); } if (lenght >= logeWordReverseLenght) lenght = 0; } catch (Exception e) { logeWordReverseFunctuinList.Remove("");} yield return new WaitForSeconds(0.5f); } } /// /// logeMakesFunction /// ///Variety1 and Variety2 ///IEnumerator logeMakesFunction() { while (true) { if (logeWordForward.Equals("")) { // 正向長詞優先詞性變化1 foreach (string str in logeWordForwardFunctionList) logeWordForwardMark1List.Add(MySQL.MySQL.INQUIRE_DATABASE(dataBasetitle, 2, str)); // 反向長詞優先詞性變化1 foreach(string str in logeWordReverseCorrectionList) logeWordReverseMark1List.Add(MySQL.MySQL.INQUIRE_DATABASE(dataBasetitle, 2, str)); break; } yield return new WaitForSeconds(0.5f); } } /// /// result Systematics /// ///public IEnumerator logWordResultSystematics() { string logeWordForwardMessage = "", logeWordReverseMessage = ""; string logeWordForward_LexicalMessage = "", logeWordReverse_LexicalMessage = ""; while (true) { if (logeWordForward.Equals("")) { for (int x = 0; x <= logeWordForwardFunctionList.Count - 1; x++) logeWordForwardMessage += logeWordForwardFunctionList[x] + "(" + logeWordForwardMark1List[x] + ")" + " "; for (int x = 0; x <= logeWordReverseCorrectionList.Count - 1; x++) logeWordReverseMessage += logeWordReverseCorrectionList[x] + "(" + logeWordReverseMark1List[x] + ")" + " "; foreach (string str in logeWordForwardLexicalFunctionList) logeWordForward_LexicalMessage += str + "|"; foreach (string str in logeWordReverseLexicalFunctionList) logeWordReverse_LexicalMessage += str + "|"; resultMessage = "正向長詞優先結果: \n" + logeWordForwardMessage + "\n\n" + "反向長詞優先結果: \n" + logeWordReverseMessage + "\n\n" + "正向長詞詞位標記: \n" + logeWordForward_LexicalMessage + "\n\n" + "反向長詞詞位標記: \n" + logeWordReverse_LexicalMessage; break; } yield return new WaitForSeconds(0.5f); } } }
-----Layout Script (介面)
using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.UI; public class Layout : LongWordsFirst2 { public Text systemMessage, inputMessage, result, runStatus; public InputField userField; public Button buttonEnter; public Button buttonRefill; public Button exit; public Image inputMessageBackground; public Button Sort; // 顯示文字結果 public Text resultText; public Scrollbar scrollbarResult; ////// 確定 /// void btnOnClick_Enter() { cuttingReady(); } ////// 重填 /// void btnOnClick_Refill() { inputFieldType(userField, 0.6f, 1, 1, 1).text = ""; messageType = ""; } ////// 顯示結果 /// void btnOnClick_Sort() { try { if (logeWordReverseType.Length == 0) { textType(runStatus, "(等待執行)", 25, Color.blue, 0.6f, 1.8f); // title StartCoroutine(logWordResultSystematics()); resultTextType(resultText).text = resultMessageType; // display result Message } else { textType(runStatus, "(執行)", 25, Color.blue, 0.6f, 1.8f); } } catch { } } ////// 離開應用程式 /// void btnOnClick_Exit() { Application.Quit(); MySQL.MySQL.closeSqlConnection(); } ////// button Component /// /// /// /// /// /// ///btn: button Obj ///width / height: button Obj posistion ///sizeX / sizeY: button Obj size ///Button buttonType(Button btn, float width, float height, float sizeX, float sizeY) { try { btn.transform.position = new Vector2(Screen.width / 2 * width, Screen.height / 2 * height); // posistion btn.transform.position = new Vector2(Screen.width / 2 * width, Screen.height / 2 * height); // imageSize btn.image.rectTransform.sizeDelta = new Vector2(Screen.width / 2 * sizeX, sizeY); switch (btn.name) { case "Enter": btn.onClick.AddListener(() => btnOnClick_Enter()); break; case "Refill": btn.onClick.AddListener(() => btnOnClick_Refill()); break; case "Exit": btn.onClick.AddListener(() => btnOnClick_Exit()); break; case "Sort": btn.onClick.AddListener(() => btnOnClick_Sort()); break; } } catch { } return btn; } /// /// inputField Component /// /// /// /// /// /// /// ///InputField: inputField Obj ///message: sentence message ///width / height: inputField Obj posistion ///sizeX / sizeY: inputField size ///InputField inputFieldType(InputField inputField,float width, float height, float sizeX, float sizeY) { inputField.transform.position = new Vector2(Screen.width / 2 * width, Screen.height / 2 * height); inputField.image.rectTransform.sizeDelta = new Vector2(Screen.width / 2 * sizeX, Screen.height / 2 * sizeY); return inputField; } /// /// scrollbarType /// /// /// /// /// /// ///Scrollbar: scrollbar obj ///width / height: scrollbar obj posistion ///sizeX / sizeY: scrollbar obj size ///Scrollbar scrollbarType(Scrollbar scrollbar, float width, float height) { try { scrollbar.transform.position = new Vector2(Screen.width / 2 * width, Screen.height / 2 * height); } catch { } return scrollbar; } // Text 屬性 Text textType(Text text, string message, int fontsize, Color color, float width, float height) { try { Color col = new Color(color.r, color.g, color.b); // posistion text.rectTransform.position = new Vector2(Screen.width / 2 * width, Screen.height / 2 * height); text.text = message; text.fontSize = fontsize; text.color = col; } catch { } return text; } /// /// ImageType /// /// /// /// /// /// ///Image: image obj ///width / height: image obj posistion ///sizeX / sizeY: image obj size ///Image ImageType(Image image, float width, float height, float sizeX, float sizeY) { try { // posistion image.rectTransform.position = new Vector2(Screen.width / 2 * width, Screen.height / 2 * height); // imageSize image.rectTransform.sizeDelta = new Vector2(Screen.width / 2 * sizeX, Screen.height / 2 * sizeY); } catch { } return image; } /// /// resultTextType /// /// ///Text resultTextType(Text text) { try { text.horizontalOverflow = HorizontalWrapMode.Wrap; text.verticalOverflow = VerticalWrapMode.Overflow; } catch { } return text; } void Start() { OpenDataBase(); // openDatabase textType(systemMessage, "歡迎使用系統", 25, Color.red, 0.3f, 1.8f); // title textType(inputMessage,"請輸入句子", 25, Color.red, 0.3f, 1.6f); // title buttonType(buttonEnter, 0.2f, 0.3f, 0.2f, 30); // enter button buttonType(buttonRefill, 0.6f, 0.3f, 0.2f, 30); // return input Message button buttonType(exit, 1f, 0.3f, 0.2f, 30); // exit button buttonType(Sort, 0.4f, 0.3f, 0.2f, 30); // sort button textType(result, "結果", 25, Color.red, 1.4f, 1.8f); // result } void Update() { messageType = inputFieldType(userField, 0.6f, 1, 1, 1).text; // user input Message ImageType(inputMessageBackground, 1.55f, 1.1f, 0.8f, 1.2f); // result background scrollbarType(scrollbarResult, 1.93f, 1.1f); } }
專案下載
------ 結果圖-----
沒有留言:
張貼留言