Программистское графоманство

Последние пару дней я был погружен в задачу красивого ографления текстов. Идею я поймал, когда прочитал пост про граф ключевых слов для статей с сайта.
Мне же захотелось попробовать создать такие графы для произвольных текстов и посмотреть, насколько красивыми и интересными могут быть такие графы. Не уверен, что все, кто меня сейчас читают, разделяют мое программистское понимание красоты, но все равно хочу сказать, что по-моему получилось красиво и забавно.
Чтобы не городить свой велосипед для рисования графов, я использовал пакет GraphViz. Эти же утилиты использует Doxygen для рисования красивых графов.
Для подготовки данных для графа и упрощения работы я написал программку (CodeGraphMFC.rar, CodeGraphMFC_Sources.rar), которая выглядит так:

From TextGraphs

В нее можно вставить любой текст, нажать “Create graph” и она создаст граф зависимых слов этого текста.
Зависимые слова - это слова, находящиеся близко друг к другу в тексте (максимальную дальность можно выбрать в интерфейсе). Можно выбрать несколько методов создания графа.


Основное правило: чем ближе вершины результирующего графа друг к другу, тем чаще слова в этих вершинах встречаются вместе в тексте.
Программа работает только если установлен GraphViz и прописан правильно путь к нему, а также должна быть прописана дефолтная программа для открывания gif файлов, т.к. именно gif-ы создаются в результате.
Из ограничений: почему-то этот пакет жутко тормозит и вылетает на больших количествах вершин графа. Поэтому максимальное число разных близких слов, на которых все работает - около 1000.
Сегодня программа была уже готова и я немного с ней поигрался. Первые результаты в виде картинок можно посмотреть тут: Web album.
Например, красивый граф стихотворения Пушкина “Анчар”:


Вообще, надо сказать, что из русских стихов получаются красивые графы. Из английских не так красиво (правда там автор - далеко не Пушкин):

А вот как выглядит граф объявления небольшого класса (C++):

А вот пара достаточно сложных функций на пару экранов (С++):

А вот красивый граф одного из моих предыдущих постов про коммунизм:

Из интересных наблюдений: красивые графы получаются для текстов, где очень мало повторяющихся слов, либо наоборот, где очень много повторов. При этом для поэзии, например, на мой взгляд самые красивые графы получались для самых красивых стихов. В статьях тоже похожая ситуация: граф куска текста пользовательского соглашения выглядел пугающе, а легкие и простые статьи отображаются в красивые графы.
Изначально я хотел сравнить графы для одинаковой программы, написаной на нескольких разных языках программирования, но пока не нашел ничего, сложнее “Hello, World”, а самому писать неохота. Есть у кого-нибудь такие программы для разных языков хотя бы строк на 30?
Буду признателен, если кто-нибудь скачает программу и нагенерит своих красивых графов :)
Или же посоветует, как дальше можно развить эту идею и что еще заграфить и сравнить?
P.S.:
К сожалению сегодня, пока тестировал эту программку, мне пришел в голову безумный алгоритм, который позволит программе писать автоматически стихи :). Теперь я разрываюсь - хочется и эту еще погонять и новой программой заняться.

Оригинал и комментарии

4 комментариев к Программистское графоманство

  • Виталий Колесников

    Ну, Пушкин писал в-основном ямбом и хореем, а про английских поэтов мне ничего не известно. :)
    Кстати, как будет выглядеть “Евгений Онегин”, написанный “онегинской” строфой?

  • ingahilt

    очень интересно, есть же светлые головы!

    мне, например, недавно прислали стихи, слова которых были заменены цифрами:

    (читать вслух, с выражением)

    Пушкин
    17 30 48
    140 10 01
    126 138
    140 3 501

    Маяковский
    2 46 38 1
    116 14 20!
    15 14 21
    14 0 17

    Есенин
    14 126 14
    132 17 43.
    16 42… 511
    704 83.
    170! 16 39
    514 700 142
    612 349
    17 114 02

    Веселые:
    2 15 42
    42 15
    37 08 5
    20 20 20!
    7 14 105
    2 00 13
    37 08 5
    20 20 20!

    Грустные:
    511 16
    5 20 337
    712 19
    2247

    Частушки:
    117 117
    19 9 5!
    117 117
    48 35

  • Пешк

    Пожалуйста, выложите исходники где-нибудь еще раз, а то на народе они уже недоступны.

Ответить

 

 

 

Вы можете использовать эти HTML тэги

<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>