統計英文文檔里每個單詞出現的次數


最近想實現一個統計英文檔單詞出現次數的功能。

查找規則是將文檔里連續出現的<字母>判斷為一個單詞,如:“D) Let's go to d”,會將其判斷為D、Let、s、go、to五個單詞並統計出現的次數並不區分大小;

//這個類用來存放出現的單詞和其出現的次數
public class WordNode
{
  public string word;
  public int count;
}

/// <summary>
/// 傳入要統計的文本字符串,函數會返回WordNode列表,里面有文本字符串中出現的單詞和單詞出現的次數
/// </summary>
/// <param name="theSource"></param>
/// <returns></returns>
public List<WordNode> GetAllWord(string theSource)
{
//為了可以檢索到最后一個單詞,需在被檢索字符串的末尾加一個非字母字符
string source = theSource + "*";

//取出字母的ascii碼
int aInt = 'a';
int zInt = 'z';
int AInt = 'A';
int ZInt = 'Z';

string getWord = string.Empty;
WordNode wordNode;
WordNode foundWordNode;
List<WordNode> result = new List<WordNode>();
int sourceLength = source.Length;
int charCount = 0;
for (int i = 0; i < sourceLength; i++)
{
if ((source[i] >= aInt && source[i] <= zInt) || (source[i] >= AInt && source[i] <= ZInt))//判斷是不是字母
{
charCount++;//如果字符是字母則charCount加1
}
else
{
if (charCount > 0)
{
getWord = source.Substring(i - charCount, charCount);
wordNode = new WordNode { word = getWord };

//判斷列表里有沒有對應的詞
if (!result.Exists(x => x.word.Equals(wordNode.word, StringComparison.CurrentCultureIgnoreCase)))//不存在就把wordNode加進去
{
wordNode.count++;
result.Add(wordNode);
}
else//存在就把對應的wordNode取出來,並把count加1;
{
foundWordNode = result.Find(x => x.word.Equals(wordNode.word, StringComparison.CurrentCultureIgnoreCase));
foundWordNode.count++;
}
charCount = 0;
}
}
}
InsertSort(result, result.Count);
return result;
}

/// <summary>
/// 將統計過並返回的List<WordNode>按WordNode.count進行降序排序
/// </summary>
/// <param name="wordNodes"></param>
/// <param name="count">值是wordNodes.count</param>
public void InsertSort(List<WordNode> wordNodes, int count)
{
for (int i = 1; i < count; i++)
{
if (wordNodes[i].count > wordNodes[i - 1].count)
{ //若第i個元素大於i-1元素,直接插入。小於的話,移動有序表后插入 
int j = i - 1;
var x = wordNodes[i]; //復制為哨兵,即存儲待排序元素 
wordNodes[i] = wordNodes[i - 1]; //先后移一個元素 
while ( j >= 0 && x .count > wordNodes[j].count)
{ //查找在有序表的插入位置 
wordNodes[j + 1] = wordNodes[j];
j--; //元素后移 
}
wordNodes[j + 1] = x; //插入到正確位置 
}
}
}

最后將將序排序過的統計結果wordNodes輸出:

下面截圖是“D) Let's go to d”的統計結果

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM