Как упомянул HereticMonkey в комментарии, вы получаете только общее количество текстовых узлов, поэтому вам нужно посчитать слова внутри InnerText
. Также есть пара других вещей, которые вы, скорее всего, захотите сделать:
- Искать только в теле страницы
- Исключить узлы сценария, чтобы вы не возвращали JavaScript
Я написал модифицированную версию вашего кода, которая делает это и считает слова, разделяя их на пробел и обрабатывая только те строки, которые начинаются с буквы как слова:
int kelimeSayisi()
{
Uri url = new Uri("https://www.fitekran.com/hamilelik-ve-spor-hamileyken-hangi-spor-nasil-yapilir/");
WebClient client = new WebClient();
client.Encoding = System.Text.Encoding.UTF8;
string html = client.DownloadString(url);
HtmlAgilityPack.HtmlDocument doc = new HtmlAgilityPack.HtmlDocument();
doc.LoadHtml(html);
char[] delimiter = new char[] {' '};
int kelime = 0;
foreach (string text in doc.DocumentNode
.SelectNodes("//body//text()[not(parent::script)]")
.Select(node => node.InnerText))
{
var words = text.Split(delimiter, StringSplitOptions.RemoveEmptyEntries)
.Where(s => Char.IsLetter(s[0]));
int wordCount = words.Count();
if (wordCount > 0)
{
Console.WriteLine(String.Join(" ", words));
kelime += wordCount;
}
}
return kelime;
}
Это возвращает общее количество слов 1487, а также записывает на консоль все, что рассматривается как слово, чтобы вы могли просмотреть, что включено. Возможно, это слово. net исключает несколько вещей, таких как верхние и нижние колонтитулы.