Exemple #1
0
        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);
        }
Exemple #2
0
        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);
        }
Exemple #3
0
        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));
        }
Exemple #4
0
 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);
 }
Exemple #5
0
        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();
        }