/// <summary>Evaluates substrings that are common to all (!) of the <see cref="_listOfSelectedTableNames"/> and updates the <see cref="_commonSubstringsList">list of common substrings</see> with the result.</summary> private void UpdateListOfCommonSubstringsCharacterWise() { var gsa = Altaxo.Collections.Text.GeneralizedSuffixArray.FromSeparateWords(_listOfSelectedTableNames, true); var lcs = new Altaxo.Collections.Text.LongestCommonSubstringA(gsa) { StoreVerboseResults = true }; lcs.Evaluate(); if (lcs.MaximumNumberOfWordsWithCommonSubstring == _listOfSelectedTableNames.Count) { _commonSubstringsList = new SelectableListNodeList(); foreach (var pos in lcs.GetSubstringPositionsCommonToTheNumberOfWords(_listOfSelectedTableNames.Count)) { var first = pos.FirstPosition; var commonString = _listOfSelectedTableNames[first.WordIndex].Substring(first.Start, first.Count); _commonSubstringsList.Add(new SelectableListNode(commonString, pos, false)); } _commonSubstringsList[0].IsSelected = true; } }
/// <summary>Searches for common substrings in the selected table names. The character entity here is not a character from a string, but a name part, as created by <see cref="SplitNameIntoParts"/>.</summary> private void UpdateListOfCommonSubstringsSubfolderWise() { var words = new List <string[]>(); foreach (var tableName in _listOfSelectedTableNames) { var parts = SplitNameIntoParts(tableName); words.Add(parts); } var gsa = Altaxo.Collections.Text.GeneralizedSuffixArray.FromSeparateWords(words, true); var lcs = new Altaxo.Collections.Text.LongestCommonSubstringA(gsa) { StoreVerboseResults = true }; lcs.Evaluate(); if (lcs.MaximumNumberOfWordsWithCommonSubstring == _listOfSelectedTableNames.Count) { _commonSubstringsList = new SelectableListNodeList(); foreach (var pos in lcs.GetSubstringPositionsCommonToTheNumberOfWords(_listOfSelectedTableNames.Count)) { var first = pos.FirstPosition; var commonString = JoinPartsToName(words[first.WordIndex], first.Start, first.Count); var poss = new List <Altaxo.Collections.Text.SubstringPosition>(); foreach (var entry in pos) // we have to convert our positions which ar subfolderWise into character-wise positions { var word = words[entry.WordIndex]; var toStart = JoinPartsToName(word, 0, entry.Start); poss.Add(new Collections.Text.SubstringPosition(entry.WordIndex, toStart.Length, commonString.Length)); } _commonSubstringsList.Add(new SelectableListNode(commonString, poss, false)); } _commonSubstringsList[0].IsSelected = true; } }
/// <summary>Searches for common substrings in the selected table names. The character entity here is not a character from a string, but a name part, as created by <see cref="SplitNameIntoParts"/>.</summary> private void UpdateListOfCommonSubstringsSubfolderWise() { List<string[]> words = new List<string[]>(); foreach (var tableName in _listOfSelectedTableNames) { var parts = SplitNameIntoParts(tableName); words.Add(parts); } var gsa = Altaxo.Collections.Text.GeneralizedSuffixArray.FromSeparateWords(words, true); var lcs = new Altaxo.Collections.Text.LongestCommonSubstringA(gsa) { StoreVerboseResults = true }; lcs.Evaluate(); if (lcs.MaximumNumberOfWordsWithCommonSubstring == _listOfSelectedTableNames.Count) { _commonSubstringsList = new SelectableListNodeList(); foreach (var pos in lcs.GetSubstringPositionsCommonToTheNumberOfWords(_listOfSelectedTableNames.Count)) { var first = pos.FirstPosition; var commonString = JoinPartsToName(words[first.WordIndex], first.Start, first.Count); var poss = new List<Altaxo.Collections.Text.SubstringPosition>(); foreach (var entry in pos) // we have to convert our positions which ar subfolderWise into character-wise positions { var word = words[entry.WordIndex]; var toStart = JoinPartsToName(word, 0, entry.Start); poss.Add(new Collections.Text.SubstringPosition(entry.WordIndex, toStart.Length, commonString.Length)); } _commonSubstringsList.Add(new SelectableListNode(commonString, poss, false)); } _commonSubstringsList[0].IsSelected = true; } }