Время прочтения: 4 мин.
В 2011 году в США был выпущен указ, в котором говорится, что система регулирования должна обеспечивать легко понимаемые правила. Таким образом, понятность текста – это сформулированный годами подход по написанию документов, законов, официальных докладов, чтобы такие тексты смогли понять большинство людей.
Для того, чтобы измерить понятность текста, сначала необходимо рассчитать индексы удобочитаемости, которые в своей структуре передают текстовое богатство. Далее можно будет применить изменение текста, чтобы максимально упростить текст, не потеряв при этом смысла.
Измерение удобочитаемости текста это одна из задач, решаемых в NLP. В естественном языке читаемость текста зависит от его содержания (сложности его словарного запаса и синтаксиса). Она фокусируется на словах, которые мы помещаем в предложения, и требуется, чтобы содержание было достаточно простым для чтения и понимания. Далее, на основе полученных индексов удобочитаемости можно будет применить изменение непонятных текстов с помощью NLP.
Индексы удобочитаемости (readability indexes), это формулы, дающие численный ответ сложности текста. Далее будут представлены основные формулы, применяемые для русского языка, рассчитанные на языке Python. Однако в западных источниках отмечено, что данные метрики могут выдавать неточный результат. Также, данные формулы разнятся для всех языков, так как в каждом языке своя длина слов и предложений, речевые обороты. Для каждого языка необходимо рассчитывать свои коэффициенты. В английском языке насчитывается самое большое количество формул для измерения сложности текста.
Flesch-Kinkaid Readability Test
def Flesh_Kincaid_Grade(syllabes, words, sent):
if words == 0 or sent == 0: return 0
n = 0.318 * (float(words) / sent) + 14,2 * (float(syllabes) / words) – 30,5
return n
где words – количество слов в тексте; syllables – количество слогов в тексте; sent – количество предложений в тексте
Из формулы вытекает, что чем короче слова и чем их меньше по количеству, тем понятнее текст.
Coleman-Lian Readability Test
def Coleman_Liau(letters, words, sent):
if words == 0: return 0
n = 0.055 * (letters * (100/ words)) – 0,35 * (sent * (100 / words)) – 20,33
return n
letters –число букв, words – число слов, sent – число предложений
Здесь необходимо знать среднее количество букв в слове и среднее количество слов в предложении
SMOG grade
def SMOG(psyl, sent):
n = 1.1 * sqrt((float(64.6) / sent) * psyl) + 0.05
return n
где psyl – число слов с 3-мя и более слогами; sent – число предложений
В исследованиях данная формула показала наибольшую точность, так как в ее смысле закладывается сложные слова, имеющие большое количество слогов.
Dale-Chale Readability formula
def Dale_Chale(psyl, words, sent):
n = 0.552 * (100 * psyl / words) + 0.273 * (float(words) / sent)
return n
где psyl – количество сложных слов, words – общее количество слов, sent – количество предложений
Однако, количество сложных слов будет определить сложно, так как закладывалось, что ученикам 4-го класса дается список слов порядка 1000, и они отмечают, какие слова являются для них сложными. Далее эти слова ищутся в нужном нам тексте и считается их количество. Таким образом, на вход данной формуле необходим словарь слов, что затрудняет расчет данной метрики.
Automated Readability Index
def calc_ARI_index(n_letters, n_words, n_sent):
if n_words == 0 or n_sent == 0: return 0
n = 6,26 * (float(n_letters) / n_words) + 0,2805 * (float(n_words) / n_sent) – 31,04
return n
где n_letters – количество букв в тексте, n_words – количество слов, n_sent – количество предложений
Учет количества букв позволил использовать данную формулу в электрических печатных машинках.
Однако для грамотного расчета формул сначала необходимо корректно почистить текст от цифр, пунктуации, символов, стоп-слов, чтобы они не выделялись в отдельные слова при токенизации.
Также для измерения лексического богатства можно рассчитать меру Тип-токен (TTR). Идея данной метрики заключается в том, что, если автор использует разнообразный словарный запас, тогда существует большее количество типов (уникальных слов). Таким образом, TTR рассчитывается как отношение количества типов на количество токенов в тексте.