public void RoundTripXml()
 {
     try
     {
         Language lang = XmlLanguageLoader.Load(TestXmlFileName);
         XmlLanguageWriter.Save(lang, TempXmlFileName);
         string testXml = File.ReadAllText(TestXmlFileName).Replace("\r\n", "\n");
         string tempXml = File.ReadAllText(TempXmlFileName).Replace("\r\n", "\n");
         Assert.That(tempXml, Is.EqualTo(testXml));
     }
     finally
     {
         if (File.Exists(TempXmlFileName))
         {
             File.Delete(TempXmlFileName);
         }
     }
 }
예제 #2
0
        public ITranslationEngine Create(string engineId)
        {
            string         engineDir           = Path.Combine(_engineOptions.Value.EnginesDir, engineId);
            string         hcSrcConfigFileName = Path.Combine(engineDir, "src-hc.xml");
            string         hcTrgConfigFileName = Path.Combine(engineDir, "trg-hc.xml");
            TransferEngine transferEngine      = null;

            if (File.Exists(hcSrcConfigFileName) && File.Exists(hcTrgConfigFileName))
            {
                var hcTraceManager = new TraceManager();

                Language srcLang    = XmlLanguageLoader.Load(hcSrcConfigFileName);
                var      srcMorpher = new Morpher(hcTraceManager, srcLang);

                Language trgLang    = XmlLanguageLoader.Load(hcTrgConfigFileName);
                var      trgMorpher = new Morpher(hcTraceManager, trgLang);

                transferEngine = new TransferEngine(srcMorpher, new SimpleTransferer(new GlossMorphemeMapper(trgMorpher)), trgMorpher);
            }
            return(transferEngine);
        }
        public ITranslationEngine Create(Engine engine)
        {
            string         hcSrcConfigFileName = Path.Combine(engine.ConfigDirectory, "src-hc.xml");
            string         hcTrgConfigFileName = Path.Combine(engine.ConfigDirectory, "trg-hc.xml");
            TransferEngine transferEngine      = null;

            if (File.Exists(hcSrcConfigFileName) && File.Exists(hcTrgConfigFileName))
            {
                var spanFactory    = new ShapeSpanFactory();
                var hcTraceManager = new TraceManager();

                Language srcLang    = XmlLanguageLoader.Load(hcSrcConfigFileName);
                var      srcMorpher = new Morpher(spanFactory, hcTraceManager, srcLang);

                Language trgLang    = XmlLanguageLoader.Load(hcTrgConfigFileName);
                var      trgMorpher = new Morpher(spanFactory, hcTraceManager, trgLang);

                transferEngine = new TransferEngine(srcMorpher, new SimpleTransferer(new GlossMorphemeMapper(trgMorpher)), trgMorpher);
            }
            return(transferEngine);
        }
예제 #4
0
        private bool LoadProject(string fileName)
        {
            XElement projectElem;

            try
            {
                projectElem = XElement.Load(fileName);
            }
            catch (Exception)
            {
                return(false);
            }

            XElement engineElem = projectElem.Element("TranslationEngine");

            if (engineElem == null)
            {
                return(false);
            }

            var smtConfig = (string)engineElem.Element("SmtConfig");

            if (smtConfig == null)
            {
                return(false);
            }

            var hcSrcConfig = (string)engineElem.Element("SourceAnalyzerConfig");
            var hcTrgConfig = (string)engineElem.Element("TargetGeneratorConfig");

            string configDir = Path.GetDirectoryName(fileName);

            Debug.Assert(configDir != null);

            ITranslationEngine transferEngine = null;

            if (hcSrcConfig != null && hcTrgConfig != null)
            {
                Language srcLang    = XmlLanguageLoader.Load(Path.Combine(configDir, hcSrcConfig));
                var      srcMorpher = new Morpher(_hcTraceManager, srcLang);

                Language trgLang    = XmlLanguageLoader.Load(Path.Combine(configDir, hcTrgConfig));
                var      trgMorpher = new Morpher(_hcTraceManager, trgLang);

                transferEngine = new TransferEngine(srcMorpher,
                                                    new SimpleTransferer(new GlossMorphemeMapper(trgMorpher)), trgMorpher);
            }

            _smtModel = new ThotSmtModel(Path.Combine(configDir, smtConfig));
            IInteractiveSmtEngine smtEngine = _smtModel.CreateInteractiveEngine();

            _hybridEngine = new HybridTranslationEngine(smtEngine, transferEngine);

            var sourceTexts          = new List <IText>();
            var targetTexts          = new List <IText>();
            var alignmentCollections = new List <ITextAlignmentCollection>();

            using (_texts.BulkUpdate())
            {
                foreach (XElement textElem in projectElem.Elements("Texts").Elements("Text"))
                {
                    var name = (string)textElem.Attribute("name");

                    var metadataFileName = (string)textElem.Element("MetadataFile");
                    if (metadataFileName == null)
                    {
                        return(false);
                    }
                    metadataFileName = Path.Combine(configDir, metadataFileName);

                    var srcTextFileName = (string)textElem.Element("SourceFile");
                    if (srcTextFileName == null)
                    {
                        return(false);
                    }
                    srcTextFileName = Path.Combine(configDir, srcTextFileName);

                    var trgTextFileName = (string)textElem.Element("TargetFile");
                    if (trgTextFileName == null)
                    {
                        return(false);
                    }
                    trgTextFileName = Path.Combine(configDir, trgTextFileName);

                    var alignmentsFileName = (string)textElem.Element("AlignmentsFile");
                    if (alignmentsFileName != null)
                    {
                        alignmentsFileName = Path.Combine(configDir, alignmentsFileName);
                    }

                    var text = new TextViewModel(_tokenizer, name, metadataFileName, srcTextFileName, trgTextFileName,
                                                 alignmentsFileName)
                    {
                        Engine = _hybridEngine
                    };
                    text.PropertyChanged += TextPropertyChanged;
                    _texts.Add(text);

                    Func <TextSegment, bool> segmentFilter = s => text.IsApproved((TextSegmentRef)s.SegmentRef);
                    sourceTexts.Add(new FilteredText(new TextFileText(_tokenizer, name, srcTextFileName),
                                                     segmentFilter));
                    targetTexts.Add(new FilteredText(new TextFileText(_tokenizer, name, trgTextFileName),
                                                     segmentFilter));
                    if (alignmentsFileName != null)
                    {
                        alignmentCollections.Add(new TextFileTextAlignmentCollection(name, alignmentsFileName));
                    }
                }
            }
            if (_texts.Count == 0)
            {
                return(false);
            }

            _sourceCorpus    = new DictionaryTextCorpus(sourceTexts);
            _targetCorpus    = new DictionaryTextCorpus(targetTexts);
            _alignmentCorpus = new DictionaryTextAlignmentCorpus(alignmentCollections);

            CurrentText = _texts[0];
            AcceptChanges();
            RebuildTask.UpdateCanExecute();
            return(true);
        }
예제 #5
0
        public static int Main(string[] args)
        {
            Console.OutputEncoding = Encoding.UTF8;

            string inputFile   = null;
            string outputFile  = null;
            string scriptFile  = null;
            bool   showHelp    = false;
            bool   quitOnError = true;

            var p = new OptionSet
            {
                { "i|input-file=", "read configuration from {FILE}", value => inputFile = value },
                { "o|output-file=", "write results to {FILE}", value => outputFile = value },
                { "s|script-file=", "runs commands from {FILE}", value => scriptFile = value },
                { "c|continue", "continues when an error occurs while loading the configuration", value => quitOnError = value == null },
                { "h|help", "show this help message and exit", value => showHelp = value != null }
            };

            try
            {
                p.Parse(args);
            }
            catch (OptionException)
            {
                ShowHelp(p);
                return(-1);
            }

            if (showHelp || string.IsNullOrEmpty(inputFile))
            {
                ShowHelp(p);
                return(-1);
            }

            HCContext  context;
            TextWriter output = null;

            try
            {
                if (!string.IsNullOrEmpty(outputFile))
                {
                    output = new StreamWriter(outputFile);
                }

                Console.Write("Reading configuration file \"{0}\"... ", Path.GetFileName(inputFile));
                Language language = XmlLanguageLoader.Load(inputFile, quitOnError ? (Action <Exception, string>)null : (ex, id) => { });
                Console.WriteLine("done.");

                context = new HCContext(language, output ?? Console.Out);
                Console.Write("Compiling rules... ");
                context.Compile();
                Console.WriteLine("done.");
                Console.WriteLine("{0} loaded.", language.Name);
                Console.WriteLine();
            }
            catch (IOException ioe)
            {
                Console.WriteLine();
                Console.WriteLine("IO Error: " + ioe.Message);
                if (output != null)
                {
                    output.Close();
                }
                return(-1);
            }
            catch (Exception e)
            {
                Console.WriteLine();
                Console.WriteLine("Load Error: " + e.Message);
                if (output != null)
                {
                    output.Close();
                }
                return(-1);
            }

            ConsoleCommand[] commands = { new ParseCommand(context), new TracingCommand(context), new TestCommand(context), new StatsCommand(context) };

            string input;

            if (!string.IsNullOrEmpty(scriptFile))
            {
                using (var scriptReader = new StreamReader(scriptFile))
                {
                    input = scriptReader.ReadLine();
                    while (input != null)
                    {
                        if (!input.Trim().StartsWith("#") && input.Trim() != "")
                        {
                            string[] cmdArgs = CommandLineParser.Parse(input);
                            ConsoleCommandDispatcher.DispatchCommand(commands, cmdArgs, context.Out);
                        }
                        input = scriptReader.ReadLine();
                    }
                }
            }
            else
            {
                Console.Write("> ");
                input = Console.ReadLine();
                while (input != null && input.Trim() != "exit")
                {
                    if (input.Trim().IsOneOf("?", "help"))
                    {
                        ConsoleHelp.ShowSummaryOfCommands(commands, Console.Out);
                    }
                    else
                    {
                        string[] cmdArgs = CommandLineParser.Parse(input);
                        ConsoleCommandDispatcher.DispatchCommand(commands, cmdArgs, context.Out);
                    }
                    Console.Write("> ");
                    input = Console.ReadLine();
                }
            }

            if (output != null)
            {
                output.Close();
            }

            return(0);
        }