ep_readability
Advanced tools
Comparing version 0.0.13 to 0.0.14
@@ -17,2 +17,3 @@ { | ||
, "readability.info.fleschIndex": "Flesch Index: " | ||
, "readability.info.language": "Sprache: " | ||
, "readability.info.sentences": "Sätze: " | ||
@@ -19,0 +20,0 @@ , "readability.info.words": "Wörter: " |
@@ -17,2 +17,3 @@ { | ||
, "readability.info.fleschIndex": "Flesch index: " | ||
, "readability.info.language": "Language: " | ||
, "readability.info.sentences": "Sentences: " | ||
@@ -19,0 +20,0 @@ , "readability.info.words": "Words: " |
{ | ||
"name": "ep_readability", | ||
"version": "0.0.13", | ||
"version": "0.0.14", | ||
"description": "Calculates the Flesch readability index in Etherpad, client based.", | ||
@@ -17,4 +17,5 @@ "author": { | ||
"readability", | ||
"etherpad" | ||
"etherpad", | ||
"amstad" | ||
] | ||
} |
# Click button to calculate the Flesch readability index | ||
There'll be a button which shows the Flesch redability index. | ||
There'll be a button which calculates and displays the Flesch redability index. | ||
Colours indicate the readability of the text: red, orange, yellow, green. | ||
Numeric values detail the readability: | ||
* Negative numbers or near "0" indicate texts which are very difficult to read. | ||
* Numbers near "100" indicate very easy texts. | ||
Calculating is triggered by entering !, ?, RETURN or BACKSPACE. Or by pushing the button. | ||
@@ -16,2 +10,4 @@ | ||
The original Flesch index is calculated for the English language. The Amstad index is calculated for the German language. | ||
## Readability | ||
@@ -18,0 +14,0 @@ |
@@ -35,3 +35,10 @@ // ---------------------------------------------------------------------------- | ||
.replace(/^\s+/gm,'') // Strip leading whitespace | ||
.replace(/\s+$/gm,''); // Strip trailing whitespace | ||
.replace(/\s+$/gm,'') // Strip trailing whitespace | ||
.replace(/ä/gm, 'a') // Consider German umlauts | ||
.replace(/Ä/gm, 'a') | ||
.replace(/ü/gm, 'u') | ||
.replace(/Ü/gm, 'u') | ||
.replace(/ö/gm, 'o') | ||
.replace(/Ö/gm, 'o') | ||
.replace(/ß/gm, 'ss'); | ||
@@ -43,3 +50,3 @@ console.log(text); | ||
exports.fleschReadingEase = function(text) { | ||
exports.fleschReadingEase = function(text, lang) { | ||
var flesch = wordCount = sentenceCount = syllCount = averageWordsPerSentence = averageSyllablesPerWord = null; | ||
@@ -50,8 +57,7 @@ | ||
averageWordsPerSentence = wordCount / sentenceCount; | ||
syllCount = 0; | ||
// Syllables | ||
var words = ''; | ||
text.split(/[\s\.]+/).forEach(function(word) { | ||
words += word + '_'; | ||
syllCount += exports.syllableCount(word); | ||
syllCount += exports.syllableCount(word); // exports.countSyllables(word); | ||
}); | ||
@@ -61,3 +67,6 @@ averageSyllablesPerWord = (syllCount || 1) / wordCount; | ||
// Flesch | ||
flesch = Math.round((206.835 - (1.015 * averageWordsPerSentence) - (84.6 * averageSyllablesPerWord))*10)/10; | ||
if(lang == 'de') | ||
flesch = Math.round( (180 - averageWordsPerSentence - (58.5 * averageSyllablesPerWord))*10 )/10; | ||
else | ||
flesch = Math.round( (206.835 - (1.015 * averageWordsPerSentence) - (84.6 * averageSyllablesPerWord))*10 )/10; | ||
@@ -76,2 +85,13 @@ var result = { | ||
/* | ||
Evaluate: https://github.com/brbcoding/Readability/blob/master/readability.js | ||
exports.countSyllables = function(word) { | ||
word = word.toLowerCase(); | ||
if(word.length <= 3) { return 1; } | ||
word = word.replace(/(?:[^laeiouy]es|ed|[^laeiouy]e)$/, ''); | ||
word = word.replace(/^y/, ''); | ||
console.log(word); | ||
return word.match(/[aeiouy]{1,2}/g).length; | ||
}; */ | ||
// | ||
@@ -87,4 +107,4 @@ // I need to go through this function in detail and check it | ||
// Prepare word - make lower case and remove non-word characters | ||
word = word.toLowerCase().replace(/[^a-z]/g,""); | ||
word = word.toLowerCase();//.replace(/[^a-z]/g,""); | ||
// Specific common exceptions that don't follow the rule set below are handled individually | ||
@@ -237,2 +257,11 @@ // Array of problem words (with word as key, syllable count as value) | ||
// @TODO proper language detection | ||
exports.detectLangage = function(text) { | ||
var lang = 'en'; | ||
if(text.match(/ä|Ä|ü|Ü|ö|Ö|ß/gm).length > 0) | ||
lang = 'de'; | ||
console.log('Language detected: ' + lang); | ||
return lang; | ||
} | ||
exports.documentReady = function(hook_name, args, cb) { | ||
@@ -248,7 +277,7 @@ | ||
+ window._('readability.info.advice'); | ||
var lang = exports.detectLangage(text); | ||
text = exports.cleanText(text); | ||
if(text.length > 0) { | ||
result = exports.fleschReadingEase( text ); | ||
result = exports.fleschReadingEase( text, lang ); | ||
jQuery.each(colorOrder, function(index, item) { | ||
@@ -263,2 +292,3 @@ //alert(result.flesch +" - "+ item) | ||
toolTip = window._('readability.info.fleschIndex') + result.flesch + ' ' + window._('readability.info.fleschScale') + "\n" | ||
+ window._('readability.info.language') + lang + "\n" | ||
+ window._('readability.info.sentences') + result.sentenceCount + "\n" | ||
@@ -265,0 +295,0 @@ + window._('readability.info.words') + result.wordCount + "\n" |
@@ -20,4 +20,4 @@ var readab = require('../static/js/readability_button.js'); | ||
text = '<div id="magicdomid6" class=""><span class="author-a-eyz86zqg38z79zx2z82z0z70zsz89zz76z">»</span><span class="author-a-eyz86zqg38z79zx2z82z0z70zsz89zz76z i"><i>Die Politik ist hier besonders gefragt, Entwicklung und Einsatz freier Verschlüsselungsanwendungen zu fördern</i></span><span class="author-a-eyz86zqg38z79zx2z82z0z70zsz89zz76z">.«</span></div>'; | ||
result = 'Die Politik ist hier besonders gefragt Entwicklung und Einsatz freier Verschlüsselungsanwendungen zu fördern.'; | ||
text = '<div id="magicdomid6" class=""><span class="author-a-eyz86zqg38z79zx2z82z0z70zsz89zz76z">»</span><span class="author-a-eyz86zqg38z79zx2z82z0z70zsz89zz76z i"><i>Die Politik ist hier besonders gefragt, Entwicklung und Einsatz freier Verschlusselungsanwendungen zu fordern</i></span><span class="author-a-eyz86zqg38z79zx2z82z0z70zsz89zz76z">.«</span></div>'; | ||
result = 'Die Politik ist hier besonders gefragt Entwicklung und Einsatz freier Verschlusselungsanwendungen zu fordern.'; | ||
test.equal(result, readab.cleanText(text)); | ||
@@ -43,4 +43,4 @@ | ||
exports.cleanTextWorkBreakInline = function(test) { | ||
var text = '<div id="magicdomid15" class=""><span class="author-a-z65zjckdup0xdseeity">Aus Transparenzgründen soll ein solches Register auf der Internetseite des Bundesta- ges veröffentlicht werden. Es muss maschinenlesbar gestaltet sein, um im Sinne von OpenData die Verknüpfung mit Abgeordneten- und Abstimmungsdaten zu ermögli- chen und um Sortier- und Durchsuchbarkeit sicherzustellen.</span></div>'; | ||
var result = 'Aus Transparenzgründen soll ein solches Register auf der Internetseite des Bundestages veröffentlicht werden. Es muss maschinenlesbar gestaltet sein um im Sinne von OpenData die Verknüpfung mit Abgeordneten und Abstimmungsdaten zu ermöglichen und um Sortier und Durchsuchbarkeit sicherzustellen.'; | ||
var text = '<div id="magicdomid15" class=""><span class="author-a-z65zjckdup0xdseeity">Aus Transparenzgrunden soll ein solches Register auf der Internetseite des Bundesta- ges veroffentlicht werden. Es muss maschinenlesbar gestaltet sein, um im Sinne von OpenData die Verknupfung mit Abgeordneten- und Abstimmungsdaten zu ermogli- chen und um Sortier- und Durchsuchbarkeit sicherzustellen.</span></div>'; | ||
var result = 'Aus Transparenzgrunden soll ein solches Register auf der Internetseite des Bundestages veroffentlicht werden. Es muss maschinenlesbar gestaltet sein um im Sinne von OpenData die Verknupfung mit Abgeordneten und Abstimmungsdaten zu ermoglichen und um Sortier und Durchsuchbarkeit sicherzustellen.'; | ||
test.equal(result, readab.cleanText(text)); | ||
@@ -55,4 +55,4 @@ test.done(); | ||
text = '<div id="magicdomid2" class=""><span class="author-a-z65zjckdup0xdseeity">Bedingungsloses Grundeinkommen und Mindestlohn </span></div><div id="magicdomid3" class=""><span class="author-a-z65zjckdup0xdseeity"> </span></div><div id="magicdomid4" class=""><span class="author-a-z65zjckdup0xdseeity">Wir Piraten setzen uns für die Einführung eines bedingungslosen Grundeinkommens ein, das die Ziele des „Rechts auf sichere Existenz und gesellschaftlicher Teilhabe“ aus unserem Parteiprogramm erfüllt. Es soll: </span></div>'; | ||
result = 'Bedingungsloses Grundeinkommen und Mindestlohn. Wir Piraten setzen uns für die Einführung eines bedingungslosen Grundeinkommens ein das die Ziele des Rechts auf sichere Existenz und gesellschaftlicher Teilhabe aus unserem Parteiprogramm erfüllt. Es soll'; | ||
text = '<div id="magicdomid2" class=""><span class="author-a-z65zjckdup0xdseeity">Bedingungsloses Grundeinkommen und Mindestlohn </span></div><div id="magicdomid3" class=""><span class="author-a-z65zjckdup0xdseeity"> </span></div><div id="magicdomid4" class=""><span class="author-a-z65zjckdup0xdseeity">Wir Piraten setzen uns fur die Einfuhrung eines bedingungslosen Grundeinkommens ein, das die Ziele des „Rechts auf sichere Existenz und gesellschaftlicher Teilhabe“ aus unserem Parteiprogramm erfullt. Es soll: </span></div>'; | ||
result = 'Bedingungsloses Grundeinkommen und Mindestlohn. Wir Piraten setzen uns fur die Einfuhrung eines bedingungslosen Grundeinkommens ein das die Ziele des Rechts auf sichere Existenz und gesellschaftlicher Teilhabe aus unserem Parteiprogramm erfullt. Es soll'; | ||
test.equal(result, readab.cleanText(text)); | ||
@@ -59,0 +59,0 @@ |
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
23362
379
45