gpt4 book ai didi

html - 计算 CSS 类的出现次数

转载 作者:太空宇宙 更新时间:2023-11-03 18:27:53 25 4
gpt4 key购买 nike

我有一个将 HTML 文档作为输入的 Ruby 程序。这个 HTML 文档的结构是未知的,实际上可以是任何东西。

同时保证文档使用 CSS 进行格式化。

输出需要是一个散列,其中每个键是文档中使用的 CSS 类,值是 CSS 类在文档正文中出现的次数。

最佳答案

require 'open-uri'
require 'nokogiri'

doc = Nokogiri.HTML(open('http://stackoverflow.com'))
classes = doc.xpath('//@class').map{ |attr| attr.value.split(/\s+/) }.flatten
counts = Hash[
classes.group_by(&:to_s).map{ |n,ary| [n,ary.count] }.sort_by{ |n,i| [-i,n] }
]

require 'pp'
pp counts
#=>{"post-tag"=>320,
#=> "mini-counts"=>270,
#=> "cp"=>90,
#=> "narrow"=>90,
#=> "question-hyperlink"=>90,
#=> ...etc...

描述:

  1. 使用 xpath 找到所有 class="..."属性,例如class="a b" , class="c" , class="b"
  2. split 在空白处,例如class="a b"["a","b"]
  3. flatten 到一个列表中,例如[["a","b"],["c"],["b"]]["a","b","c","b"]
  4. group_by 从字符串哈希到命中,例如⇒ {"a"=>["a"],"b"=>["b","b"],"c"=>["c"]}
  5. map 将名称与 length 配对,例如⇒ [["a",1],["b",2],["c",1]]
  6. 为了好玩, sort_by 降序出现,例如⇒ [["b",2],["a",1],["c",1]]
  7. Hash.[] 再次变成散列,例如⇒ {"b"=>2,"a"=>1",c"=>1}

或者(不是函数式,更直接)在第 3 步之后循环并向散列添加计数。对于奖励积分,使用默认的“0”值初始化散列:

counts = Hash.new(0)
classes.each{ |name| counts[name] += 1 }

关于html - 计算 CSS 类的出现次数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8341371/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com