0

如何从HTML文件中提取所有文本

我想提取所有文本,在 alt 属性、<p> 标签等中。

但是我不想提取样式和脚本标签之间的文本

谢谢

现在我有以下代码

    <?PHP
    $string =  trim(clean(strtolower(strip_tags($html_content))));
    $arr = explode(" ", $string);
    $count = array_count_values($arr);
    foreach($count as $value => $freq) {
          echo trim ($value)."---".$freq."<br>";
    }

    function clean($in){
           return preg_replace("/[^a-z]+/i", " ", $in);
    }

    ?>

这很好用,但它检索我不想检索的脚本和样式标签,另一个问题我不确定它是否检索像 alt 这样的属性 - 因为 strip_tags 函数可能会删除所有 HTML 标签及其属性

谢谢

4

5 回答 5

7

我个人认为您应该切换到某种 XML 阅读器(SimpleXMLDocument Object ModelXMLReader来解析 HTML 文档。我会混合使用DOM,SimpleXMLXPath来提取你需要的东西 - 解析任意文档时,其他任何东西都会惨遭失败:

$dom = new DOMDocument();
$dom->loadHTML($html_content); // use DOMDocument because it can load HTML
$xml = simplexml_import_dom($dom); // switch to SimpleXML because it's easier to use.
$pTags = $xml->xpath('/html/body//p');
$tagsWithAltAttribute = $xml->xpath('/html/body//*[@alt]');
// ...
于 2009-10-02T08:29:15.443 回答
0

我将其发布为另一个帖子的答案,但又在这里:

我们刚刚在repustate.com上推出了一个新的自然语言处理 API 。使用 REST API(所以只使用 curl 就可以了),您可以清理任何 HTML 或 PDF 并只取回文本部分。我们的 API 是免费的,所以请随意使用。检查它并将结果与​​ readability.js 进行比较——我想你会发现它们几乎 100% 相同。

于 2010-05-31T19:52:46.660 回答
0

首先删除包含完整内容的脚本和样式标签,然后使用您当前的清理标签方式,您将获得文本。

于 2009-10-02T08:26:39.253 回答
0

首先,您可以搜索 and 块并将它们从 html 中删除。

我有这个功能我经常使用

        function search($start,$end,$string, $borders=true){
            $reg="!".preg_quote($start)."(.*?)".preg_quote($end)."!is";
            preg_match_all($reg,$string,$matches);

            if($borders) return $matches[0];    
            else return $matches[1];    
        }

该函数将返回数组中的匹配块。

$array = search("<script>" , "</script>" , $html)

脚本和样式消失后,使用 strip_tags 获取文本

于 2009-10-02T08:33:32.533 回答
0

只要您不能确定源是 100% 格式良好的 XML(根据定义,HTML4 不是),任何类型的解析都不是一种选择。

一个简单的 preg_replace 就足够了。就像是

preg_replace('/<(script|style).*>.*<\/\1>/i', '', $html);

应该足以用空字符串替换所有脚本和样式元素及其内容(即剥离它们)。

但是,如果您想避免 XSS 攻击,最好使用 HTML sanitiser 来规范化 HTML,然后去除所有错误代码。

于 2009-10-02T08:43:45.430 回答