Exemplo n.º 1
0
        private void UpdateSelectedChangeWordPairs(WordPairsViewModel wordPairs)
        {
            IWordAligner aligner = _projectService.Project.WordAligners[ComponentIdentifiers.PrimaryWordAligner];

            wordPairs.SelectedCorrespondenceWordPairs.Clear();
            foreach (WordPairViewModel wordPair in wordPairs.WordPairs)
            {
                bool selected = false;
                foreach (AlignedNodeViewModel node in wordPair.AlignedNodes)
                {
                    if (_selectedSoundChange == null)
                    {
                        node.IsSelected = false;
                    }
                    else
                    {
                        SoundContext    lhs  = wordPair.DomainAlignment.ToSoundContext(_segmentPool, 0, node.Column, aligner.ContextualSoundClasses);
                        Ngram <Segment> corr = wordPair.DomainAlignment[1, node.Column].ToNgram(_segmentPool);
                        node.IsSelected = lhs.Equals(_selectedSoundChange.DomainSoundChangeLhs) && corr.Equals(_selectedSoundChange.DomainCorrespondence);
                        if (node.IsSelected)
                        {
                            selected = true;
                        }
                    }
                }

                if (selected)
                {
                    wordPairs.SelectedCorrespondenceWordPairs.Add(wordPair);
                }
            }
        }
Exemplo n.º 2
0
 private void ResetSearch()
 {
     _startWordPairs = null;
     if (_selectedVarietyPair != null)
     {
         _selectedVarietyPair.Cognates.ResetSearch();
         _selectedVarietyPair.Noncognates.ResetSearch();
     }
     _searchWrapped = false;
 }
Exemplo n.º 3
0
        public VarietyPairViewModel(SegmentPool segmentPool, IProjectService projectService, WordPairsViewModel.Factory wordPairsFactory,
			WordPairViewModel.Factory wordPairFactory, VarietyPair varietyPair, bool areVarietiesInOrder)
            : base(varietyPair)
        {
            _segmentPool = segmentPool;
            _projectService = projectService;
            _varietyPair = varietyPair;
            _areVarietiesInOrder = areVarietiesInOrder;
            _wordPairsFactory = wordPairsFactory;
            _wordPairFactory = wordPairFactory;

            Messenger.Default.Register<ComparisonPerformedMessage>(this, HandleComparisonPerformed);

            UpdateVarietyPair();
        }
        public GlobalCorrespondencesViewModel(IProjectService projectService, IBusyService busyService, IDialogService dialogService, IImageExportService imageExportService, IGraphService graphService,
                                              WordPairsViewModel.Factory wordPairsFactory, WordPairViewModel.Factory wordPairFactory)
            : base("Global Correspondences")
        {
            _projectService     = projectService;
            _busyService        = busyService;
            _dialogService      = dialogService;
            _imageExportService = imageExportService;
            _graphService       = graphService;
            _wordPairFactory    = wordPairFactory;

            _selectedVarieties = new HashSet <Variety>();

            _projectService.ProjectOpened += _projectService_ProjectOpened;

            Messenger.Default.Register <ComparisonPerformedMessage>(this, msg => GenerateGraph());
            Messenger.Default.Register <DomainModelChangedMessage>(this, msg =>
            {
                if (msg.AffectsComparison)
                {
                    ClearGraph();
                }
            });
            Messenger.Default.Register <PerformingComparisonMessage>(this, msg => ClearGraph());

            _findCommand = new RelayCommand(Find);

            TaskAreas.Add(new TaskAreaCommandGroupViewModel("Syllable position",
                                                            new TaskAreaCommandViewModel("Onset", new RelayCommand(() => SyllablePosition   = SyllablePosition.Onset)),
                                                            new TaskAreaCommandViewModel("Nucleus", new RelayCommand(() => SyllablePosition = SyllablePosition.Nucleus)),
                                                            new TaskAreaCommandViewModel("Coda", new RelayCommand(() => SyllablePosition    = SyllablePosition.Coda))));
            _correspondenceFilter = new TaskAreaIntegerViewModel("Frequency threshold");
            _correspondenceFilter.PropertyChanging += _correspondenceFilter_PropertyChanging;
            _correspondenceFilter.PropertyChanged  += _correspondenceFilter_PropertyChanged;
            TaskAreas.Add(_correspondenceFilter);
            TaskAreas.Add(new TaskAreaItemsViewModel("Common tasks",
                                                     new TaskAreaCommandViewModel("Find words", _findCommand),
                                                     new TaskAreaItemsViewModel("Sort word pairs by", new TaskAreaCommandGroupViewModel(
                                                                                    new TaskAreaCommandViewModel("Gloss", new RelayCommand(() => _observedWordPairs.UpdateSort("Meaning.Gloss", ListSortDirection.Ascending))),
                                                                                    new TaskAreaCommandViewModel("Similarity", new RelayCommand(() => _observedWordPairs.UpdateSort("PhoneticSimilarityScore", ListSortDirection.Descending))))),
                                                     new TaskAreaCommandViewModel("Select varieties", new RelayCommand(SelectVarieties))
                                                     ));
            TaskAreas.Add(new TaskAreaItemsViewModel("Other tasks",
                                                     new TaskAreaCommandViewModel("Export chart", new RelayCommand(ExportChart, CanExportChart))));
            _observedWordPairs = wordPairsFactory();
            _observedWordPairs.IncludeVarietyNamesInSelectedText = true;
            _observedWordPairs.UpdateSort("Meaning.Gloss", ListSortDirection.Ascending);
        }
        public GlobalCorrespondencesViewModel(IProjectService projectService, IBusyService busyService, IDialogService dialogService, IImageExportService imageExportService, IGraphService graphService,
			WordPairsViewModel.Factory wordPairsFactory, WordPairViewModel.Factory wordPairFactory)
            : base("Global Correspondences")
        {
            _projectService = projectService;
            _busyService = busyService;
            _dialogService = dialogService;
            _imageExportService = imageExportService;
            _graphService = graphService;
            _wordPairFactory = wordPairFactory;

            _selectedVarieties = new HashSet<Variety>();

            _projectService.ProjectOpened += _projectService_ProjectOpened;

            Messenger.Default.Register<ComparisonPerformedMessage>(this, msg => GenerateGraph());
            Messenger.Default.Register<DomainModelChangedMessage>(this, msg =>
            {
                if (msg.AffectsComparison)
                    ClearGraph();
            });
            Messenger.Default.Register<PerformingComparisonMessage>(this, msg => ClearGraph());

            _findCommand = new RelayCommand(Find);

            TaskAreas.Add(new TaskAreaCommandGroupViewModel("Syllable position",
                new TaskAreaCommandViewModel("Onset", new RelayCommand(() => SyllablePosition = SyllablePosition.Onset)),
                new TaskAreaCommandViewModel("Nucleus", new RelayCommand(() => SyllablePosition = SyllablePosition.Nucleus)),
                new TaskAreaCommandViewModel("Coda", new RelayCommand(() => SyllablePosition = SyllablePosition.Coda))));
            _correspondenceFilter = new TaskAreaIntegerViewModel("Frequency threshold");
            _correspondenceFilter.PropertyChanging += _correspondenceFilter_PropertyChanging;
            _correspondenceFilter.PropertyChanged += _correspondenceFilter_PropertyChanged;
            TaskAreas.Add(_correspondenceFilter);
            TaskAreas.Add(new TaskAreaItemsViewModel("Common tasks",
                new TaskAreaCommandViewModel("Find words", _findCommand),
                new TaskAreaItemsViewModel("Sort word pairs by", new TaskAreaCommandGroupViewModel(
                    new TaskAreaCommandViewModel("Gloss", new RelayCommand(() => _observedWordPairs.UpdateSort("Meaning.Gloss", ListSortDirection.Ascending))),
                    new TaskAreaCommandViewModel("Similarity", new RelayCommand(() => _observedWordPairs.UpdateSort("PhoneticSimilarityScore", ListSortDirection.Descending))))),
                new TaskAreaCommandViewModel("Select varieties", new RelayCommand(SelectVarieties))
                ));
            TaskAreas.Add(new TaskAreaItemsViewModel("Other tasks",
                new TaskAreaCommandViewModel("Export chart", new RelayCommand(ExportChart, CanExportChart))));
            _observedWordPairs = wordPairsFactory();
            _observedWordPairs.IncludeVarietyNamesInSelectedText = true;
            _observedWordPairs.UpdateSort("Meaning.Gloss", ListSortDirection.Ascending);
        }
Exemplo n.º 6
0
        public VarietyPairViewModel(SegmentPool segmentPool, IProjectService projectService, WordPairsViewModel.Factory wordPairsFactory, VarietyPair varietyPair, bool areVarietiesInOrder)
        {
            _segmentPool = segmentPool;
            _projectService = projectService;
            _varietyPair = varietyPair;
            _areVarietiesInOrder = areVarietiesInOrder;

            IWordAligner aligner = projectService.Project.WordAligners[ComponentIdentifiers.PrimaryWordAligner];
            _cognates = wordPairsFactory();
            foreach (WordPair wp in _varietyPair.WordPairs.Where(wp => wp.AreCognatePredicted))
                _cognates.WordPairs.Add(new WordPairViewModel(aligner, wp, _areVarietiesInOrder));
            _noncognates = wordPairsFactory();
            foreach (WordPair wp in _varietyPair.WordPairs.Where(wp => !wp.AreCognatePredicted))
                _noncognates.WordPairs.Add(new WordPairViewModel(aligner, wp, _areVarietiesInOrder));

            _soundChanges = new ReadOnlyList<SoundChangeViewModel>(_varietyPair.SoundChangeProbabilityDistribution.Conditions.SelectMany(lhs => _varietyPair.SoundChangeProbabilityDistribution[lhs].Samples,
                (lhs, segment) => new SoundChangeViewModel(lhs, segment, _varietyPair.SoundChangeProbabilityDistribution[lhs][segment], _varietyPair.SoundChangeFrequencyDistribution[lhs][segment])).ToList());
        }
Exemplo n.º 7
0
        private void UpdateVarietyPair()
        {
            WordPairsViewModel cognates = _wordPairsFactory();

            foreach (WordPair wp in _varietyPair.WordPairs.Where(wp => wp.Cognacy))
            {
                cognates.WordPairs.Add(_wordPairFactory(wp, _areVarietiesInOrder));
            }
            Cognates = cognates;

            WordPairsViewModel noncognates = _wordPairsFactory();

            foreach (WordPair wp in _varietyPair.WordPairs.Where(wp => !wp.Cognacy))
            {
                noncognates.WordPairs.Add(_wordPairFactory(wp, _areVarietiesInOrder));
            }
            Noncognates = noncognates;

            SoundChanges = new ReadOnlyList <SoundChangeViewModel>(_varietyPair.CognateSoundCorrespondenceProbabilityDistribution.Conditions.SelectMany(lhs => _varietyPair.CognateSoundCorrespondenceProbabilityDistribution[lhs].Samples,
                                                                                                                                                        (lhs, segment) => new SoundChangeViewModel(lhs, segment, _varietyPair.CognateSoundCorrespondenceProbabilityDistribution[lhs][segment], _varietyPair.CognateSoundCorrespondenceFrequencyDistribution[lhs][segment])).ToList());
        }
Exemplo n.º 8
0
        public VarietyPairViewModel(SegmentPool segmentPool, IProjectService projectService, WordPairsViewModel.Factory wordPairsFactory, VarietyPair varietyPair, bool areVarietiesInOrder)
        {
            _segmentPool         = segmentPool;
            _projectService      = projectService;
            _varietyPair         = varietyPair;
            _areVarietiesInOrder = areVarietiesInOrder;

            IWordAligner aligner = projectService.Project.WordAligners[ComponentIdentifiers.PrimaryWordAligner];

            _cognates = wordPairsFactory();
            foreach (WordPair wp in _varietyPair.WordPairs.Where(wp => wp.AreCognatePredicted))
            {
                _cognates.WordPairs.Add(new WordPairViewModel(aligner, wp, _areVarietiesInOrder));
            }
            _noncognates = wordPairsFactory();
            foreach (WordPair wp in _varietyPair.WordPairs.Where(wp => !wp.AreCognatePredicted))
            {
                _noncognates.WordPairs.Add(new WordPairViewModel(aligner, wp, _areVarietiesInOrder));
            }

            _soundChanges = new ReadOnlyList <SoundChangeViewModel>(_varietyPair.SoundChangeProbabilityDistribution.Conditions.SelectMany(lhs => _varietyPair.SoundChangeProbabilityDistribution[lhs].Samples,
                                                                                                                                          (lhs, segment) => new SoundChangeViewModel(lhs, segment, _varietyPair.SoundChangeProbabilityDistribution[lhs][segment], _varietyPair.SoundChangeFrequencyDistribution[lhs][segment])).ToList());
        }
Exemplo n.º 9
0
        /// <summary>
        /// Finds the next.
        /// </summary>
        private void FindNext()
        {
            if (_selectedVarietyPair == null || (_selectedVarietyPair.Cognates.WordPairs.Count == 0 && _selectedVarietyPair.Noncognates.WordPairs.Count == 0))
            {
                SearchEnded();
                return;
            }

            WordPairsViewModel cognates    = _selectedVarietyPair.Cognates;
            WordPairsViewModel noncognates = _selectedVarietyPair.Noncognates;

            if (cognates.WordPairs.Count > 0 && cognates.SelectedWordPairs.Count == 0 && noncognates.SelectedWordPairs.Count == 0)
            {
                _startWordPairs = cognates;
            }
            else if (_startWordPairs == null)
            {
                _startWordPairs = cognates.SelectedWordPairs.Count > 0 ? cognates : noncognates;
            }

            WordPairsViewModel curWordPairs;

            if (cognates.SelectedWordPairs.Count > 0)
            {
                curWordPairs = cognates;
            }
            else if (noncognates.SelectedWordPairs.Count > 0)
            {
                curWordPairs = noncognates;
            }
            else
            {
                curWordPairs = _startWordPairs;
            }

            bool startAtBeginning = false;

            while (true)
            {
                using (_selectedWordPairsMonitor.Enter())
                {
                    if (curWordPairs.FindNext(_findViewModel.Field, _findViewModel.String, _searchWrapped, startAtBeginning))
                    {
                        WordPairsViewModel otherWordPairs = curWordPairs == cognates ? noncognates : cognates;
                        otherWordPairs.ClearPreviousSearchHit();
                        break;
                    }
                }

                if (curWordPairs == _startWordPairs)
                {
                    if (_startWordPairs.IsSearching)
                    {
                        curWordPairs = _startWordPairs == cognates ? noncognates : cognates;
                    }
                    else
                    {
                        SearchEnded();
                        break;
                    }
                }
                else if (_startWordPairs.IsSearching)
                {
                    curWordPairs     = _startWordPairs;
                    startAtBeginning = true;
                    _searchWrapped   = true;
                }
                else
                {
                    SearchEnded();
                    break;
                }
            }
        }
Exemplo n.º 10
0
        private void UpdateSelectedChangeWordPairs(WordPairsViewModel wordPairs)
        {
            IWordAligner aligner = _projectService.Project.WordAligners[ComponentIdentifiers.PrimaryWordAligner];
            wordPairs.SelectedCorrespondenceWordPairs.Clear();
            foreach (WordPairViewModel wordPair in wordPairs.WordPairs)
            {
                bool selected = false;
                foreach (AlignedNodeViewModel node in wordPair.AlignedNodes)
                {
                    if (_selectedSoundChange == null)
                    {
                        node.IsSelected = false;
                    }
                    else
                    {
                        SoundContext lhs = wordPair.DomainAlignment.ToSoundContext(_segmentPool, 0, node.Column, aligner.ContextualSoundClasses);
                        Ngram<Segment> corr = wordPair.DomainAlignment[1, node.Column].ToNgram(_segmentPool);
                        node.IsSelected = lhs.Equals(_selectedSoundChange.DomainSoundChangeLhs) && corr.Equals(_selectedSoundChange.DomainCorrespondence);
                        if (node.IsSelected)
                            selected = true;
                    }
                }

                if (selected)
                    wordPairs.SelectedCorrespondenceWordPairs.Add(wordPair);
            }
        }
Exemplo n.º 11
0
 private void ResetSearch()
 {
     _startWordPairs = null;
     if (_selectedVarietyPair != null)
     {
         _selectedVarietyPair.Cognates.ResetSearch();
         _selectedVarietyPair.Noncognates.ResetSearch();
     }
     _searchWrapped = false;
 }
Exemplo n.º 12
0
        /// <summary>
        /// Finds the next.
        /// </summary>
        private void FindNext()
        {
            if (_selectedVarietyPair == null || (_selectedVarietyPair.Cognates.WordPairs.Count == 0 && _selectedVarietyPair.Noncognates.WordPairs.Count == 0))
            {
                SearchEnded();
                return;
            }

            WordPairsViewModel cognates = _selectedVarietyPair.Cognates;
            WordPairsViewModel noncognates = _selectedVarietyPair.Noncognates;
            if (cognates.WordPairs.Count > 0 && cognates.SelectedWordPairs.Count == 0 && noncognates.SelectedWordPairs.Count == 0)
            {
                _startWordPairs = cognates;
            }
            else if (_startWordPairs == null)
            {
                _startWordPairs = cognates.SelectedWordPairs.Count > 0 ? cognates : noncognates;
            }

            WordPairsViewModel curWordPairs;
            if (cognates.SelectedWordPairs.Count > 0)
                curWordPairs = cognates;
            else if (noncognates.SelectedWordPairs.Count > 0)
                curWordPairs = noncognates;
            else
                curWordPairs = _startWordPairs;

            bool startAtBeginning = false;
            while (true)
            {
                using (_selectedWordPairsMonitor.Enter())
                {
                    if (curWordPairs.FindNext(_findViewModel.Field, _findViewModel.String, _searchWrapped, startAtBeginning))
                    {
                        WordPairsViewModel otherWordPairs = curWordPairs == cognates ? noncognates : cognates;
                        otherWordPairs.ClearPreviousSearchHit();
                        break;
                    }
                }

                if (curWordPairs == _startWordPairs)
                {
                    if (_startWordPairs.IsSearching)
                    {
                        curWordPairs = _startWordPairs == cognates ? noncognates : cognates;
                    }
                    else
                    {
                        SearchEnded();
                        break;
                    }
                }
                else if (_startWordPairs.IsSearching)
                {
                    curWordPairs = _startWordPairs;
                    startAtBeginning = true;
                    _searchWrapped = true;
                }
                else
                {
                    SearchEnded();
                    break;
                }
            }
        }