计算字符串中的唯一单词

时间:2013-07-22 08:37:26

标签: c#

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

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

预期产出:

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

3 个答案:

答案 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