【问题标题】:How to remove words that ar less then 3 characters? PHP如何删除少于 3 个字符的单词? PHP
【发布时间】:2020-03-17 08:30:44
【问题描述】:

我正在尝试创建一个function 来过滤网页上最常用的单词。

现在我可以获取一个 HTML 网站,该函数会计算单词数,按最常用的词过滤它们,但不能使少于 3 个字符的单词不会显示。

$contents = file_get_contents('https://www.basketnews.lt');    
$search = array(
        '@<script[^>]*?>.*?</script>@si',   // Strip out javascript
        '@<head>.*?</head>@siU',            // Lose the head section
        '@<style[^>]*?>.*?</style>@siU',    // Strip style tags properly
        '@<![\s\S]*?--[ \t\n\r]*>@',        // Strip multi-line comments including CDATA
        );

$contents = preg_replace($search, '', $contents);    
$result = array_count_values(
            str_word_count(strip_tags($contents), 1)
          );

arsort($result);
print_r($result);

如何实现这个函数的附加功能?

【问题讨论】:

  • 一个额外的正则表达式 \b\w{1,2}\b 应该去掉任何长度少于 3(2 和 1)个符号但包括任何单词 char 的内容。旁注:我也没有看到 HtmlDomParser
  • “在 HtmlDomParser 的帮助下” - 我没有看到在你显示的代码中的任何地方使用过。
  • 谢谢,编辑了这个问题。我怎样才能过滤所有纯 HTML 文本?现在,它过滤了所有的 HTML 元素,比如 classes 和 e.t.c

标签: php html regex


【解决方案1】:

只需过滤掉较短的单词即可生成新结果:

foreach($result as $k => $v) {
  if(strlen($k) > 2) {
    $result2[$k] = $v;
  }
}
print_r($result2);

【讨论】:

    【解决方案2】:

    您可以使用https://www.php.net/array-filter

    $array = array_filter($array, function($value){
        return strlen($value) >= 3;
    });
    

    所有与检查不匹配的内容都会被过滤掉。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2023-03-06
      • 2014-11-11
      • 1970-01-01
      • 2011-10-12
      • 1970-01-01
      • 2015-06-08
      • 2017-06-01
      相关资源
      最近更新 更多