2017-01-09 50 views
0

我沒有使用正則表達式這樣一個詞版本:如何計算C#中字符串之後的兩個單詞的出現次數?

public Dictionary<string, int> MakeOneWordDictionary(string content) 
{ 
    Dictionary<string, int> words = new Dictionary<string, int>(); 
    // Regex checking word match 
    var wordPattern = new Regex(@"\w+"); 
    // Refactor text and clear it from punctuation marks 
    content = RemoveSigns(content); 
    foreach (Match match in wordPattern.Matches(content)) 
    { 
     int currentCount = 0; 
     words.TryGetValue(match.Value, out currentCount); 
     currentCount++; 
     words[match.Value] = currentCount; 
    } 
    return words; 
} 

And it gives an output like this

這段代碼返回字和它們的頻率在字典中。現在我需要兩個字的版本。這將計算一個字符串中出現的兩個單詞之間的相互關係。

我應該修改正則表達式嗎?如果是,我應該如何修改它?

+0

您是否在嘗試在此處輸入單詞之前詢問過?如果是這樣,結果如何?有沒有發生你沒有想到的事情? –

+1

如果字符串爲「abcd」,則結果爲[a,b],[c,d]或所有可能元組的組合[a,b],[b,c],[c,d ]'? – fubo

+0

我當然試過了。那給了我單個單詞的頻率。 –

回答

3

我認爲這可以用沒有RegExp的更自我解釋的方式編寫。

string input = "a a b test a a"; 
string[] words = input.Split(' '); 

var combinations = from index in Enumerable.Range(0, words.Length-1) 
        select new Tuple<string,string>(words[index], words[index+1]); 

var groupedTuples = combinations.GroupBy(t => t); 
var countedCombinations = groupedTuples.Select(g => new { Value = g.First(), Count = g.Count()}); 

前兩行定義了輸入並將其用空格拆分,即將其分隔爲單個單詞。第三行從第一個單詞到(N-1)th元素(其中N是單詞的數量),並構建n-th(n+1)-th元素的元組。 在第四行中,這些元組被自己分組(兩個元素相同的元素被認爲是相等的)。在最後一步/行中,計算每個組的元素,並將計數與其各自的值一起存儲在匿名類型變量中。

此邏輯也可以應用到您的RegExp版本。

編輯: 爲了得到一本字典,就像在你的榜樣,您可以使用ToDictionary擴展方法

var countedCombinations = groupedTuples.ToDictionary(g => g.First(), g => g.Count()); 

第一個參數是該鍵的選擇方法,第二個爲值。

+0

我會嘗試這個並給你一個反饋。 –

+0

對不起,我的無知,但我可以返回一個字典從這個代碼就像我在我的功能?我現在有點困惑。 –

+0

請參閱我的詞典編輯 –

相關問題