Skip to content

Commit

Permalink
Settings: Add Settings - Measures - Readability - Danielson-Bryan's R…
Browse files Browse the repository at this point in the history
…eadability Formula; Work Area: Add Profiler - Readability - Danielson-Bryan's Readability Formula
  • Loading branch information
BLKSerene committed Aug 1, 2023
1 parent 24c58cd commit 0b086b0
Show file tree
Hide file tree
Showing 8 changed files with 352 additions and 58 deletions.
4 changes: 2 additions & 2 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -20,13 +20,13 @@

## [3.3.0](https://github.com/BLKSerene/Wordless/releases/tag/3.3.0) - ??/??/2023
### 🎉 New Features
- Settings: Add Settings - Measures - Readability - Bormuth's Grade Placement / Coleman's Readability Formula / Flesch Reading Ease
- Settings: Add Settings - Measures - Readability - Bormuth's Grade Placement / Coleman's Readability Formula / Flesch Reading Ease / Danielson-Bryan's Readability Formula
- Utils: Add khmer-nltk's Khmer sentence tokenizer, word tokenizer, and part-of-speech tagger
- Utils: Add PyThaiNLP's perceptron part-of-speech tagger (Blackboard)
- Utils: Add spaCy's Korean sentence recognizer, word tokenizer, part-of-speech tagger, lemmatizer, and dependency parser
- Utils: Add spaCy's Malay word tokenizer
- Utils: Add spaCy's Slovenian sentence recognizer, part-of-speech tagger, lemmatizer, and dependency parser
- Work Area: Add Profiler - Readability - Bormuth's Cloze Mean / Bormuth's Grade Placement / Coleman's Readability Formula / Dale-Chall Readability Formula (New)
- Work Area: Add Profiler - Readability - Bormuth's Cloze Mean / Bormuth's Grade Placement / Coleman's Readability Formula / Dale-Chall Readability Formula (New) / Danielson-Bryan's Readability Formula

### ✨ Improvements
- Utils: Update Wordless's sentence and sentence segment splitters
Expand Down
115 changes: 62 additions & 53 deletions doc/doc_eng.md

Large diffs are not rendered by default.

215 changes: 215 additions & 0 deletions doc/measures/readability/danielson_bryans_readability_formula.svg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
19 changes: 19 additions & 0 deletions tests/wl_tests_measures/test_measures_readability.py
Original file line number Diff line number Diff line change
Expand Up @@ -206,6 +206,24 @@ def test_dale_chall_readability_formula_new():
assert x_c50_eng_12 == 64 - 0.95 * (1 / 12 * 100) - 0.69 * (12 / 3)
assert x_c50_spa_12 == 'no_support'

def test_danielson_bryans_readability_formula():
danielson_bryan_eng_0 = wl_measures_readability.danielson_bryans_readability_formula(main, test_text_eng_0)
settings['danielson_bryans_readability_formula']['variant'] = '1'
danielson_bryan_eng_12_1 = wl_measures_readability.danielson_bryans_readability_formula(main, test_text_eng_12)
settings['danielson_bryans_readability_formula']['variant'] = '2'
danielson_bryan_eng_12_2 = wl_measures_readability.danielson_bryans_readability_formula(main, test_text_eng_12)
danielson_bryan_other_12 = wl_measures_readability.danielson_bryans_readability_formula(main, test_text_other_12)

print("Danielson-Bryan's Readability Formula:")
print(f'\teng/0: {danielson_bryan_eng_0}')
print(f'\teng/12-1: {danielson_bryan_eng_12_1}')
print(f'\teng/12-2: {danielson_bryan_eng_12_2}')
print(f'\tother/12: {danielson_bryan_other_12}')

assert danielson_bryan_eng_0 == 'text_too_short'
assert danielson_bryan_eng_12_1 == 1.0364 * (47 / (12 - 1)) + 0.0194 * (47 / 3) - 0.6059
assert danielson_bryan_eng_12_2 == danielson_bryan_other_12 == 131.059 - 10.364 * (47 / (12 - 1)) - 0.194 * (47 / 3)

def test_devereux_readability_index():
grade_placement_eng_0 = wl_measures_readability.devereux_readability_index(main, test_text_eng_0)
grade_placement_eng_12 = wl_measures_readability.devereux_readability_index(main, test_text_eng_12)
Expand Down Expand Up @@ -534,6 +552,7 @@ def test_wiener_sachtextformel():
test_colemans_readability_formula()
test_dale_chall_readability_formula()
test_dale_chall_readability_formula_new()
test_danielson_bryans_readability_formula()
test_devereux_readability_index()
test_flesch_kincaid_grade_level()
test_flesch_reading_ease()
Expand Down
25 changes: 25 additions & 0 deletions wordless/wl_measures/wl_measures_readability.py
Original file line number Diff line number Diff line change
Expand Up @@ -311,6 +311,31 @@ def dale_chall_readability_formula_new(main, text):

return x_c50

# Danielson-Bryan's Readability Formula
# Reference: Danielson, W. A., & Bryan, S. D. (1963). Computer automation of two readability formulas. Journalism Quarterly, 40(2), 201–206. https://doi.org/10.1177/107769906304000207
def danielson_bryans_readability_formula(main, text):
text = get_counts(main, text)

if text.count_words - 1 and text.count_sentences:
variant = main.settings_custom['measures']['readability']['danielson_bryans_readability_formula']['variant']

if variant == '1':
danielson_bryan = (
1.0364 * (text.count_chars_all / (text.count_words - 1))
+ 0.0194 * (text.count_chars_all / text.count_sentences)
- 0.6059
)
elif variant == '2':
danielson_bryan = (
131.059
- 10.364 * (text.count_chars_all / (text.count_words - 1))
- 0.194 * (text.count_chars_all / text.count_sentences)
)
else:
danielson_bryan = 'text_too_short'

return danielson_bryan

# Devereux Readability Index
# Reference: Smith, E. A. (1961). Devereaux readability index. Journal of Educational Research, 54(8), 298–303. https://doi.org/10.1080/00220671.1961.10882728
def devereux_readability_index(main, text):
Expand Down
2 changes: 2 additions & 0 deletions wordless/wl_profiler.py
Original file line number Diff line number Diff line change
Expand Up @@ -365,6 +365,7 @@ def __init__(self, parent):
_tr('wl_profiler', "Coleman's Readability Formula"),
_tr('wl_profiler', 'Dale-Chall Readability Formula'),
_tr('wl_profiler', 'Dale-Chall Readability Formula (New)'),
_tr('wl_profiler', "Danielson-Bryan's Readability Formula"),
_tr('wl_profiler', 'Devereaux Readability Index'),
_tr('wl_profiler', 'Flesch-Kincaid Grade Level'),
_tr('wl_profiler', 'Flesch Reading Ease'),
Expand Down Expand Up @@ -1183,6 +1184,7 @@ def run(self):
wl_measures_readability.colemans_readability_formula(self.main, text),
wl_measures_readability.dale_chall_readability_formula(self.main, text),
wl_measures_readability.dale_chall_readability_formula_new(self.main, text),
wl_measures_readability.danielson_bryans_readability_formula(self.main, text),
wl_measures_readability.devereux_readability_index(self.main, text),
wl_measures_readability.flesch_kincaid_grade_level(self.main, text),
wl_measures_readability.flesch_reading_ease(self.main, text),
Expand Down
4 changes: 4 additions & 0 deletions wordless/wl_settings/wl_settings_default.py
Original file line number Diff line number Diff line change
Expand Up @@ -1749,6 +1749,10 @@ def init_settings_default(main):
'variant': '2'
},

'danielson_bryans_readability_formula': {
'variant': '1'
},

're': {
'variant_nld': 'Douma',
'variant_spa': 'Fernández Huerta'
Expand Down
26 changes: 23 additions & 3 deletions wordless/wl_settings/wl_settings_measures.py
Original file line number Diff line number Diff line change
Expand Up @@ -59,6 +59,19 @@ def __init__(self, main):
self.group_box_colemans_readability_formula.layout().addWidget(self.combo_box_colemans_readability_formula_variant, 0, 1)
self.group_box_colemans_readability_formula.layout().setColumnStretch(2, 1)

# Danielson-Bryan's Readability Formula
self.group_box_danielson_bryans_readability_formula = QGroupBox(self.tr("Danielson-Bryan's Readability Formula"), self)

self.label_danielson_bryans_readability_formula_variant = QLabel(self.tr('Variant:'), self)
self.combo_box_danielson_bryans_readability_formula_variant = wl_boxes.Wl_Combo_Box(self)

self.combo_box_danielson_bryans_readability_formula_variant.addItems(['1', '2'])

self.group_box_danielson_bryans_readability_formula.setLayout(wl_layouts.Wl_Layout())
self.group_box_danielson_bryans_readability_formula.layout().addWidget(self.label_danielson_bryans_readability_formula_variant, 0, 0)
self.group_box_danielson_bryans_readability_formula.layout().addWidget(self.combo_box_danielson_bryans_readability_formula_variant, 0, 1)
self.group_box_danielson_bryans_readability_formula.layout().setColumnStretch(2, 1)

# Flesch Reading Ease
self.group_box_re = QGroupBox(self.tr('Flesch Reading Ease'), self)

Expand Down Expand Up @@ -101,11 +114,12 @@ def __init__(self, main):
self.setLayout(wl_layouts.Wl_Layout())
self.layout().addWidget(self.group_box_bormuths_gp, 0, 0)
self.layout().addWidget(self.group_box_colemans_readability_formula, 1, 0)
self.layout().addWidget(self.group_box_re, 2, 0)
self.layout().addWidget(self.group_box_wstf, 3, 0)
self.layout().addWidget(self.group_box_danielson_bryans_readability_formula, 2, 0)
self.layout().addWidget(self.group_box_re, 3, 0)
self.layout().addWidget(self.group_box_wstf, 4, 0)

self.layout().setContentsMargins(6, 4, 6, 4)
self.layout().setRowStretch(4, 1)
self.layout().setRowStretch(5, 1)

def load_settings(self, defaults = False):
if defaults:
Expand All @@ -119,6 +133,9 @@ def load_settings(self, defaults = False):
# Coleman's Readability Formula
self.combo_box_colemans_readability_formula_variant.setCurrentText(settings['colemans_readability_formula']['variant'])

# Danielson-Bryan's Readability Formula
self.combo_box_danielson_bryans_readability_formula_variant.setCurrentText(settings['danielson_bryans_readability_formula']['variant'])

# Flesch Reading Ease
self.combo_box_re_variant_nld.setCurrentText(settings['re']['variant_nld'])
self.combo_box_re_variant_spa.setCurrentText(settings['re']['variant_spa'])
Expand All @@ -133,6 +150,9 @@ def apply_settings(self):
# Coleman's Readability Formula
self.settings_custom['colemans_readability_formula']['variant'] = self.combo_box_colemans_readability_formula_variant.currentText()

# Danielson-Bryan's Readability Formula
self.settings_custom['danielson_bryans_readability_formula']['variant'] = self.combo_box_danielson_bryans_readability_formula_variant.currentText()

# Flesch Reading Ease
self.settings_custom['re']['variant_nld'] = self.combo_box_re_variant_nld.currentText()
self.settings_custom['re']['variant_spa'] = self.combo_box_re_variant_spa.currentText()
Expand Down

0 comments on commit 0b086b0

Please sign in to comment.