Controleer de leesbaarheid van een bericht voordat u het…

Gepubliceerd op 13 februari 2016 • 2 min leestijd • 302 woorden
Zoals ik eerder al zei, vind ik de dingen die de Yoast SEO-plug-in voor WordPress doet voor zoekmachineoptimalisatie (SEO) erg leuk. Eén van die dingen is…

Zoals ik eerder al zei, vind ik de dingen die de Yoast SEO-plug-in voor WordPress doet voor zoekmachineoptimalisatie (SEO) erg leuk. Eén van die dingen is de leesbaarheidscontrole.

Yoast controleert elk artikel dat je schrijft op leesbaarheid, met andere woorden: is jouw artikel makkelijk te lezen? Je schrijft voor je lezers, nietwaar?

Ik heb het rakebestand van www.mikemackintosh.com enigszins aangepast aan mijn eigen behoeften. Het origineel controleerde of de leesbaarheid van Flesch-Kinkaid lager was dan 80. Als dat zo was, slaagde het niet in de taak en zou de site niet worden gebouwd.

Ik wilde daarentegen weten wat de score voor elk bericht was, dus heb ik het aangepast om elke score weer te geven.

Net als de andere SEO-tests Ik heb het in een rake-taak gestopt.

Als je meer wilt weten over de leesbaarheid en de specifieke Flesch-Kinkaid-tests, ga dan naar de Flesch-Kinkaid Wikipedia-pagina

De taak  

Om de taak te laten werken, moet je de Lingua-edelsteen gebruiken. installeer het met ‘gem install lingua’ of plaats het in je Gemfile

Hier is het script:


ruby
task :readability do
  require 'find'
  require 'lingua'

  # Create a simple function to do this
  def calculate_score(text)
    # Remove the frontmatter, and codeblocks, because this will impact the score
    frontmatter = /(---)((?:(?:r?n)+(?:w|s).*)+r?n)(?=---r?n)(.*?)/x
    fenced_code = /`{3}(?:(.*$)n)?([sS]*)`{3}/mx
    nested_code = /((?:^(?:[ ]{4}|t).*$(?:r?n|z))+)/x

    parsed = text.gsub(frontmatter, "#{$3}/).gsub(fenced_code, "/).gsub(nested_code, "/)
    score = Lingua::EN::Readability.new( parsed ).flesch
    if score > 100
      return score, "an Elementary Schooler"
    elsif score.between?(80,100)
      return score, "a Middle Schooler"
    elsif score.between?(50,80)
      return score, "a High Schooler"
    elsif score.between?(30,50)
      return score, "an Average Adult"
    elsif score.between?(0,30)
      return score, "a College Level Student"
    else
      return score, "a PhD Academic"
    end
  end

  # Get all posts in ./_posts
  Find.find("./_posts//) do |post|
    if File.file?(post)
      score, level = calculate_score(File.read(post))
      puts "#{post} has a score of #{(score).round(1)}, which is suitable for #{level}"
    end
  end
end

Zie ook

    Follow me