Когда я впервые прочитал роман И.Ильфа и Е.Петрова «12 стульев», мне бросилась в глаза только одна скрытая цитата, явно намекающая на библейский сюжет. В эпизоде, где Бендер и Воробьянинов садятся на агитпароход «Сеятель», представляясь художниками, Бендер говорит про Ипполита Матвеевича «Это со мной мальчик». В ответ на удивление «мальчиком» пассажиров агитпарохода, Бендер поясняет: «Кто скажет, что это девочка, пусть первый бросит в меня камень». Здесь авторы романа явно отсылают читателя к прецеденту «Христос и грешница».

Мне стало интересно с помощью Python проверить, есть ли в романе другая связь с библейскими сюжетами и христианскими символами.  Я начал с попытки проанализировать группировку слов, смыслов и понятий вокруг числа 12. Понятно, что весь роман построен на поиске гарнитура именно из 12 стульев, но само это число, как мне показалось, взято авторами не просто как количество предметов. Учеников у Христа было именно 12. В Евангелии от Матфея (19:28) Христос сказал апостолам: «Истинно говорю вам, что вы, последовавшие за Мною, — в пакибытии, когда сядет Сын Человеческий на престоле славы Своей, сядете и вы на двенадцати престолах судить двенадцать колен Израилевых». Сами число 12 неоднократно встречается в библейских текстах. 12 лет было дочери Иаира, воскрешенной Христом в Евангелии от Марка. После «чуда насыщения» осталось 12 коробов рыб и хлебов. И так далее.

Я скачал в интернете текст романа «12 стульев» (Гослитиздат 1961 год) и синодальный перевод Библии с сайта RoyalLib.com. Для извлечения контекста я использовал regular expressions, pymorphy3 для лемматизации и морфологического анализа. Collections.Counter для для подсчета частотности слов в заданном контекстном окне.

for sent in sentences:
        for pattern in number_patterns.get(str(number), []):
            if re.search(pattern, sent, re.IGNORECASE):
                tokens = re.findall(r'[а-яА-ЯЁё0-9]+', sent)
                for i, token in enumerate(tokens):
                    if re.match(pattern, token, re.IGNORECASE):
                        start = max(0, i - window)
                        end = min(len(tokens), i + window + 1)
                        context = ' '.join(tokens[start:end])
                        contexts.append({
                            'number': number,
                            'sentence': sent,
                            'context': context,
                            'position': i
                        })
    return contexts

Вот какие понятия встречаются чаще всего в контексте рядом с числом 12:

Контекст числа 12 в романе и в Библии
Контекст числа 12 в романе и в Библии

Анализ показывает, что в Библии «12» окружено сакральной лексикой: колено (12 колен Израилевых), жертва, левит, серебро, золото. Это число совершенства и божественного порядка. В романе Ильфа и Петрова «12» окружено предельно бытовой лексикой: мебель, стул, бриллиант, миллион, сокровище. С одной стороны сакральное число «обесценивается» до уровня погони за бриллиантами. С другой стороны здесь виден намек на паломничество и поиск этих бриллиантов как поиск высшего смысла и истины. Правда, участники этого паломничества предельно далеки от понимания духовности.

Далее я реши вернуться к прямой речи Бендера и посмотреть, использует ли Остап религиозную лексику и можно ли из его слов выделить библейские цитаты. С помощью кода я выделил глаголы речи, чтобы точно найти все, что говорил герой и далее проверил следующие 200 символов после реплики.

pattern1 = r'-\s*([^-\n]+?)\s*-\s*(?:сказал|промолвил|воскликнул|ответил|заметил|продолжил|спросил)\s+Бендер'
speeches = []
        for pattern in [pattern1, pattern2, pattern3]:
        matches = re.findall(pattern, text, re.IGNORECASE | re.DOTALL)
        speeches.extend(matches)
context_start = text.find(dialogue)
        if context_start != -1:
            context = text[context_start:context_start + len(dialogue) + 200]
            if re.search(r'Бендер|Остап', context, re.IGNORECASE):
                if dialogue not in speeches:
                    speeches.append(dialogue)

В отдельный словарь я собрал 37 религиозных терминов для анализа. И провел поиск сочетаемости.

Что получилось.

В речи Бендера:

Найдено 242 реплики

Религиозных терминов: 11 употреблений

Уникальных терминов: 7

В Библии:

Религиозных терминов: 16021 употребление

Бендер использует религиозную лексику крайне экономно, всего 0.07% от всех слов в его репликах.

Здесь гипотеза не подтвердилась. Найти библейские цитаты или даже квазицитаты просто перебором сакральных терминов не удалось. Даже самый очевидный пример про Христа и грешницу из начала статьи этот алгоритм не вскрыл.

Зато этот прием позволил пересмотреть речь других персонажей – Эллочки и Воробьянинова. С помощью регулярных выражений удалось «вытащить» их реплики из сотен страниц текста. Авторы в романе прямо указывают, что Эллочка «обходилась тридцатью словами». Но анализ это опровергает – у Эллочки 318 уникальных слов. А вот в репликах Ипполита Матвеевича 2938 уникальных слов. Из них 1179 слов (40%) общие с молитвой «Отче наш». Ипполит Матвеевич — сын священника, бывший предводитель дворянства. Его лексикон органично включает в себя слова из молитвы (господь, воля, имя, небеса, хлеб, должник). Для него это не просто слова, это культурный код его семьи и прошлого, который он, правда, использует теперь для меркантильных целей.

Очевидно, тест романа наполнен библейскими мотивами, которые прямыми цитатами из Евангелия не являются. Скорее, они представляют средства выражения комического и саркастического в виде языкового обыгрывания. Выявить эти скрытые цитаты инструментами цифрового анализа не так просто и для прочтения и улавливания этих мотивов нужен, скорее, вдумчивый читатель, чем аналитик.