public IEnumerable <string> Get(ChannelInfo channel, DateTime time) { Nichan.Board board = Nichan.BoardParser.ParseFromUri(BoardUri.ToString()); return(board.Threads.Select(x => { x.Title = x.Title.ToLower().Normalize(NormalizationForm.FormKD); return x; }) .Where(x => Keywords.All(keyword => x.Title.Contains(keyword))).Select(x => x.Uri.ToString())); }
public IEnumerable <string> Get(ChannelInfo channel, DateTime time) { Nichan.Board board = Nichan.BoardParser.ParseFromUri(BoardUri.ToString()); var threads = board.Threads.Where(x => x.ResCount <= 1000). Select(x => new { Thread = x, EditDistance = getLevenshteinDistance(normalizeThreadTitle(x.Title), ThreadTitleExample) }). OrderBy(x => x.EditDistance); if (threads.FirstOrDefault() == null) { return(new string[0]); } //レーベンシュタイン距離の最小値から距離10以内のものを選択 return(threads.TakeWhile(x => x.EditDistance <= threads.First().EditDistance + 10).Take(3).Select(x => x.Thread.Uri.ToString())); }