Beispiel #1
0
        public void Meanings()
        {
            DispatcherHelper.Initialize();
            var projectService = Substitute.For <IProjectService>();
            var busyService    = Substitute.For <IBusyService>();
            var exportService  = Substitute.For <IExportService>();

            var alignment = new MultipleWordAlignmentViewModel(projectService, busyService, exportService);

            var project = new CogProject(_spanFactory)
            {
                Meanings = { new Meaning("gloss2", "cat2"), new Meaning("gloss1", "cat1"), new Meaning("gloss3", "cat3") }
            };

            projectService.Project.Returns(project);
            projectService.ProjectOpened += Raise.Event();

            Assert.That(alignment.SelectedMeaning, Is.Null);
            alignment.MeaningsView = new ListCollectionView(alignment.Meanings);

            Assert.That(alignment.SelectedMeaning.Gloss, Is.EqualTo("gloss1"));
            Assert.That(alignment.MeaningsView.Cast <MeaningViewModel>().Select(s => s.Gloss), Is.EqualTo(new[] { "gloss1", "gloss2", "gloss3" }));

            project.Meanings.Insert(0, new Meaning("gloss4", "cat4"));
            Assert.That(alignment.MeaningsView.Cast <MeaningViewModel>().Select(s => s.Gloss), Is.EqualTo(new[] { "gloss1", "gloss2", "gloss3", "gloss4" }));
        }
Beispiel #2
0
        public void Words()
        {
            DispatcherHelper.Initialize();
            var segmentPool     = new SegmentPool();
            var projectService  = Substitute.For <IProjectService>();
            var busyService     = Substitute.For <IBusyService>();
            var exportService   = Substitute.For <IExportService>();
            var dialogService   = Substitute.For <IDialogService>();
            var analysisService = new AnalysisService(_spanFactory, segmentPool, projectService, dialogService, busyService);

            var alignment = new MultipleWordAlignmentViewModel(projectService, busyService, exportService);

            var project = TestHelpers.GetTestProject(_spanFactory, segmentPool);

            project.Meanings.AddRange(new[] { new Meaning("gloss1", "cat1"), new Meaning("gloss2", "cat2"), new Meaning("gloss3", "cat3") });
            project.Varieties.AddRange(new[] { new Variety("variety1"), new Variety("variety2"), new Variety("variety3") });
            project.Varieties[0].Words.AddRange(new[] { new Word("hɛ.loʊ", project.Meanings[0]), new Word("gʊd", project.Meanings[1]), new Word("bæd", project.Meanings[2]) });
            project.Varieties[1].Words.AddRange(new[] { new Word("hɛlp", project.Meanings[0]), new Word("gu.gəl", project.Meanings[1]), new Word("gu.fi", project.Meanings[2]) });
            project.Varieties[2].Words.AddRange(new[] { new Word("wɜrd", project.Meanings[0]), new Word("kɑr", project.Meanings[1]), new Word("fʊt.bɔl", project.Meanings[2]) });
            projectService.Project.Returns(project);
            analysisService.SegmentAll();

            var varietyPairGenerator = new VarietyPairGenerator();

            varietyPairGenerator.Process(project);
            var wordPairGenerator = new SimpleWordPairGenerator(segmentPool, project, 0.3, ComponentIdentifiers.PrimaryWordAligner);

            foreach (VarietyPair vp in project.VarietyPairs)
            {
                wordPairGenerator.Process(vp);
                foreach (WordPair wp in vp.WordPairs)
                {
                    wp.AreCognatePredicted = true;
                    wp.CognicityScore      = 1.0;
                }
                vp.SoundChangeFrequencyDistribution   = new ConditionalFrequencyDistribution <SoundContext, Ngram <Segment> >();
                vp.SoundChangeProbabilityDistribution = new ConditionalProbabilityDistribution <SoundContext, Ngram <Segment> >(vp.SoundChangeFrequencyDistribution, (sc, fd) => new MaxLikelihoodProbabilityDistribution <Ngram <Segment> >(fd));
            }
            projectService.AreAllVarietiesCompared.Returns(true);
            projectService.ProjectOpened += Raise.Event();

            Assert.That(alignment.SelectedMeaning, Is.Null);
            Assert.That(alignment.Words, Is.Empty);

            alignment.MeaningsView = new ListCollectionView(alignment.Meanings);
            alignment.WordsView    = new ListCollectionView(alignment.Words);

            Assert.That(alignment.WordsView.Cast <MultipleWordAlignmentWordViewModel>().Select(w => w.StrRep), Is.EqualTo(new[] { "hɛ.loʊ", "hɛlp", "wɜrd" }));
            Assert.That(alignment.ColumnCount, Is.EqualTo(4));

            alignment.SelectedMeaning = alignment.Meanings[1];

            Assert.That(alignment.WordsView.Cast <MultipleWordAlignmentWordViewModel>().Select(w => w.StrRep), Is.EqualTo(new[] { "gu.gəl", "gʊd", "kɑr" }));
            Assert.That(alignment.ColumnCount, Is.EqualTo(5));

            project.Varieties.RemoveAt(project.Varieties.Count - 1);
            Messenger.Default.Send(new DomainModelChangedMessage(true));

            Messenger.Default.Send(new PerformingComparisonMessage());
            foreach (VarietyPair vp in project.VarietyPairs)
            {
                wordPairGenerator.Process(vp);
                foreach (WordPair wp in vp.WordPairs)
                {
                    wp.AreCognatePredicted = true;
                    wp.CognicityScore      = 1.0;
                }
                vp.SoundChangeFrequencyDistribution   = new ConditionalFrequencyDistribution <SoundContext, Ngram <Segment> >();
                vp.SoundChangeProbabilityDistribution = new ConditionalProbabilityDistribution <SoundContext, Ngram <Segment> >(vp.SoundChangeFrequencyDistribution, (sc, fd) => new MaxLikelihoodProbabilityDistribution <Ngram <Segment> >(fd));
            }
            Messenger.Default.Send(new ComparisonPerformedMessage());

            Assert.That(alignment.WordsView.Cast <MultipleWordAlignmentWordViewModel>().Select(w => w.StrRep), Is.EqualTo(new[] { "gu.gəl", "gʊd" }));
            Assert.That(alignment.ColumnCount, Is.EqualTo(5));

            project.Varieties.RemoveAt(project.Varieties.Count - 1);

            Messenger.Default.Send(new PerformingComparisonMessage());
            foreach (VarietyPair vp in project.VarietyPairs)
            {
                wordPairGenerator.Process(vp);
                foreach (WordPair wp in vp.WordPairs)
                {
                    wp.AreCognatePredicted = true;
                }
                vp.SoundChangeFrequencyDistribution   = new ConditionalFrequencyDistribution <SoundContext, Ngram <Segment> >();
                vp.SoundChangeProbabilityDistribution = new ConditionalProbabilityDistribution <SoundContext, Ngram <Segment> >(vp.SoundChangeFrequencyDistribution, (sc, fd) => new MaxLikelihoodProbabilityDistribution <Ngram <Segment> >(fd));
            }
            Messenger.Default.Send(new ComparisonPerformedMessage());

            Assert.That(alignment.WordsView, Is.Empty);
        }
Beispiel #3
0
        public CompareViewModel(SimilarityMatrixViewModel similarityMatrix, VarietyPairsViewModel varietyPairs, MultipleWordAlignmentViewModel multipleWordAlignment,
			CompareSettingsViewModel compareSettings)
            : base("Compare", similarityMatrix, varietyPairs, multipleWordAlignment, compareSettings)
        {
        }
Beispiel #4
0
 public CompareViewModel(SimilarityMatrixViewModel similarityMatrix, VarietyPairsViewModel varietyPairs, MultipleWordAlignmentViewModel multipleWordAlignment,
                         CompareSettingsViewModel compareSettings)
     : base("Compare", similarityMatrix, varietyPairs, multipleWordAlignment, compareSettings)
 {
 }