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()));
        }
 private void RefreshThreads()
 {
     if (SelectedBoard == null)
     {
         return;
     }
     Nichan.Board board = Nichan.BoardParser.ParseFromUri(SelectedBoard.Uri.ToString());
     Threads = board.Threads;
 }
Ejemplo n.º 3
0
        public IEnumerable <string> Get(ChannelInfo channel, DateTime time)
        {
            MatchingThread matchingThread = threadResolver.Resolve(channel);

            if (matchingThread == null)
            {
                return(new string[0]);
            }

            IEnumerable <string> keywords = matchingThread.ThreadTitleKeywords.Select(x => x.ToLower().Normalize(NormalizationForm.FormKD));

            Nichan.Board board = Nichan.BoardParser.ParseFromUri(matchingThread.BoardUri.ToString());

            return(board.Threads.Select(x => { x.Title = x.Title.ToLower().Normalize(NormalizationForm.FormKD); return x; })
                   .Where(x => x.ResCount <= 1000 && keywords.All(keyword => x.Title.Contains(keyword))).OrderByDescending(x => x.ResCount).Take(3).Select(x => x.Uri.ToString()));
        }
Ejemplo n.º 4
0
        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()));
        }