Pull to refresh

Программистская графофилия

Lumber room
Последние пару дней я был погружен в задачу красивого ографления текстов. Идею я поймал, когда прочитал пост про граф ключевых слов для статей с сайта от alexwolf.
Мне же захотелось создать такие графы для произвольных текстов и посмотреть, насколько красивыми и интересными они могут быть. Не уверен, что все, кто меня сейчас читают, разделяют мое программистское понимание красоты, но все равно хочу сказать, что по-моему получилось красиво и забавно.


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

В нее можно вставить любой текст, нажать «Create graph» и она создаст граф зависимых слов этого текста.
Зависимые слова — это слова, находящиеся близко друг к другу в тексте (максимальную дальность можно выбрать в интерфейсе). Также можно выбрать один из нескольких методов создания графа.
Основное правило: чем ближе вершины результирующего графа друг к другу, тем чаще слова в этих вершинах встречаются вместе в тексте.
Программа работает только если установлен GraphViz и прописан правильно путь к нему, а также должна быть прописана дефолтная программа для открывания gif файлов, т.к. именно gif-ы создаются в результате.
Из ограничений: почему-то этот пакет жутко тормозит и вылетает на больших количествах вершин графа. Поэтому максимальное число разных близких слов, на которых все работает — около 1000.

Сегодня программа была уже готова и я немного с ней поигрался. Первые результаты в виде картинок можно посмотреть тут: Web album.

Например, красивый граф стихотворения Пушкина «Анчар»:


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


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


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


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


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

Изначально я хотел сравнить графы для одинаковой программы, написаной на нескольких разных языках программирования, но пока не нашел ничего, сложнее «Hello, World», а самому писать неохота.
Есть у кого-нибудь такие программы для разных языков хотя бы строк на 30?

Буду признателен, если кто-нибудь скачает программу и нагенерит своих красивых графов.
Или же посоветует, как дальше можно развить эту идею и что еще заграфить и сравнить?
Tags:
Hubs:
Total votes 80: ↑63 and ↓17 +46
Views 582
Comments Comments 33