Controleer de leesbaarheid van een bericht voordat u het…
Gepubliceerd op 13 februari 2016 • 2 min leestijd • 302 woordenZoals 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