Хороший алгоритм для соотношения текста и кода? - PullRequest
2 голосов
/ 28 августа 2011

Работая над 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 считает байты.Что лучше, считая символы или байты?Я думаю, что эта метрика не должна зависеть от того, в какой кодировке написана страница.

1 Ответ

1 голос
/ 28 августа 2011

Причина разницы в том, что он считает байты, а вы - символ.

Я бы сказал, что лучше всего рассчитать байты, поскольку причина для этого состоит в том, чтобы увидеть, сколько процентов загруженной страницы составляет текст. Таким образом, вы должны загрузить общий размер страницы и использовать его для расчета. Вы не можете использовать количество символов для этого.

Не уверен, как поисковые машины делают это, но ваш довольно легко обмануть. Вы можете просто поместить все внутри большого div текста и использовать CSS, чтобы скрыть div. Это зависит от того, насколько тщательно вы хотите быть.

...