public static void SetSegment(UIElement target, SegmentOption value) => target.SetValue(SegmentProperty, value);
public List <KeyWord> Segment(string sentence, SegmentOption option) { var dict = SingletonDict.Instance; sentence = sentence.ToLower(); if (dict.NeedInitDict) { dict.TransDict = _sqlProvider.GetTransDict(); dict.AliasDict = _sqlProvider.GetAliasDict(); dict.AliasDict.AddRange(GetBoAlias()); dict.NeedInitDict = false; } List <WordInfo> words; MatchOptions matchOptions = new MatchOptions(); matchOptions.IgnoreCapital = true; if (option.MatchRule == "MinWords") { var parameter = new MatchParameter { Redundancy = 2 }; words = _panGuSegmantService.DoSegment(sentence, matchOptions, parameter); } else { words = _panGuSegmantService.DoSegment(sentence, matchOptions); } words = words.Distinct(new WordAttributeComparer()).ToList(); var keywords = new List <KeyWord>(); if (option.Cc?.Count > 0) { keywords.AddRange(from item in words let cc = item.Pos.ToString().Split(new[] { ", " }, StringSplitOptions.None).ToList() where option.Cc.Intersect(cc).Any() select new KeyWord { Term = item.Word, Cc = option.Cc.Intersect(cc).ToList() }); } else { keywords.AddRange(words.Select(item => new KeyWord { Term = item.Word, Cc = item.Pos.ToString().Split('|').ToList() })); } foreach (var keyword in keywords) { //包含同义词 if (option.IncludeAlias) { foreach (var key in dict.AliasDict.Keys) { if (key.Equals(keyword.Term, StringComparison.OrdinalIgnoreCase)) { keyword.Aliases.AddRange(dict.AliasDict[key]); } } keyword.Aliases = keyword.Aliases.Distinct().ToList(); } //包含翻译词 if (option.IncludeTrans) { foreach (var key in dict.TransDict.Keys) { if (key.Equals(keyword.Term, StringComparison.OrdinalIgnoreCase)) { keyword.Translates.AddRange(dict.TransDict[key]); } } keyword.Translates = keyword.Translates.Distinct().ToList(); } } return(keywords); }