Работая над TextToCodeRatio функцией для моего SeoTools Excel Plugin , я хотел бы получить некоторые сведения о моем подходе:
Я использую HtmlAgiltyPack длявсе текстовые узлы, отбросьте те, которые имеют теги script и style как родительский узел, и выполните некоторые дополнительные операции с текстом:
public static int CalculateTextSize(HtmlDocument doc)
{
int size = 0;
foreach (HtmlNode node in
doc.DocumentNode.SelectNodes("//text()[normalize-space(.) != '']"))
{
HtmlNode parentNode = node.ParentNode;
if (parentNode != null)
{
if (parentNode.Name.Equals("script",
StringComparison.CurrentCultureIgnoreCase)
|| parentNode.Name.Equals("style",
StringComparison.CurrentCultureIgnoreCase))
{
continue;
}
}
string text = node.InnerText.Trim();
//Just in case agility pack gets it wrong...
text = StringUtils.StripTags(text);
//Replaces "&" => "&" etc.
text = HttpUtility.HtmlDecode(text);
//All whitespace is reduced to single space, i.e.
//"Foo\r\nBar\t\ Hello" => "Foo Bar Hello"
text = StringUtils.NormalizeWhitespace(text);
size += text.Trim().Length;
}
return size;
}
Что вы думаете?Это довольно ограничительный подход, например, для aftonbladet.se мой метод возвращает 23722, в то время как Инструмент SeoChat возвращает 28671. Я делаю это неправильно?
ОБНОВЛЕНИЕ : какуказал Оскар Кьеллин, я считаю символы вместо байтов, а SeoChat считает байты.Что лучше, считая символы или байты?Я думаю, что эта метрика не должна зависеть от того, в какой кодировке написана страница.