Поиск «ключевых слов» с потенциально поврежденными файлами HTML и подсчет совпадений - PullRequest
0 голосов
/ 03 февраля 2011

Я пытаюсь создать основной индексный файл для группы файлов HTML, находящихся в каталоге.Их может быть от 5 до 5000. Эти файлы не чистые и не красивые, поэтому некоторые из библиотек, на которые я смотрел, не выглядят так, как будто они будут играть хорошо.Многие из этих файлов берутся из временного каталога или вырезаны из резервной копии файла (во многих случаях, например, неполные файлы).Плюс, иногда люди просто пишут неаккуратный HTML.

Я в основном решил перечислить через каталог и использовать что-то вроде

string[] FileEntries = Directory.GetFiles(WhichDirectory);

        foreach (string FileName in FileEntries)
        {
            using (StreamReader sr = new StreamReader(FileName))
            {
                HTMLContents = sr.ReadToEnd();
            }

Я надеюсь, что StreamReader может выгрузить содержимое вмассив символов так же, как текстовый файл.

В любом случае, учитывая, что это может быть не самый чистый HTML в мире, есть несколько вещей, которые я бы хотел проанализировать из массива.

  1. Любой экземплярдаты в ЛЮБОМ формате (например, 1/1/11, 1 января 2011 г., 1-1-11, январь-1-2011 и т. д.) и поместите их в строку для последующего чтения.Надеюсь, есть библиотека или что-то для поиска «экземпляров» дат.

  2. Прочитайте текстовый файл построчно с различными «ключевыми словами», чтобы искать в путанице HTML.Такие вещи, как "Bob Evans" или "Sausage Factory Ltd" и т. Д. Затем я хочу подсчитать, сколько раз каждое "ключевое слово" появляется.Проблема в том, что я не хочу прибегать к тому, чтобы пользователь знал выражения регулярных выражений.

Итак, желаемый результат будет выглядеть примерно так:

BobEvans9304902.html
Название: Секретный рецепт секретной колбасы Боба Эванса

Найдено дат: "2 октября 2009", "22.07.09"

"Колбаса Боба Эванса": 30 попаданий

«Паприка»: 2 попадания

«Не переусердствуйте»: 5 попаданий

Все решения, которые я видел до сих пор, выглядят какони работают только для отдельных символов или слов (LINQ) или разбивают «аккуратное» предложение на слова. Надеюсь, мне не придется создавать новую копию строки и удалять все теги HTML, поскольку это не всегдабудет аккуратно, и я не хочу добавлять еще один шаг к массовой обработке файлов. Если это единственный способ сделать это, пусть будет так.

1 Ответ

2 голосов
/ 03 февраля 2011

Возможно, вы захотите исследовать анализатор HTML to XML, который обрабатывает плохо сформированный XML, такой как html agility pack .Затем вы можете сосредоточиться на содержании и использовать запросы XPath для поиска / подсчета ключевых слов.Я думаю, что вам, вероятно, все еще понадобится регулярное выражение для обработки дат.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...