大致的需求如下:
1.有一段英文文章,需要删除掉 a, the, have 这些不需要参与统计的单词
2.统计文章中剩余的所有单词的出现频率,显示出20个出现频率最高的单词,及其出现的次数。
3.如果两个或多个单词出现的频率相同,按字母顺序显示。
4.可以用c#或java script来实现,输出的结果要显示到网页中。输出的结果举例如下:public 10
air 7
method 7
root 7
meeting 6
tea 6
blue 5
sky 2
.....我没有想到很好的办法来完成,请各位帮助看看,是否有简单快捷的统计方法?多谢!
1.有一段英文文章,需要删除掉 a, the, have 这些不需要参与统计的单词
2.统计文章中剩余的所有单词的出现频率,显示出20个出现频率最高的单词,及其出现的次数。
3.如果两个或多个单词出现的频率相同,按字母顺序显示。
4.可以用c#或java script来实现,输出的结果要显示到网页中。输出的结果举例如下:public 10
air 7
method 7
root 7
meeting 6
tea 6
blue 5
sky 2
.....我没有想到很好的办法来完成,请各位帮助看看,是否有简单快捷的统计方法?多谢!
//参考
private void button1_Click(object sender, EventArgs e)
{
List <KeyValuePair <string, int> > L = cutWord(this.richTextBox1.Text);
this.richTextBox2.Text = " ";
int count = 0;
for (int i = L.Count-1; i > 0; i--)
{
if (count > 15)
{
break;
}
count++;
this.richTextBox2.Text += L[i].Key + "[ " + L[i].Value + "]\n ";
}
} private List <KeyValuePair <string, int> > cutWord(string article)
{
Dictionary <string, int> D = new Dictionary <string, int> ();
//if len(escape(x)) /len(x)=6 then isGB=true else isGB=false
//HttpUtility..:: System.Text.RegularExpressions.Regex Re = new System.Text.RegularExpressions.Regex(@"[^\u4e00-\u9fa5]+ ");
for (int l = 2; l <= 4; l++)
{
for (int i = 0; i < article.Length-l; i++)
{
string theWord = article.Substring(i, l);
if (Re.Replace(theWord, " ") == theWord)
{
if (D.ContainsKey(theWord))
{
D[theWord]++;
}
else
{
D.Add(theWord,1);
}
}
}
}
List <KeyValuePair <string, int> > L = new List <KeyValuePair <string, int> > ();
foreach (KeyValuePair <string, int> K in D)
{
if (K.Value > 1)
{
L.Add(K);
}
} L.Sort(delegate(KeyValuePair <String, int> a, KeyValuePair <String, int> b)
{
if (a.Value == b.Value)
{
if (a.Key.Length == b.Key.Length)
{
return 0;
}
else
{
if (a.Key.Length > b.Key.Length)
{
return 1;
}
else
{
return -1;
}
}
}
if (a.Value > b.Value)
{
return 1;
}
else
{
return -1;
}
} );
return (L);
}
string[] a=content.Split(new char[]{'\n',' ',',',';','.'});
foreach (string tmpStr in a)
{
//记数操作
}
http://topic.csdn.net/u/20090502/10/CB0481B2-BD60-43DC-A544-844D690585EC.html
获取单词,根据空格或所有用到的字符来分隔取得所有的单词,创建字典
Dictionary<string,int> list = new Dictionary<string,int>();
和两个数组
string[] words=null;
int[] count=null;
循环所有单词,以单词作为list的Key,出现次数作为value,循环所有单词
if (list.ContainsKey(word))
{
list[word]++;
}
else
{
list[word] = 1;
}words = new string[list.Count];
count = new int[list.Count];
list.Keys.CopyTo(words);
list.Values.CopyTo(count);
Array.Sort(count, words);
SortWords();这样就可以初步得到按出现频率单词的排序,但这里出现相同次数的单词按字符排要写多一个递归函数去调整private void SortWords()
{
int n1 = 0;
int n2 = 0;
string temp = "";
for (int i = 1; i < list.Count; i++)
{
n1 = count[i - 1];
n2 = count[i];
if (n1 == n2) //词频出现相同
{
if (String.Compare(words[i - 1], words[i]) > 0) //比较单词大小
{
temp = words[i - 1];
words[i - 1] = words[i];
words[i] = temp; //把两个单词反转,因为出现次数是相同的,所以count数组是不用反转的
SortWords(); //递归调用,直到单词不再需要反转的时候
break; //因为已用递归不需重复执行,跳出循环
}
}
}
}这样最后,words和count就是按顺序排序的单词和出现次数了
将文件内容拷贝到一个新建的文件中,假设内容如下。
Faster payments and more options increases your cash flow
Certification by RegNow ensures you receive proper credit for driving a sale
EPC product rankings show which products convert and pay
Robust reporting gives you every bit of data possible
Product Data Feed feature lets you house and display content from our catalog
NEW - RegNow Affiliate Site Builder Tool helps you quickly
build an affiliate site or landing page! Learn More, watch the demo video Demo Video
Click here for more info… 2.用PilotEdit把所有的空格换成回车换行符可以得到类似下面的文件(新文件内容没有全部列出来)
Faster
payments
and
more
options
increases
your
cash
flow
......
Click
here
for
more
info…
3. 点排序按钮,点按钮“查找重复的行”,可以得到下面的结果:
文件6[10]:
文件6[23]:
文件6[33]:
文件6[43]:
文件6[57]:
文件6[68]:
文件6[84]:
文件6[90]:
- - - - - - - - - - 文件6: 找到8次“”。 - - - - - - - - - -
文件6[13]: RegNow
文件6[60]: RegNow
- - - - - - - - - - 文件6: 找到2次“RegNow”。 - - - - - - - - - -
文件6[3]: and
文件6[31]: and
文件6[51]: and
- - - - - - - - - - 文件6: 找到3次“and”。 - - - - - - - - - -
文件6[19]: for
文件6[87]: for
- - - - - - - - - - 文件6: 找到2次“for”。 - - - - - - - - - -
文件6[4]: more
文件6[88]: more
- - - - - - - - - - 文件6: 找到2次“more”。 - - - - - - - - - -
文件6[15]: you
文件6[37]: you
文件6[49]: you
文件6[66]: you
- - - - - - - - - - 文件6: 找到4次“you”。 - - - - - - - - - -
4. 下面对步骤三所得的结果进行操作。
点排序按钮,选择“比较由正则表达式定义的字符串”,输入下面的正则表达式和目标字符串:
正则表达式:- - - - - - - - - - * 找到*次
目标字符串:%04
点按钮“按照降序排列”,可以得到下面的结果:
- - - - - - - - - - 文件6: 找到8次“”。 - - - - - - - - - -
- - - - - - - - - - 文件6: 找到4次“you”。 - - - - - - - - - -
- - - - - - - - - - 文件6: 找到3次“and”。 - - - - - - - - - -
- - - - - - - - - - 文件6: 找到2次“RegNow”。 - - - - - - - - - -
- - - - - - - - - - 文件6: 找到2次“for”。 - - - - - - - - - -
- - - - - - - - - - 文件6: 找到2次“more”。 - - - - - - - - - -
文件6[10]:
文件6[23]:
文件6[33]:
文件6[43]:
文件6[57]:
文件6[68]:
文件6[84]:
文件6[90]:
文件6[13]: RegNow
文件6[60]: RegNow
文件6[3]: and
文件6[31]: and
文件6[51]: and
文件6[19]: for
文件6[87]: for
文件6[4]: more
文件6[88]: more
文件6[15]: you
文件6[37]: you
文件6[49]: you
文件6[66]: you