2013-07-22 2 views
-4

У меня есть страница, которая называется пост-резюме. Под этой страницей хочу рассчитать общее количество слов и общее количество уникальных слов. Мне удалось посчитать общее количество слов в сообщении успешно. Однако я не знаю, как я могу считать уникальные слова.Вычисление уникальных слов в строке

Например: «Сегодня мне очень понравилась школа».

Ожидаемый результат:

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

Как вы получаете уникальное количество слов из 5 из «Я очень сегодня наслаждался школой»? –

+0

Я думаю, что он имел в виду уникальные буквы – Zaki

+0

@Sam Если он имел в виду буквы, это было бы более 5 –

ответ

1

Можно использовать что-то вроде этого:

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

Это один возвращает 6, даже если есть " школа ", которое появляется 2 раз.

EDIT

если вам нужны пользовательские сравнения логики (скажем, чувствительны к регистру), вы можете использовать Distinct overload, где вы можете задать собственный компаратор равенство.

+0

'Но. Но, но вернул бы 3, нет? –

+0

@ ta.speot.is: Я отредактировал свой ответ. – Tigran

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

Кроме того, в случае изменяет результат, так что вы могли бы сравнить регистронезависимо, если это желательно.

+0

Я думаю, что есть функции 'Char.IsLetter' и' Char.IsWhitespace', которые можно использовать здесь. –

+0

@ ta.speot.is: дело в том, что мы не знаем, что такое формат строки. – Tigran

0

Первый является учил:

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

Если вы хотели бы нечувствительным решение случай можно добавить .ToLower() или .ToUpper() преобразование к вашему селектору ключа группы. Кроме того, вы можете реализовать свой собственный IEqualityComparer, если вам нужна специальная логика сравнения.

Смежные вопросы