private HMM.Result Collapse(HMM.Result[] results) { HMM.Result r = new HMM.Result(); r.States = new string[results[0].Tokens.Length + 2]; r.States[0] = "start"; for (int i = 0; i < results.Length; i++) { if (results[i].Probability > 0.1) { for (int j = 0; j < results[i].States.Length; j++) { if (results[i].States[j] != "bg") { //Array.Resize<string>(ref r.States, r.States.Length + 1); r.States[j] = results[i].States[j]; } } } } for (int i = 0; i < r.States.Length; i++) { if (r.States[i] == null) { r.States[i] = "bg"; } } r.States[r.States.Length - 1] = "end"; r.Tokens = results[0].Tokens; return(r); }
public Dictionary <string, string[]> Extract(HMM.Result r, string q) { string[] tags = q.Split(','); Dictionary <string, string[]> d = new Dictionary <string, string[]>(); for (int i = 0; i < tags.Length; i++) { tags[i] = tags[i].Trim(); d.Add(tags[i], Grab(tags[i], r)); } return(d); }
public HMM.Result Tag(string input) { HMM.Result[] results = new HMM.Result[brain.Count]; int i = 0; foreach (var v in brain) { results[i] = v.Value.Tag(input); i++; } return(Collapse(results)); }
private string[] Grab(string tag, HMM.Result r) { tag = tag.ToLower(); string[] s = new string[0]; for (int i = 1; i < r.States.Length - 1; i++) { if (r.States[i] == tag) { Array.Resize <string>(ref s, s.Length + 1); s[s.Length - 1] = r.Tokens[i - 1]; } } return(s); }
static void Main(string[] args) { /*Train("Training Data/Data.xml"); * ConvertToProb(); * Tag(Console.ReadLine());*/ Brain b = new Brain("Brain.xml"); b.Train(); StreamReader file = new StreamReader("test.txt"); string q = file.ReadToEnd(); HMM.Result result = b.Tag(q); Console.Write("\n\nFINAL: " + result.States[0]); for (int i = 0; i < result.Tokens.Length; i++) { Console.Write(" " + result.Tokens[i] + "/" + result.States[i + 1]); } Console.Write(" " + result.States[result.States.Length - 1] + "\n"); Dictionary <string, string[]> d = b.Extract(result, "name,surname,location"); Console.WriteLine(""); foreach (var v in d) { Console.WriteLine(v.Key); for (int i = 0; i < v.Value.Length; i++) { Console.WriteLine(" " + v.Value[i]); } } Console.ReadLine(); }