Я ищу хороший класс слов или функцию. Когда я копирую и вставляю что-то из Интернета и сравниваю его с моим обычным алгоритмом подсчета слов и MS Word, он всегда отключается чуть более 10%. Я думаю, что это слишком много. Так вы, ребята, знаете о точном алгоритме подсчета слов в C#.Word Count Algorithm in C#
ответ
String.Split по предопределенным символам. Используйте пунктуации, пробелы (удалить несколько пробелов) и любые другие символы, которые вы определяете как «разбиение слов»
Что вы пробовали?
Я видел, что предыдущий пользователь получил гвозди для ссылок, но вот несколько примеров использования регулярных выражений или соответствия символов. Надеюсь, что это помогает, и никто не пострадает Х-)
не для ссылок, скорее, для поиска в явном виде ссылок w/no value add included in – zvolkov
ok, point taken. –
@astander Не забывайте параметр _StringSplitOptions.RemoveEmptyEntries_ в -_Split_, иначе слово «word1, word2» или «word1? Word2» будет считаться 3 словами! –
Как @astander предполагает, вы можете сделать String.split следующим образом:
string[] a = s.Split(
new char[] { ' ', ',', ';', '.', '!', '"', '(', ')', '?' },
StringSplitOptions.RemoveEmptyEntries);
Пройдя в массив символов, вы можете разбить на несколько разрывов слов. Удаление пустых записей не позволит вам подсчитывать слова, отличные от слов.
Это замечательно, но вы также должны учитывать новые строки. Если вы введете слово, нажмите Enter, введите слово, нажмите enter, он вернет счет 0. Одна из перегрузок для Split() позволяет использовать массив строк, поэтому вы можете изменить этот массив на строки символов и добавьте Environment.Newline (или "\ r \ n" и \ n "). –
Если ваш вход содержит очень ограниченное форматирование, вам, вероятно, понадобится более широкая сеть - рассмотрите фигурные и угловые фигурные скобки, тире (хотя это может вызвать ложные срабатывания) и другие знаки препинания. – 2012-10-15 16:04:46
Вы также должны проверить на newlines
, tabs
и non-breaking spaces
. Лучше всего скопировать исходный текст в StringBuilder
и заменить все символы новой строки, табуляции и символы окончания предложения пробелами. Затем разделите строку на пробелы.
Я только что была такая же проблема в ClipFlair, где мне нужно, чтобы вычислить WPM (слов в минуту) для Movie Captions, поэтому я придумал следующий:
Вы можете определить этот статический метод расширения в статическом классе, а затем добавить предложение use в пространство имен этого статического класса в любом классе, который должен использовать этот метод расширения. Метод расширения вызывается с помощью s.WordCount(), где s представляет собой строку (идентификатор [переменная/постоянная] или буквальным)
public static int WordCount(this string s)
{
int last = s.Length-1;
int count = 0;
for (int i = 0; i <= last; i++)
{
if (char.IsLetterOrDigit(s[i]) &&
((i==last) || char.IsWhiteSpace(s[i+1]) || char.IsPunctuation(s[i+1])))
count++;
}
return count;
}
Используйте регулярное выражение для поиска слова (например, [\ W] +) и просто сосчитать матчи
public static Regex regex = new Regex(
"[\\w]+",
RegexOptions.Multiline
| RegexOptions.CultureInvariant
| RegexOptions.Compiled
);
regex.Match (_someString) .Count
Вот урезанная версия класса C# кода я сделал для подсчета слов, азиатских слов, Charaters и т.д. Это почти то же самое как Microsoft Word. Я разработал оригинальный код для подсчета слов для документов Microsoft Word.
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Text.RegularExpressions;
namespace BL {
public class WordCount
{
public int NonAsianWordCount { get; set; }
public int AsianWordCount { get; set; }
public int TextLineCount { get; set; }
public int TotalWordCount { get; set; }
public int CharacterCount { get; set; }
public int CharacterCountWithSpaces { get; set; }
//public string Text { get; set; }
public WordCount(){}
~WordCount() {}
public void GetCountWords(string s)
{
#region Regular Expression Collection
string asianExpression = @"[\u3001-\uFFFF]";
string englishExpression = @"[\S]+";
string LineCountExpression = @"[\r]+";
#endregion
#region Asian Character
MatchCollection asiancollection = Regex.Matches(s, asianExpression);
AsianWordCount = asiancollection.Count; //Asian Character Count
s = Regex.Replace(s, asianExpression, " ");
#endregion
#region English Characters Count
MatchCollection collection = Regex.Matches(s, englishExpression);
NonAsianWordCount = collection.Count;
#endregion
#region Text Lines Count
MatchCollection Lines = Regex.Matches(s, LineCountExpression);
TextLineCount = Lines.Count;
#endregion
#region Total Character Count
CharacterCount = AsianWordCount;
CharacterCountWithSpaces = CharacterCount;
foreach (Match word in collection)
{
CharacterCount += word.Value.Length ;
CharacterCountWithSpaces += word.Value.Length + 1;
}
#endregion
#region Total Character Count
TotalWordCount = AsianWordCount + NonAsianWordCount;
#endregion
}
}
}
- 1. Word count in flash?
- 2. Word Match Algorithm
- 3. Word Jumble Algorithm
- 4. rails algorithm visitors count
- 5. VSTO Word Add-In breaks Word Count/Page Position
- 6. Word Count logic
- 7. Char Count in C?
- 8. C Max Numbers In Array Algorithm
- 9. Infix to Postfix Algorithm in C
- 10. Image in Image Algorithm
- 11. Djkstras Algorithm in Java
- 12. Anagram Algorithm in PHP
- 13. PBFT algorithm in hyperledger
- 14. Count Word Pairs Java
- 15. Word guessing game in C
- 16. C++ count in for statement
- 17. 150 Word Count Regex
- 18. Word count using Microsoft.Office.Interop.Word
- 19. 2d cube in canvas algorithm
- 20. Help in PayPal PHP Algorithm
- 21. Isovalue in Marching Cubes Algorithm
- 22. Python Word Count текстового файла
- 23. javascript character, word, & count count function
- 24. String to Dictionary Word Count
- 25. Простой JavaScript Word Count Function
- 26. Комплекс C# Linq Algorithm
- 27. Word Split Algorithm to Prefix Stem and Suffix
- 28. Добавить заголовок в документ Word (Word Add-In C#)
- 29. word ladder in python
- 30. count in defaultdict (list) python
Является ли ваш алгоритм слишком высоким или слишком низким? Или это меняется? – Larsenal
Вы считаете только слова, или это то, что вы вставляете также разметкой. – joshperry
Почему вы используете слово Word Word как показатель для точности? Тонкие различия в том, что считается «словом», могут привести к значительным различиям в подсчете слов. 10% - это не сюрприз. То, что вы видите, вероятно, совершенно точно, но немного отличается. –