private void SetMetaData(TmMatch match, TranslationUnit unit, SearchSettings settings) { // Only concordance search method returns segments with attributes. // That's why concordance search for already found segment is used here. TmMatch matchToCopyFrom = settings.Mode == SearchMode.ConcordanceSearch ? match : RetrieveSimilarMatchWithConcordanceSearch(match, settings); foreach (TuAttributeField attr in matchToCopyFrom.TranslationUnitFields.Attributes) { if (attr.Values.Count == 0) { continue; } FieldValue field; if (attr.Values.Count == 1) { field = new SingleStringFieldValue(attr.Name, attr.Values[1]); } else { field = new MultipleStringFieldValue(attr.Name, TuAttributeValuesToList(attr.Values)); } unit.FieldValues.Add(field); } SetSystemFieldsValues(matchToCopyFrom, unit); }
private TmMatch RetrieveSimilarMatchWithConcordanceSearch(TmMatch match, SearchSettings settings) { var segmentText = match.GetSource(settings.IsConcordanceSearch); // concordance search don't return any results with too little value of MaxResults // That's why it isn't set up to use it's default value 20. Trados.Interop.TMAccess.SearchResult tradosSegments = this.TranslationProvider.TradosProvider.ConcordanceSearch( segmentText, settings.MinScore); return(tradosSegments.TmMatches.Count > 0 ? tradosSegments.TmMatches[1] : match); }
public static string GetSource(this TmMatch tm, bool isConcordance) { return(!isConcordance ? tm.GetSource() : tm.TtxTranslationUnit.Children[0].Children[1].Children[0].Children[0].Children[0].Text); }