1
- 'use strict' ;
2
-
3
- var visit = require ( 'unist-util-visit' ) ;
4
- var toString = require ( 'nlcst-to-string' ) ;
5
- var syllable = require ( 'syllable' ) ;
6
- var daleChall = require ( 'dale-chall' ) ;
7
- var spache = require ( 'spache' ) ;
8
- var daleChallFormula = require ( 'dale-chall-formula' ) ;
9
- var ari = require ( 'automated-readability' ) ;
10
- var colemanLiau = require ( 'coleman-liau' ) ;
11
- var flesch = require ( 'flesch' ) ;
12
- var smog = require ( 'smog-formula' ) ;
13
- var gunningFog = require ( 'gunning-fog' ) ;
14
- var spacheFormula = require ( 'spache-formula' ) ;
15
-
16
- module . exports = readability ;
17
-
18
- var SOURCE = 'retext-readability' ;
19
- var DEFAULT_TARGET_AGE = 16 ;
20
- var WORDYNESS_THRESHOLD = 5 ;
21
- var DEFAULT_THRESHOLD = 4 / 7 ;
22
-
23
- var own = { } . hasOwnProperty ;
24
- var floor = Math . floor ;
25
- var round = Math . round ;
26
- var ceil = Math . ceil ;
27
- var sqrt = Math . sqrt ;
1
+ 'use strict'
2
+
3
+ var visit = require ( 'unist-util-visit' )
4
+ var toString = require ( 'nlcst-to-string' )
5
+ var syllable = require ( 'syllable' )
6
+ var daleChall = require ( 'dale-chall' )
7
+ var spache = require ( 'spache' )
8
+ var daleChallFormula = require ( 'dale-chall-formula' )
9
+ var ari = require ( 'automated-readability' )
10
+ var colemanLiau = require ( 'coleman-liau' )
11
+ var flesch = require ( 'flesch' )
12
+ var smog = require ( 'smog-formula' )
13
+ var gunningFog = require ( 'gunning-fog' )
14
+ var spacheFormula = require ( 'spache-formula' )
15
+
16
+ module . exports = readability
17
+
18
+ var source = 'retext-readability'
19
+ var defaultTargetAge = 16
20
+ var defaultWordynessThreshold = 5
21
+ var defaultThreshold = 4 / 7
22
+
23
+ var own = { } . hasOwnProperty
24
+ var floor = Math . floor
25
+ var round = Math . round
26
+ var ceil = Math . ceil
27
+ var sqrt = Math . sqrt
28
28
29
29
function readability ( options ) {
30
- var settings = options || { } ;
31
- var targetAge = settings . age || DEFAULT_TARGET_AGE ;
32
- var threshold = settings . threshold || DEFAULT_THRESHOLD ;
33
- var minWords = settings . minWords ;
30
+ var settings = options || { }
31
+ var targetAge = settings . age || defaultTargetAge
32
+ var threshold = settings . threshold || defaultThreshold
33
+ var minWords = settings . minWords
34
34
35
35
if ( minWords === null || minWords === undefined ) {
36
- minWords = WORDYNESS_THRESHOLD ;
36
+ minWords = defaultWordynessThreshold
37
37
}
38
38
39
- return transformer ;
39
+ return transformer
40
40
41
41
function transformer ( tree , file ) {
42
- visit ( tree , 'SentenceNode' , gather ) ;
42
+ visit ( tree , 'SentenceNode' , gather )
43
43
44
44
function gather ( sentence ) {
45
- var familiarWords = { } ;
46
- var easyWord = { } ;
47
- var complexPolysillabicWord = 0 ;
48
- var familiarWordCount = 0 ;
49
- var polysillabicWord = 0 ;
50
- var totalSyllables = 0 ;
51
- var easyWordCount = 0 ;
52
- var wordCount = 0 ;
53
- var letters = 0 ;
54
- var counts ;
55
- var caseless ;
56
-
57
- visit ( sentence , 'WordNode' , visitor ) ;
45
+ var familiarWords = { }
46
+ var easyWord = { }
47
+ var complexPolysillabicWord = 0
48
+ var familiarWordCount = 0
49
+ var polysillabicWord = 0
50
+ var totalSyllables = 0
51
+ var easyWordCount = 0
52
+ var wordCount = 0
53
+ var letters = 0
54
+ var counts
55
+ var caseless
56
+
57
+ visit ( sentence , 'WordNode' , visitor )
58
58
59
59
if ( wordCount < minWords ) {
60
- return ;
60
+ return
61
61
}
62
62
63
63
counts = {
@@ -70,100 +70,105 @@ function readability(options) {
70
70
word : wordCount ,
71
71
character : letters ,
72
72
letter : letters
73
- } ;
73
+ }
74
74
75
75
report ( file , sentence , threshold , targetAge , [
76
- gradeToAge ( daleChallFormula . gradeLevel (
77
- daleChallFormula ( counts )
78
- ) [ 1 ] ) ,
76
+ gradeToAge ( daleChallFormula . gradeLevel ( daleChallFormula ( counts ) ) [ 1 ] ) ,
79
77
gradeToAge ( ari ( counts ) ) ,
80
78
gradeToAge ( colemanLiau ( counts ) ) ,
81
79
fleschToAge ( flesch ( counts ) ) ,
82
80
smogToAge ( smog ( counts ) ) ,
83
81
gradeToAge ( gunningFog ( counts ) ) ,
84
82
gradeToAge ( spacheFormula ( counts ) )
85
- ] ) ;
83
+ ] )
86
84
87
85
function visitor ( node ) {
88
- var value = toString ( node ) ;
89
- var syllables = syllable ( value ) ;
90
-
91
- wordCount ++ ;
92
- totalSyllables += syllables ;
93
- letters += value . length ;
94
- caseless = value . toLowerCase ( ) ;
95
-
96
- /* Count complex words for gunning-fog based on
97
- * whether they have three or more syllables
98
- * and whether they aren’t proper nouns. The
99
- * last is checked a little simple, so this
100
- * index might be over-eager. */
86
+ var value = toString ( node )
87
+ var syllables = syllable ( value )
88
+
89
+ wordCount ++
90
+ totalSyllables += syllables
91
+ letters += value . length
92
+ caseless = value . toLowerCase ( )
93
+
94
+ // Count complex words for gunning-fog based on whether they have three
95
+ // or more syllables and whether they aren’t proper nouns. The last is
96
+ // checked a little simple, so this index might be over-eager.
101
97
if ( syllables >= 3 ) {
102
- polysillabicWord ++ ;
98
+ polysillabicWord ++
103
99
104
100
if ( value . charCodeAt ( 0 ) === caseless . charCodeAt ( 0 ) ) {
105
- complexPolysillabicWord ++ ;
101
+ complexPolysillabicWord ++
106
102
}
107
103
}
108
104
109
- /* Find unique unfamiliar words for spache. */
110
- if ( spache . indexOf ( caseless ) !== - 1 && ! own . call ( familiarWords , caseless ) ) {
111
- familiarWords [ caseless ] = true ;
112
- familiarWordCount ++ ;
105
+ // Find unique unfamiliar words for spache.
106
+ if (
107
+ spache . indexOf ( caseless ) !== - 1 &&
108
+ ! own . call ( familiarWords , caseless )
109
+ ) {
110
+ familiarWords [ caseless ] = true
111
+ familiarWordCount ++
113
112
}
114
113
115
- /* Find unique difficult words for dale-chall. */
116
- if ( daleChall . indexOf ( caseless ) !== - 1 && ! own . call ( easyWord , caseless ) ) {
117
- easyWord [ caseless ] = true ;
118
- easyWordCount ++ ;
114
+ // Find unique difficult words for dale-chall.
115
+ if (
116
+ daleChall . indexOf ( caseless ) !== - 1 &&
117
+ ! own . call ( easyWord , caseless )
118
+ ) {
119
+ easyWord [ caseless ] = true
120
+ easyWordCount ++
119
121
}
120
122
}
121
123
}
122
124
}
123
125
}
124
126
125
- /* Calculate the typical starting age (on the higher-end) when
126
- * someone joins `grade` grade, in the US.
127
- * See https://en.wikipedia.org/wiki/Educational_stage#United_States. */
127
+ // Calculate the typical starting age (on the higher-end) when someone joins
128
+ // `grade` grade, in the US. See:
129
+ // https://en.wikipedia.org/wiki/Educational_stage#United_States
128
130
function gradeToAge ( grade ) {
129
- return round ( grade + 5 ) ;
131
+ return round ( grade + 5 )
130
132
}
131
133
132
- /* Calculate the age relating to a Flesch result. */
134
+ // Calculate the age relating to a Flesch result.
133
135
function fleschToAge ( value ) {
134
- return 20 - floor ( value / 10 ) ;
136
+ return 20 - floor ( value / 10 )
135
137
}
136
138
137
- /* Calculate the age relating to a SMOG result.
138
- * See http://www.readabilityformulas.com/smog-readability-formula.php. */
139
+ // Calculate the age relating to a SMOG result. See:
140
+ // http://www.readabilityformulas.com/smog-readability-formula.php
139
141
function smogToAge ( value ) {
140
- return ceil ( sqrt ( value ) + 2.5 ) ;
142
+ return ceil ( sqrt ( value ) + 2.5 )
141
143
}
142
144
143
145
/* eslint-disable max-params */
144
146
145
- /* Report the `results` if they’re reliably too hard for
146
- * the `target` age. */
147
+ // Report the `results` if they’re reliably too hard for the `target` age.
147
148
function report ( file , node , threshold , target , results ) {
148
- var length = results . length ;
149
- var index = - 1 ;
150
- var failCount = 0 ;
151
- var confidence ;
152
- var message ;
149
+ var length = results . length
150
+ var index = - 1
151
+ var failCount = 0
152
+ var confidence
153
+ var message
153
154
154
155
while ( ++ index < length ) {
155
156
if ( results [ index ] > target ) {
156
- failCount ++ ;
157
+ failCount ++
157
158
}
158
159
}
159
160
160
161
if ( failCount / length >= threshold ) {
161
- confidence = failCount + '/' + length ;
162
-
163
- message = file . warn ( 'Hard to read sentence (confidence: ' + confidence + ')' , node , SOURCE ) ;
164
- message . confidence = confidence ;
165
- message . source = SOURCE ;
166
- message . actual = toString ( node ) ;
167
- message . expected = null ;
162
+ confidence = failCount + '/' + length
163
+
164
+ message = file . warn (
165
+ 'Hard to read sentence (confidence: ' + confidence + ')' ,
166
+ node ,
167
+ source
168
+ )
169
+ message . confidence = confidence
170
+ message . source = source
171
+ message . actual = toString ( node )
172
+ message . expected = null
168
173
}
169
174
}
0 commit comments