Beispiel #1
0
 static void DisplayParseResults(
     string[] words, int[] tags, int[] results, ParseTarget target)
 {
     Console.ForegroundColor = ConsoleColor.Yellow;
     Console.WriteLine("Tags:");
     for (int i = 0; i < words.Length; i++)
     {
         dynamic tag = tags[i];
         if (target == ParseTarget.Address)
         {
             tag = (AddressTag)tag;
         }
         else
         {
             tag = (NameTag)tag;
         }
         Console.WriteLine($"    {words[i]}: {tag}");
     }
     Console.ForegroundColor = ConsoleColor.Cyan;
     Console.WriteLine("Parsed:");
     for (int i = 0; i < words.Length; i++)
     {
         dynamic label = results[i];
         if (target == ParseTarget.Address)
         {
             label = (AddressLabel)label;
         }
         else
         {
             label = (NameLabel)label;
         }
         Console.WriteLine($"    {words[i]}: {label}");
     }
 }
Beispiel #2
0
        static void ParseFromConsole(HiddenMarkovModel hmm, ParseTarget target)
        {
            ConsoleColor defaultColor = Console.ForegroundColor;
            ITagger      tagger;

            char[] splitChars = null;
            if (target == ParseTarget.Address)
            {
                tagger     = new AddressTagger();
                splitChars = new char[1] {
                    '-'
                };
            }
            else
            {
                tagger = new NameTagger();
            }
            while (true)
            {
                Console.WriteLine($"Enter the {target}:");
                Console.ForegroundColor = ConsoleColor.Green;
                string input = Console.ReadLine();
                if (string.IsNullOrWhiteSpace(input))
                {
                    continue;
                }
                string[] words  = Preprocessing.GetFormattedWords(input, splitChars);
                int[]    tags   = tagger.TagInput(words);
                int[]    result = hmm.Decide(tags);
                DisplayParseResults(words, tags, result, target);
                Console.ForegroundColor = defaultColor;
            }
        }
Beispiel #3
0
        private ModEntityData <T> CreateDependant <T>(EntityCreator <T> creator, ParseTarget parseTarget) where T : Entity
        {
            ModEntityData <T> entities = null;

            foreach (var modDirectoryHelper in StellarisDirectoryHelper.CreateCombinedList(stellarisDirectoryHelper, modDirectoryHelpers))
            {
                entities = creator.ProcessDirectoryHelper(entities, modDirectoryHelper, techsAndDependencies);
            }

            return(entities);
        }
Beispiel #4
0
        static void Test(HiddenMarkovModel hmm, ParseTarget target)
        {
            string filePath = GetFilePath(".csv", "Please enter path to test data file:");
            Tuple <int[][], int[][]> xAndY = GetTransformedData(filePath, target);

            Console.WriteLine("Testing model...");
            ModelTester   tester  = new ModelTester(hmm);
            HMMTestResult results = tester.Test(xAndY);

            Console.WriteLine("Results:");
            Console.WriteLine($"    Total Accuracy: {results.TotalAccuracy:0.###}");
            Console.WriteLine($"    Average Accuracy: {results.AverageAccuracy:0.###}");
        }
        public static IEnumerable <Entity> Get(this ObjectsDependantOnTechs deps, ParseTarget parseTarget)
        {
            switch (parseTarget)
            {
            case ParseTarget.Technologies: throw new InvalidOperationException("No techs in dependants");

            case ParseTarget.Buildings: return(deps.Buildings.AllEntities);

            case ParseTarget.ShipComponents: return(deps.ShipComponentsSets.AllEntities);

            case ParseTarget.Decisions: return(deps.Decisions.AllEntities);

            default: throw new InvalidOperationException("Unknown type: " + parseTarget);
            }
        }
        public static string ImagesDirectory(this ParseTarget target)
        {
            switch (target)
            {
            case ParseTarget.Technologies: return("technologies");

            case ParseTarget.Buildings: return("buildings");

            case ParseTarget.ShipComponents: return("ship_parts");

            case ParseTarget.Decisions: return("decisions");
            }

            return(null);
        }
Beispiel #7
0
        static void Train(ParseTarget target)
        {
            string filePath = GetFilePath(".csv", "Please enter path to training data file:");
            Tuple <int[][], int[][]> xAndY = GetTransformedData(filePath, target);

            Console.WriteLine("Training model...");
            HiddenMarkovModel hmm = null;

            if (target == ParseTarget.Name)
            {
                ModelTrainer <NameTag, NameLabel> trainer = new ModelTrainer <NameTag, NameLabel>();
                hmm = trainer.TrainModel(xAndY.Item1, xAndY.Item2);
            }

            if (target == ParseTarget.Address)
            {
                ModelTrainer <AddressTag, AddressLabel> trainer = new ModelTrainer <AddressTag, AddressLabel>();
                hmm = trainer.TrainModel(xAndY.Item1, xAndY.Item2);
            }

            Console.WriteLine("Model trained.");

            Console.WriteLine("Do you want to (T)est this model or (S)ave it right away?");
            ConsoleKey key = Console.ReadKey().Key;

            if (key == ConsoleKey.T)
            {
                Test(hmm, target);
                Console.WriteLine("Save this model (Y/N)?");
                ConsoleKey saveKey = Console.ReadKey().Key;
                if (saveKey == ConsoleKey.Y)
                {
                    SaveModel(hmm);
                }
            }

            if (key == ConsoleKey.S)
            {
                SaveModel(hmm);
            }
        }
Beispiel #8
0
        private ModEntityData <T> ProcessDependant <T>(EntityCreator <T> creator, ParseTarget parseTarget) where T : Entity
        {
            ModEntityData <T> entities = CreateDependant(creator, parseTarget);

            entities?.ApplyToChain((ents, links) => {
                var invalidEntities = ents.Where(x => !x.Value.Prerequisites.Any()).Select(x => x.Value).ToList();
                foreach (var invalidEntity in invalidEntities)
                {
                    Log.Logger.Warning("Removing {entityId} from {file} dependant entities as we were unable to locate its specified pre-requisite techs", invalidEntity.Id,
                                       invalidEntity.FilePath);
                    ents.Remove(invalidEntity.Id);
                    var invalidLinks = links.Where(x => x.To.Id == invalidEntity.Id).ToList();
                    links.RemoveAll(invalidLinks);
                }
            });

            if (entities != null)
            {
                foreach (var entity in entities.AllEntities)
                {
                    foreach (var prerequisite in entity.Prerequisites)
                    {
                        if (prerequisite.ExtraDesc != null)
                        {
                            entity.ExtraDesc = prerequisite.ExtraDesc;
                        }
                    }
                }

                Log.Logger.Debug("Processed {entityCount} {parseTarget} with {linkCount} links", entities.EntityCount, parseTarget, entities.LinkCount);
            }
            else
            {
                Log.Logger.Warning("{parseTarget} had no items in any of the sources");
            }

            return(entities);
        }
Beispiel #9
0
        static Tuple <int[][], int[][]> GetTransformedData(string filePath, ParseTarget target)
        {
            Tuple <int[][], int[][]> result = null;

            Console.WriteLine("Loading and transforming records...");
            if (target == ParseTarget.Address)
            {
                RecordsLoader <AddressTrainingSample> loader = new RecordsLoader <AddressTrainingSample>(filePath);
                RecordsTransformer <AddressTrainingSample, AddressLabel, AddressTagger> transformer =
                    new RecordsTransformer <AddressTrainingSample, AddressLabel, AddressTagger>();
                result = transformer.GetXAndY(loader.Load(), '-');
            }

            if (target == ParseTarget.Name)
            {
                RecordsLoader <NameTrainingSample> loader = new RecordsLoader <NameTrainingSample>(filePath);
                RecordsTransformer <NameTrainingSample, NameLabel, NameTagger> transformer =
                    new RecordsTransformer <NameTrainingSample, NameLabel, NameTagger>();
                result = transformer.GetXAndY(loader.Load());
            }

            return(result);
        }
 public TestData(ParseTarget target)
 {
     Arguments = new string[] {};
     Target    = target;
 }
 public TestData(ParseTarget target, params string[] args)
 {
     Arguments = args;
     Target    = target;
 }
Beispiel #12
0
        static void Main(string[] args)
        {
            ConsoleColor defaultColor = Console.ForegroundColor;

            ShowTitle(defaultColor);

            while (true)
            {
                Console.WriteLine("What will this model be parsing?");
                Console.WriteLine(" A: Addresses");
                Console.WriteLine(" N: Names");
                ParseTarget target    = ParseTarget.Name;
                ConsoleKey  targetKey = Console.ReadKey().Key;
                if (targetKey == ConsoleKey.A)
                {
                    target = ParseTarget.Address;
                }
                if (targetKey == ConsoleKey.N)
                {
                    target = ParseTarget.Name;
                }
                Console.WriteLine($"Parse Target: {target}");

                ConsoleKey key = PromptForMainOption();

                try
                {
                    if (key == ConsoleKey.N)
                    {
                        Train(target);
                    }
                    else if (key == ConsoleKey.E)
                    {
                        string modelPath =
                            GetFilePath(REQUIRED_MODEL_EXTENSION, "Please enter path to your model file:");
                        HiddenMarkovModel hmm = Serializer.Load <HiddenMarkovModel>(modelPath);
                        Test(hmm, target);
                    }
                    else if (key == ConsoleKey.P)
                    {
                        string modelPath =
                            GetFilePath(REQUIRED_MODEL_EXTENSION, "Please enter path to your model file:");
                        HiddenMarkovModel hmm = Serializer.Load <HiddenMarkovModel>(modelPath);
                        ParseFromConsole(hmm, target);
                    }
                    else
                    {
                        Console.ForegroundColor = ConsoleColor.Red;
                        Console.WriteLine();
                        Console.WriteLine($"{key} is not one of the options.");
                        Console.ForegroundColor = defaultColor;
                    }
                }
                catch (Exception ex)
                {
                    Console.ForegroundColor = ConsoleColor.Red;
                    Console.WriteLine("An error occurred!");
                    Console.WriteLine($"{ex.GetType().Name}: {ex.Message}");
                    Trace.WriteLine(ex.StackTrace);
                    Console.ForegroundColor = defaultColor;
                }
            }
        }