查找可能损坏的HTML文件和计数命中的“关键字”

时间:2011-02-03 20:38:49

标签: c# visual-studio visual-studio-2010 .net-4.0

我正在尝试为位于目录中的一堆HTML文件创建主索引文件。可能有5到5000之间的任何地方。这些文件不干净或不好,所以我看到的一些lib似乎不会很好玩。其中许多文件来自临时目录,或者是文件冗余(在许多情况下是ergo不完整的文件)。另外,有时人们只会写一些草率的HTML。

我基本上决定枚举目录并使用类似

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

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

我希望StreamReader能够以与文本文件相同的方式将内容转储到字符数组中。

无论如何,鉴于这可能不是世界上最干净的HTML,我想从阵列中解析一些事情。

  1. 任何格式的日期实例(例如,2011年1月1日,1/11/11,2011年1月1日至1月1日,1月1日等),并将这些转储到要读取的字符串中晚点回来。希望有一个lib或用于查找日期“实例”的东西。

  2. 逐行读取一个文本文件,其中包含各种“关键字”,以便在混乱的HTML中查找。像“Bob Evans”或“Sausage Factory Ltd”等等。然后,我想计算每个“关键字”出现的次数。问题是我不想诉诸用户必须知道正则表达式。

  3. 因此,所需的输出将是这样的:

      

    BobEvans9304902.html
      标题:鲍勃埃文斯秘密香肠食谱

         

    发现日期:“2009年10月2日”,“7/22/09”

         

    “Bob Evans Sausage”:30次点击

         

    “辣椒粉”:2次点击

         

    “不要过度劳累”:5次点击

    到目前为止我看到的所有解决方案似乎只适用于单个字符或单词(LINQ)或将“整齐”的句子分成单词。我希望我不必创建一个新的副本字符串和去掉所有HTML标签,因为它并不总是很整洁,我不想在大规模文件处理中添加另一个步骤。如果这是唯一的方法,那么就这样吧。

1 个答案:

答案 0 :(得分:2)

您可能想要研究一种HTML到XML解析器,它可以处理像html agility pack这样格式不良的XML。然后,您可以专注于内容并使用XPath查询来搜索/计算关键字。我希望你可能仍然需要正则表达式来处理日期。