Анализ текста в Mathematica: выделение цитат, цветов и многое другое... на примере книги "Вспомнить все" Арнольда Шварценеггера
Общее количество использованных в посте встроенных функций или символов: 122
Список имен используемых встроенных функций и символов в порядке их появления в коде:
Short | Set (=) | Import | FileNameJoin | List ({...}) | NotebookDirectory | StringLength | Plus (+) | StringCount | Tally | Characters | StringReplace | Thread | Rule (->, ->) | CharacterRange | Sort | Function (&) | Less (<) | Part ([[…]]) | ToCharacterCode | Slot (#) | Panel | Rotate | BarChart | Span (;;) | All | ChartLabels | Placed | Map (/@) | Style | Bold | Axis | Times (*, ×) | Degree | ColorFunction | ColorData | ImageSize | GridLinesStyle | Dashed | PlotRangePadding | BarSpacing | Pi (π) | Power (^) | CompoundExpression (;) | Cases | Blank (_) | Condition (/;) | Pattern (:) | Greater (>) | ReplaceAll (/.) | FullForm | DeleteCases | StringSplit | RegularExpression | StringJoin (<>) | Length | ListLogPlot | Joined | True | PlotRange | AspectRatio | PlotStyle | Thick | Frame | FrameLabel | FontFamily | ListLogLogPlot | SetDelayed (:=) | Block | StringPosition | Alternatives (|) | StringTake | StringDrop | Select | Nearest | Grid | Transpose | Background | None | Orange | LightGray | ItemStyle | Directive | Alignment | Left | Dividers | White | Red | Green | Blue | Yellow | Black | Gray | Pink | Brown | Flatten | Partition | Riffle | Mean | Graphics | EdgeForm | Rectangle | Spacings | TextAlignment | Center | With | Increment (++) | Dynamic | Button | If | Equal (==) | Appearance | ItemSize | Pane | Image | RawArray | ColorSpace | Interleaving | Join | PlotLegends | LineLegend | Above
Список имен используемых встроенных функций и символов в порядке их появления в коде:
Short | Set (=) | Import | FileNameJoin | List ({...}) | NotebookDirectory | StringLength | Plus (+) | StringCount | Tally | Characters | StringReplace | Thread | Rule (->, ->) | CharacterRange | Sort | Function (&) | Less (<) | Part ([[…]]) | ToCharacterCode | Slot (#) | Panel | Rotate | BarChart | Span (;;) | All | ChartLabels | Placed | Map (/@) | Style | Bold | Axis | Times (*, ×) | Degree | ColorFunction | ColorData | ImageSize | GridLinesStyle | Dashed | PlotRangePadding | BarSpacing | Pi (π) | Power (^) | CompoundExpression (;) | Cases | Blank (_) | Condition (/;) | Pattern (:) | Greater (>) | ReplaceAll (/.) | FullForm | DeleteCases | StringSplit | RegularExpression | StringJoin (<>) | Length | ListLogPlot | Joined | True | PlotRange | AspectRatio | PlotStyle | Thick | Frame | FrameLabel | FontFamily | ListLogLogPlot | SetDelayed (:=) | Block | StringPosition | Alternatives (|) | StringTake | StringDrop | Select | Nearest | Grid | Transpose | Background | None | Orange | LightGray | ItemStyle | Directive | Alignment | Left | Dividers | White | Red | Green | Blue | Yellow | Black | Gray | Pink | Brown | Flatten | Partition | Riffle | Mean | Graphics | EdgeForm | Rectangle | Spacings | TextAlignment | Center | With | Increment (++) | Dynamic | Button | If | Equal (==) | Appearance | ItemSize | Pane | Image | RawArray | ColorSpace | Interleaving | Join | PlotLegends | LineLegend | Above
Некоторое время назад в Интернете на сайте журнала Esquire я встретил небольшую красивую статью о цветах, которые использовали авторы в своих произведениях. Ниже вы можете увидеть одну из созданных в статье интерактивных визуализаций. Саму статью можно увидеть перейдя по ссылке.
Само собой, у меня появилось желание создать программу в Mathematica, которая позволила бы создавать подобные (и не только) объекты для любых произведений, которые мне интересны.
В качестве интересующего меня произведения я возьму книгу Арнольда Шварценеггера (Arnold Schwarzenegger) “Вспомнить все” (Total Recall). Выбрал я ее по многим причинам, на которых я сейчас не буду останавливаться.
Вступительные слова...
Что-ж, давайте загрузим текст в Mathematica:
закрыть
Перед тем, как приступить к основной работе, можно немного развлечься и произвести разнообразный анализ текста. Для начала, давайте найдем сколько символов использовано в тексте:
закрыть
Теперь узнаем из скольких абзацев состоит текст:
закрыть
А также сколько в тексте предложений
закрыть
Теперь найдем количество вхождений каждого из символов, предварительно сделав все буквы строчными:
закрыть
Отсортируем символы:
закрыть
Теперь построим их распределение:
закрыть
Также отобразим только те символы, которые встречаются часто (например, больше 1000 раз):
закрыть
Теперь можем найти самые распространенные слова, предлоги и пр.:
закрыть
Можно легко определить количество разнообразных слов и предлогов, которые использованы в тексте:
закрыть
Теперь выведем список 200 самых часто встречающихся слов и предлогов:
закрыть
или их распределение в логарифмическом:
закрыть
или дважды логарифмическом масштабе:
закрыть
Выделение цитат, создание цветового портрета произведения
Итак, перейдем к реализации задуманного. Для начала создадим функцию, которая искала бы определенное слово в тексте:
закрыть
закрыть
Теперь создадим функцию, выделяющую предложение, которое содержит слово с заданной позицией. Для этого нам понадобится знать те позиции, на которых находятся точки:
закрыть
Теперь можем создать саму функцию:
закрыть
Она сама по себе интересна, так как позволяет выцеплять из всего текста предложения по интеерсующей тематике, скажем, если мы хотим, можно выцепить все предложения со словом “терминатор”:
закрыть
или “слай”:
закрыть
После того, как эта функция создана, можно приступить к выделению цветов. Для начала, создадим правила цветов:
закрыть
Теперь выделим места в тексте, содержащие упоминания о цвете:
закрыть
Отсортируем их в порядке появления:
закрыть
Отобразим карту цветов, как на сайте Esquire:
закрыть
Добавим возможность увидеть предложение по нажатию на соответствующий цвет:
закрыть
Аналогично можно сделать с любыми объектами:
закрыть
закрыть
закрыть
Реализация алгоритмов для оригинального текста
Само собой интересно посмотреть на аналогичные вещи, только для оригинального текста. Приведу тот же текст, чтобы не путать, только все теперь будет относиться к оригиналу. При этом будет произведено сравнение оригинала и перевода.
Загрузим текст в Mathematica:
закрыть
Найдем сколько символов использовано в тексте:
закрыть
Узнаем из скольких абзацев состоит текст:
закрыть
Количество предложений в тексте:
закрыть
Количество вхождений каждого из символов, отсортируем их и построим их распределение:
закрыть
закрыть
закрыть
Отобразим только те символы, которые встречаются больше 1000 раз:
закрыть
Самые распространенные слова, предлоги и пр.:
закрыть
Количество разнообразных слов и предлогов, которые использованы в оригинальном тексте:
закрыть
Список 200 самых часто встречающихся слов и предлогов:
закрыть
их распределение в логарифмическом:
закрыть
и дважды логарифмическом масштабе:
закрыть
Функция, которая ищет определенное слово в тексте:
закрыть
закрыть
Функция, выделяющую предложение, которое содержит слово с заданной позицией:
закрыть
закрыть
Выцепим все предложения со словом “terminator”:
закрыть
или “sly”:
закрыть
Выделим цвета:
закрыть
закрыть
закрыть
закрыть
закрыть
Пример с транспортом:
закрыть
закрыть
закрыть
Блог принадлежит “Русскоязычной поддержке Wolfram Mathematica"©
При любом использовании материалов блога, ссылка на блог обязательна.
Создано с помощью Wolfram Mathematica 9
При любом использовании материалов блога, ссылка на блог обязательна.
Создано с помощью Wolfram Mathematica 9
Комментариев нет:
Отправить комментарий