1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
//! Tokenization and counting: words, sentences, syllables, characters.
use Vec;
/// Count words: whitespace-separated tokens containing at least one alphanumeric
/// character (so stray punctuation tokens are not counted).
/// Count sentences by runs of terminal punctuation (`.`, `!`, `?`). Non-empty
/// text with no terminator counts as one sentence.
///
/// A `.` is **not** treated as a sentence end when it is a decimal point (digit
/// on both sides) or part of an initialism (immediately followed by another
/// letter/digit), which avoids over-counting `3.14` and `U.S.A.`. Runs of
/// terminators (e.g. `...` or `?!`) collapse to one. Trailing abbreviation dots
/// (`Dr.`) can still be over-counted by one — full abbreviation handling is out
/// of scope.
/// Whether the terminator at index `i` plausibly ends a sentence.
/// Count non-whitespace characters (includes punctuation).
/// Count alphabetic characters only.
/// Estimate the number of syllables in a single English word using a vowel-group
/// heuristic with a silent-`e` rule. Always returns at least 1 for a word with
/// letters, and 0 for a word with none.
/// Total syllables across all words in `text`.
/// Count polysyllabic words (three or more syllables) — used by Gunning Fog and SMOG.