2016-08-06 15 views
-1

私は文字列のリストを持っています。私はリストの中で最も反復された言葉を抽出したい。例えばどのように文字列のリストで最も繰り返される単語を取得するには?

List<string> mylist=new List<string>(); 
mylist.Add("book is good "); 
mylist.Add("i like flowers "); 
mylist.Add("i reading book"); 

私はないを抽出します。 user3185569 @

はレスポンスに次のコード

List<string> mylist = new List<string>(); 
mylist.Add("book is good "); 
mylist.Add("i like flowers "); 
mylist.Add("i reading book"); 

var mostRepeatedWord = mylist.SelectMany(x => x.Split(new [] { " " }, 
             StringSplitOptions.RemoveEmptyEntries)) 
         .GroupBy(x => x).OrderByDescending(x => x.Count()) 
         .Select(x => x.Key).FirstOrDefault(); 

を言った。しかし、このコードは、

にし、など私は私のリストから5つの意味のある単語を抽出したいような言葉が含まれている一つの単語を抽出しました。私は、最初に

static List<string> notWord = new List<string>(); 
    public static void fillList() 
    { 
     XmlDocument doc = new XmlDocument(); 
     doc.Load(@"XMLDic.xml"); 
     foreach (XmlNode node in doc.DocumentElement.ChildNodes) 
     { 
      notWord.Add(node.InnerText); //or loop through its children as well 
     } 

    } 

:私はそれを修正しようとしたので、私はにのような言葉が含まれている私のプロジェクト、にXML辞書を追加し、など をし、このように、この辞書のリストを埋めますリストからこれらの単語を削除した後、5段階のループでmostRepeatedWordを抽出し、新しいリストに保存します。私はリストからmostRepeatedWordを取り除き、このプロセスを5回以上繰り返します。

public static List<string> finde(List<string> list) 
    { 
     List<string> newlist = new List<string>(); 

     fillList(); 
     delStr(list, "", true); 
     for (int i = 0; i < 6; i++) 
     { 
      var mostRepeatedWord = list.SelectMany(x => x.Split(new[] { " " }, 
             StringSplitOptions.RemoveEmptyEntries)) 
         .GroupBy(x => x).OrderByDescending(x => x.Count()) 
         .Select(x => x.Key).FirstOrDefault(); 

      if (mostRepeatedWord!="") 
       newlist.Add(mostRepeatedWord); 
      delStr(list, mostRepeatedWord, false); 
     } 
     return newlist; 
    } 

listメソッドの削除の言葉を次のとおりです。私が知りたい

public static List<string> delStr(List<string> list, string str, bool t) 
    { 
     if (t) 
     { 
      string s; 
      for (int i = 0; i < list.Count; i++) 
      { 
       s = list[i]; 
       foreach (var i1 in notWord) 
       { 
        s = s.Replace(i1, ""); 
       } 

       list[i] = s; 
      } 
     } 
     else 
     { 
      string s; 
      for (int i = 0; i < list.Count; i++) 
      { 
       s = list[i]; 

       s = s.Replace(str, ""); 


       list[i] = s; 
      } 
     } 
     return list; 

    } 

それが正しいか、それを行うには良い方法はありますか?

+1

コードを投稿する必要があります。 – Kosch

+0

何を試しましたか?あなたの問題を解決する努力をしていない場合、あなたの質問はちょうど_gimme私teh codez_そしてこれはSOユーザーが何をすべきかではありません – Steve

答えて

3

のLINQを使用して:

スペースで割れ目
List<string> mylist = new List<string>(); 
mylist.Add("book is good "); 
mylist.Add("i like flowers "); 
mylist.Add("i reading book"); 

var mostRepeatedWord = mylist.SelectMany(x => x.Split(new [] { " " }, 
              StringSplitOptions.RemoveEmptyEntries)) 
          .GroupBy(x => x).OrderByDescending(x => x.Count()) 
          .Select(x => x.Key).FirstOrDefault(); 
  • String.Splitを使用します。

  • 単語を1つのリストにまとめる:SelectManyを使用します。

  • 各単語でグループ化:GroupByを使用します。
  • 出現順:OrderByDescendingおよびCountを使用します。
  • 最初の要素を取得:FirstOrDefaultを使用します。
+1

このコードは何も返しません:( –

+0

@zeynabfarzanehあなたは 'リスト 'または何 – user3185569

+1

リストマイリスト;? –

関連する問題