-5

我有一个名为帖子摘要的页面。在此页面下,我想统计总字数和唯一字数。我成功地计算了帖子中的总字数。但是,我不知道如何计算唯一单词。

例如:“我今天非常喜欢上学。”

预期输出:

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();
        }
    }
}
4

3 回答 3

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(); // ...

此外,大小写会修改结果,因此如果需要,您可以不区分大小写进行比较。

于 2013-07-22T08:42:41.077 回答
1

可以使用这样的东西:

"I enjoyed school school today very much.".Split(' ').Distinct()

这一个返回6,即使有“学校”字样出现2次数。

编辑

如果您需要一些自定义比较逻辑(例如不区分大小写),您可以使用Distinct 重载,您可以在其中指定自定义相等比较器。

于 2013-07-22T08:42:38.407 回答
0

第一个要点是:

public int GetUniqueWordsCount(string input)
{
    return input.Split(' ').GroupBy(s => s).Count();
}

如果您想要一个不区分大小写的解决方案,您可以添加.ToLower().ToUpper()转换到您的组键选择器。IEqualityComparer如果您想要一些自定义比较逻辑,您也可以实现自己的。

于 2013-07-22T08:43:09.657 回答