我有一个名为帖子摘要的页面。 在此页面下,我想计算单词总数和唯一单词总数。 我成功地计算了帖子中的单词总数。 但是,我不知道如何计算这些独特的词语。
例如:“我今天非常喜欢上学。”
预期产出:
Total word count: 6
Unique word count: 5
这是我目前的代码:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
namespace empTRUST
{
public partial class PostSummary : Form
{
string target_fbid;
string fbStatus;
public PostSummary(string target_fbid, string fbStatus)
{
InitializeComponent();
this.target_fbid = target_fbid;
this.fbStatus = fbStatus;
}
private void PostSummary_Load(object sender, EventArgs e)
{
label_totalwordcount.Text = fbStatus.Split(new char[] {' '}, StringSplitOptions.RemoveEmptyEntries).Length.ToString();
}
}
}
答案 0 :(得分:3)
我不明白你的例子,因为"I enjoyed school today very much"
中没有重复的单词。但是,这是一种可能适合您的天真方法:
var allWords = text.Split();
int count = allWords.Length; // 6
int unqiueCount = allWords.Distinct().Count(); // 6
这是天真的,因为标点符号会修改结果。所以你可能想在第一步中替换它们:
var allWords = text.ToUpperInvariant().Replace(".", "").Replace(",","").Split(); // ...
此外,该案例会修改结果,因此如果需要,您可以比较不区分大小写。
答案 1 :(得分:1)
可以使用这样的东西:
"I enjoyed school school today very much.".Split(' ').Distinct()
即使有6
次出现“学校”字样,这个也会返回2
。
编辑
如果您需要一些自定义比较逻辑(例如不区分大小写),您可以使用Distinct overload指定自定义相等比较器。
答案 2 :(得分:0)
第一次尝试是:
public int GetUniqueWordsCount(string input)
{
return input.Split(' ').GroupBy(s => s).Count();
}
如果您想要不区分大小写的解决方案,可以将.ToLower()
或.ToUpper()
转换添加到您的组密钥选择器。如果你想要一些自定义比较逻辑,你也可以实现自己的IEqualityComparer
。