【发布时间】:2011-08-28 09:22:31
【问题描述】:
在为我的SeoTools Excel Plugin 处理TextToCodeRatio 函数时,我想对我的方法提出一些意见:
我正在使用 HtmlAgiltyPack 来获取所有文本节点,丢弃那些具有脚本和样式标签作为父节点的节点并执行一些额外的文本操作:
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 tool 返回 28671。我做错了吗?
更新:正如 Oskar Kjellin 所指出的,我计算的是字符而不是字节,而 SeoChat 计算的是字节。什么是最好的,计算字符或字节?我认为这个指标不应该受到页面所写编码的影响。
【问题讨论】:
-
那不计算比率,只计算长度。而且好像他在计算字节,你在计算字符
-
如果你有CalculateTextSize,那么剩下的就很简单了。我正在计算字符,因为我认为这是一个更好的指标。您使用的编码不应影响文本与代码的比率?
-
但这当然是造成差异的原因... 计数字节而不是我的 2771(如果我删除 HtmlDecode,我得到 2979)
-
很高兴您找到了差异。您还应该使用 html 中指定的编码。如果您对代码使用相同的编码,那么比率不会受到影响(至少可能不会那么大)
标签: c# algorithm html-parsing