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); } } }
private void ResetSearch() { _startWordPairs = null; if (_selectedVarietyPair != null) { _selectedVarietyPair.Cognates.ResetSearch(); _selectedVarietyPair.Noncognates.ResetSearch(); } _searchWrapped = false; }
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); }
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()); }
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()); }
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()); }
/// <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; } } }
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); } }
private void ResetSearch() { _startWordPairs = null; if (_selectedVarietyPair != null) { _selectedVarietyPair.Cognates.ResetSearch(); _selectedVarietyPair.Noncognates.ResetSearch(); } _searchWrapped = false; }
/// <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; } } }