public virtual Distribute <char> GetDistribute(Condition condition) { var dtb = GetDistribute(condition.Chars); if (condition.Pinyin != null) { dtb = dtb.Where(c => PinyinDict.GetPinyins(c).Contains(condition.Pinyin)); } return(dtb); }
public void TestData(TextReader reader, TextWriter resultWriter = null, string format = "chinese_only") { resultWriter?.WriteLine("----- Inputer Test Report -----"); for (int i = 0; i < Inputers.Length; ++i) { resultWriter?.WriteLine($"No.{i}: {Inputers[i].Name}"); } resultWriter?.WriteLine("-------------------------------"); string chinese; IEnumerable <string> pinyins; for (int i = 0; reader.Peek() != -1; ++i) { if (format == "pinyin_chinese") { pinyins = reader.ReadLine().Trim().ToLower().Split(' '); chinese = reader.ReadLine().Trim(); } else if (format == "chinese_only") { chinese = reader.ReadLine().Trim(); if (chinese == "") { continue; } pinyins = chinese.Select(c => PinyinDict.GetPinyins(c).FirstOrDefault()) .Where(s => s != null); } else { throw new ArgumentException(nameof(format)); } var cmps = new SentenseCompareMultiple(chinese); foreach (var inputer in Inputers) { var compare = TestSentense(inputer, chinese, pinyins); Results[inputer].Count(compare); cmps.Add(inputer, compare); } resultWriter?.WriteLine(cmps); if (PrintToConsoleAfter != 0 && i % PrintToConsoleAfter == 0) { Console.WriteLine($"Test Count = {i}"); } } resultWriter?.WriteLine("Results:"); for (int i = 0; i < Inputers.Length; ++i) { resultWriter?.WriteLine($"{i}: {Results[Inputers[i]]}"); } }
public override Distribute <char> GetDistribute(Condition condition) { var list = new List <Distribute <char> >(); for (int n = 0; n < 6; ++n) { var dtb = dict.GetOrDefault(condition.Chars.LastSubString(n, ' ')); if (condition.Pinyin != null) { dtb = dtb.Where(c => PinyinDict.GetPinyins(c).Contains(condition.Pinyin)); } // if (dtb.IsEmpty) // break; list.Add(dtb); } //Console.WriteLine($"{condition} {list.Count-1}"); return(MixDistributeStrategy(list)); }