Последние пару дней я был погружен в задачу красивого ографления текстов. Идею я поймал, когда прочитал пост про граф ключевых слов для статей с сайта от alexwolf.
Мне же захотелось создать такие графы для произвольных текстов и посмотреть, насколько красивыми и интересными они могут быть. Не уверен, что все, кто меня сейчас читают, разделяют мое программистское понимание красоты, но все равно хочу сказать, что по-моему получилось красиво и забавно.
Чтобы не городить свой велосипед для рисования графов, я использовал пакет GraphViz (можно также скачать тут). Эти же утилиты использует Doxygen для рисования красивых графов.
Для подготовки данных для графа и упрощения работы я написал на C++ программку (CodeGraphMFC.rar, CodeGraphMFC_Sources.rar).
По ссылкам можно скачать и программу и исходные тексты (для VisualStudio 2005).
Интерфейс программы выглядит так:
В нее можно вставить любой текст, нажать «Create graph» и она создаст граф зависимых слов этого текста.
Зависимые слова — это слова, находящиеся близко друг к другу в тексте (максимальную дальность можно выбрать в интерфейсе). Также можно выбрать один из нескольких методов создания графа.
Основное правило: чем ближе вершины результирующего графа друг к другу, тем чаще слова в этих вершинах встречаются вместе в тексте.
Программа работает только если установлен GraphViz и прописан правильно путь к нему, а также должна быть прописана дефолтная программа для открывания gif файлов, т.к. именно gif-ы создаются в результате.
Из ограничений: почему-то этот пакет жутко тормозит и вылетает на больших количествах вершин графа. Поэтому максимальное число разных близких слов, на которых все работает — около 1000.
Сегодня программа была уже готова и я немного с ней поигрался. Первые результаты в виде картинок можно посмотреть тут: Web album.
Например, красивый граф стихотворения Пушкина «Анчар»:
Вообще, надо сказать, что из русских стихов получаются красивые графы. Из английских не так красиво (правда там автор — далеко не Пушкин):
А вот как выглядит граф объявления небольшого класса (C++):
А вот пара достаточно сложных функций на пару экранов (С++):
А вот красивый граф одного из моих постов про коммунизм:
Из интересных наблюдений: красивые графы получаются для текстов, где очень мало повторяющихся слов, либо наоборот, где очень много повторов. При этом для поэзии, например, самые красивые графы получались для самых красивых стихов. В статьях тоже похожая ситуация: граф куска текста пользовательского соглашения выглядел пугающе, а легкие и простые статьи отображаются в красивые графы.
Изначально я хотел сравнить графы для одинаковой программы, написаной на нескольких разных языках программирования, но пока не нашел ничего, сложнее «Hello, World», а самому писать неохота.
Есть у кого-нибудь такие программы для разных языков хотя бы строк на 30?
Буду признателен, если кто-нибудь скачает программу и нагенерит своих красивых графов.
Или же посоветует, как дальше можно развить эту идею и что еще заграфить и сравнить?
Мне же захотелось создать такие графы для произвольных текстов и посмотреть, насколько красивыми и интересными они могут быть. Не уверен, что все, кто меня сейчас читают, разделяют мое программистское понимание красоты, но все равно хочу сказать, что по-моему получилось красиво и забавно.
Чтобы не городить свой велосипед для рисования графов, я использовал пакет GraphViz (можно также скачать тут). Эти же утилиты использует Doxygen для рисования красивых графов.
Для подготовки данных для графа и упрощения работы я написал на C++ программку (CodeGraphMFC.rar, CodeGraphMFC_Sources.rar).
По ссылкам можно скачать и программу и исходные тексты (для VisualStudio 2005).
Интерфейс программы выглядит так:
From TextGraphs |
В нее можно вставить любой текст, нажать «Create graph» и она создаст граф зависимых слов этого текста.
Зависимые слова — это слова, находящиеся близко друг к другу в тексте (максимальную дальность можно выбрать в интерфейсе). Также можно выбрать один из нескольких методов создания графа.
Основное правило: чем ближе вершины результирующего графа друг к другу, тем чаще слова в этих вершинах встречаются вместе в тексте.
Программа работает только если установлен GraphViz и прописан правильно путь к нему, а также должна быть прописана дефолтная программа для открывания gif файлов, т.к. именно gif-ы создаются в результате.
Из ограничений: почему-то этот пакет жутко тормозит и вылетает на больших количествах вершин графа. Поэтому максимальное число разных близких слов, на которых все работает — около 1000.
Сегодня программа была уже готова и я немного с ней поигрался. Первые результаты в виде картинок можно посмотреть тут: Web album.
Например, красивый граф стихотворения Пушкина «Анчар»:
Вообще, надо сказать, что из русских стихов получаются красивые графы. Из английских не так красиво (правда там автор — далеко не Пушкин):
А вот как выглядит граф объявления небольшого класса (C++):
А вот пара достаточно сложных функций на пару экранов (С++):
А вот красивый граф одного из моих постов про коммунизм:
Из интересных наблюдений: красивые графы получаются для текстов, где очень мало повторяющихся слов, либо наоборот, где очень много повторов. При этом для поэзии, например, самые красивые графы получались для самых красивых стихов. В статьях тоже похожая ситуация: граф куска текста пользовательского соглашения выглядел пугающе, а легкие и простые статьи отображаются в красивые графы.
Изначально я хотел сравнить графы для одинаковой программы, написаной на нескольких разных языках программирования, но пока не нашел ничего, сложнее «Hello, World», а самому писать неохота.
Есть у кого-нибудь такие программы для разных языков хотя бы строк на 30?
Буду признателен, если кто-нибудь скачает программу и нагенерит своих красивых графов.
Или же посоветует, как дальше можно развить эту идею и что еще заграфить и сравнить?