Построение приложения для визуализации текста и его анализа

Разработка приложения для представления облака слов в виде волны с помощью платформы Eclipse и других программных инструментов с открытым исходным кодом

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

2 апреля 2013 г. - обновлены ссылки на продукты IBM InfoSphere Streams и IBM InfoSphere BigInsights в разделах: Как извлечь больше пользы из текста и Ресурсы > Научиться.

Сами Салкосуо, архитектор программного обеспечения, IBM

Сами Салкосуо (Sami Salkosuo) работает в IBM с 1999 г. Он главным образом занимается Java-программированием и является Sun-сертифицированным Java-программистом, IBM-сертифицированным разработчиком решений для XML и подобных технологий, и IBM-сертифицированным разработчиком решений для IBM WebSphere Portal. Помимо технологии Java, у него также есть опыт работы с Python, Fortran, LabVIEW, Visual Basic, LISP, Perl и PHP.



17.09.2013

Как извлечь больше пользы из текста

Отдачу от текста можно повысить за счет извлечения из него ключевой информации и заложенных в него концепций. Платформа IBM Big Data поддерживает расширенные возможности анализа текста (в том числе комплект инструментов с акселераторами, IDE-средой и декларативным языком AQL), которые позволяют разработчикам осуществлять синтаксический разбор текста, находить элементы, являющиеся целью поиска, понимать их смысл и извлекать этот смысл в структурированной форме для использования в других приложениях. Расширенные возможности анализа текста доступны как функции продуктов IBM InfoSphere Streams и IBM InfoSphere BigInsights. Ознакомьтесь с дополнительной информацией: InfoSphere Streams и InfoSphere BigInsights.

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

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

Рисунок 1. Облако слов
Word cloud generated from the letter from the President and CEO in the IBM 2011 Annual Report, using IBM Many Eyes

При генерации облака слов, показанного на рис. 1, я с помощью продукта IBM Many Eyes (см. раздел Ресурсы) проанализировал письмо от президента и генерального директора IBM, предваряющее итоговый отчет IBM за 2011 год.

Описываемое в этой статье приложение генерирует волну слов— т. е. осуществляет визуализацию текста в виде волны. Эта волна слов помещает слова с высоким рангом в левый верхний угол. На рис. 2 показан пример, в котором используется тот же текст, который был визуализирован на рис. 1:

Рисунок 2. Пример волны слов
Word wave that visualizes the same text that's visualized in Figure 1

Визуализация текста выявляет слова с высоким рангом. Анализ текста на основе визуализации предполагает, что слова с более высоким рангом в иерархии имеют более высокую важность. Для сравнения результаты визуализации двух текстов отображают рядом. Такое сравнение наиболее осмысленно, если контексты обоих текстов одинаковы или похожи. Например, сравнение текстов, описывающих стратегии двух компаний одной отрасли, выявило бы схожие и различные черты в приоритетах этих двух компаний.

На рис. 3 показан примерный набросок итогового сравнения двух текстов. Визуализация первого текста находится в верхней части, а визуализация второго текста — в нижней части. Слова с высоким рангом в обоих текстах находятся слева.

Рисунок 3. Набросок сравнения текстов в визуализации
Rough sketch of a final comparison of two texts

Цели данной статьи и приведенного в ней программного кода — продемонстрировать порядок решения следующих задач.

  • Разработка приложения с поддержкой командной строки для визуализации и сравнения текстов с использованием инструментов и библиотек с открытым исходным кодом.
  • Визуализация (как на рис. 2) заданного текста в виде волны слов.
  • Объединение двух визуализаций в одном изображении с целью сравнения и анализа.
  • Создание зрительно привлекательного видеоролика на основе визуализации

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

Для начала рассмотрим компоненты среды разработки.

Предварительные условия

Для выполнения описанных в этой статье шагов необходимо установить среду Eclipse и загрузить все необходимые библиотеки. При написании данной статьи использовались следующие версии.

Среда разработки

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

Eclipse

При использовании Eclipse в качестве IDE-среды вы сможете реализовать все возможности приложения Command Line Program.

Command Line Program

Command Line Program — это стороннее приложение типа Eclipse Rich Client Platform (RCP) для создания приложений с поддержкой командной строки. Это приложение использует модель программирования на основе плагинов Eclipse, включая функции и сайты обновления (ссылки на концепции Eclipse приведены в разделе Ресурсы). Приложение Command Line Program предоставляет инфраструктуру для приложений на основе командной строки, в том числе такие базовые функции, как анализ командной строки, команда помощи, команда журналирования и т. д. Наш план состоит в том, чтобы разработать программное обеспечение визуализации и анализа в виде команды расширения для приложения Command Line Program.

Processing и WordCram

Processing Б — это одновременно язык и среда разработки для создания изображений и анимаций. В качестве введения в Processing прочитайте статью Data visualization with Processing, Part 1 (Визуализация данных с помощью языка Processing. Часть 1). Язык Processing прост в изучении и использовании, но при этом с его помощью можно делать серьезные вещи (в разделе Ресурсы приведена ссылка на соответствующие примеры, размещенные на сайте OpenProcessing.org). WordCram — это настраиваемая библиотека для Processing, позволяющая создавать облака слов.

Monte Media Library

Monte Media Library — это простая и мощная библиотека с открытым исходным кодом для создания видеороликов и изображений, а также для их чтения и для манипулирования ими. Автор этой библиотеки (Werner Randelshofer) говорит на своем веб-сайте, что библиотека Monte Media Library является экспериментальным инструментом для его личных исследований. К счастью, он тем не менее решил опубликовать эту библиотеку, что позволяет использовать ее и другим людям. В отличие от других общедоступных библиотек, которые выглядят громоздкими и требуют нативного кода, библиотека Monte Media Library проста в использовании и представляет собой код типа pure Java.


Разработка приложения

Теперь, когда вы познакомились с соответствующими инструментами, можно приступать к разработке приложения под названием TextVisualizationAndAnalysis и к добавлению команды расширения с именем Compare к приложению Command Line Program.

Вам потребуется проект Command Line Program, чтобы вы могли разработать расширение для него. Загрузите проект CLP_Plugin_Main и импортируйте его в рабочее пространство Eclipse. Этот проект включает в себя исходный код для приложения Command Line Program и предоставляет пользователю точки расширения для разработки расширений в его собственных проектах.

Создание проекта подключаемого модуля

Чтобы разработать команду расширения для приложения Command Line Program, сначала создайте проект плагина, как и в случае любого другого проекта для расширения Eclipse:

  1. Создайте новый проект плагина и введите TextVisualizationAndAnalysis в качестве имени этого проекта.
  2. Выберите 3.5 or greater в качестве версии Eclipse и нажмите Next.
  3. Введите 0.0.1 в качестве номера версии, снимите флажок (если он установлен) This plug-in will make contributions to the UI и оставьте значения по умолчанию в остальных полях. Нажмите Next для перехода к заключительному экрану.
  4. Снимите флажок (если он установлен) Create a plug-in using one of the templates и нажмите Finish для создания проекта.
  5. Теперь ваш новый проект находится в рабочем пространстве Eclipse, а на экране открыт файл plugin.xml (если этого не произошло и если файл plugin.xml не существует в каталоге проекта, откройте файл META-INF/MANIFEST.MF).
  6. Откройте вкладку Dependencies и в разделе Required Plug-ins добавьте плагин com.softabar.clpp.application в свой проект. Этот плагин поставляется вместе с проектом Command Line Program Eclipse, который вы импортировали в рабочее пространство Eclipse.
  7. Перейдите на вкладку Extensions и добавьте расширение для точки расширения com.softabar.clpp.application.command, которая предоставлена приложением Command Line Program.
  8. Введите детали этого расширения. Введите compare в поле name. Введите Visualize and compare two text files в поле help. Введите textvisualizationandanalysis.Compare Command в поле class (см. рис. 4).
    Рисунок 4. Новая команда для приложения Command Line Program
    Screen capture of the Extension Element Details dialog

Класс будет создан позднее. Кроме того, позднее вы сможете добавить к своему плагину новую информацию (при необходимости).

Добавление требуемых библиотек

Чтобы создать команду Compare, добавьте к плагину следующие библиотеки:

  • core.jar из Processing
  • WordCram.jar, jsoup-1.3.3.jar и (при желании) cue.language.jar from WordCram
  • monte-cc.jar из the Monte Media Library

Для этого выполните следующие действия.

  1. Создайте каталог lib в проекте плагина и добавьте JAR-файлы в этот каталог.
  2. Чтобы добавить каталог lib к сборке плагина, откройте файл plugin.xml и выберите вкладку Build. Чтобы выбрать каталог lib в диалоговом окне Binary Build, поставьте флажок в одноименном контрольном окошке, (см. рис. 5).
    Рисунок 5. Двоичная сборка плагина (binary build)
    Screen capture of the Binary Build dialog
  3. Откройте вкладку Runtime и в диалоговом окне Classpath выберите Add для добавления библиотек в classpath плагина. На рис. 6 показано диалоговое окно Classpath со всеми добавленными библиотеками (за исключением cue.language.jar).
    Рисунок 6. Добавление библиотек в classpath плагина
    Screen capture of the Classpath dialog
  4. Сохраните файл plugin.xml.

Написание кода

Теперь можно приступать к написанию фактического кода команды. Исходный код для команды показан в следующих листингах (инструкции упаковки и импорта были специально удалены). Кроме того, необходимо добавить в файл plugin.xml определенную информацию, которую я покажу вам после того, как вы просмотрите все листинги с программным кодом.

Листинг 1 содержит декларацию класса и переменные.

Листинг 1. Декларация класса и переменные
public class CompareCommand extends PApplet implements ICommand, WordColorer {
    private static final long serialVersionUID = -188003470351748783L;
    private static CLPPLogger logger = CLPPLogger.getLogger(CompareCommand.class);
    private static boolean testing = true;
    private static boolean processingDone = false;
    private static String fileName;
    private static String outputDir;
    private static File inputTextFile1;
    private static File inputTextFile2;
    private static boolean drawTitle;
    private static String title1;
    private static String title2;
    private static boolean createVideo = false;
    private static int frameRate;
    private int frameWidth = 1280;
    private int frameHeight = 720;
    private int maxWords = 50;
    // font to be used
    private String font = "c:/windows/fonts/georgiab.ttf";
    private WordCram wordCram1;
    private PGraphics buffer1;
    private WordCram wordCram2;
    private PGraphics buffer2;
    // colors used in word waves

    private int[] colors = { 0x22992A, 0x9C3434, 0x257CCD, 0x950C9E };

В листинге 1 производится расширение класса processing.core.PApplet с целью использования методов Processing. Затем реализуются два интерфейса: com.softabar.clpp.program.ICommand и wordcram.WordColorer. Интерфейс com.softabar.clpp.program.ICommand предназначен для приложения Command Line Program; приложение Command Line Program осуществляет вызов этого интерфейса при исполнении нашей команды. Интерфейс wordcram.WordColorer манипулирует цветами облаков слов (или волн). Некоторые переменные декларированы как static, поскольку код Processing должен видеть их в процессе исполнения.

В листинге 2 показан метод execute() интерфейса ICommand:

Листинг 2. Метод execute()
public void execute(CommandLine commandLine, IProgramContext programContext) {
    testing = false;
    String inputFileStr = commandLine.getOptionValue("input1");
    inputTextFile1 = new File(inputFileStr);
    if (!inputTextFile1.exists()) {
      Output.error(inputFileStr + " does not exist.");
      return;
    }
    inputFileStr = commandLine.getOptionValue("input2");
    inputTextFile2 = new File(inputFileStr);
    if (!inputTextFile2.exists()) {
      Output.error(inputFileStr + " does not exist.");
      return;
    }
    drawTitle = commandLine.hasOption("title");
    fileName = commandLine.getOptionValue("filename", "results");
    outputDir = commandLine.getOptionValue("outputdir", ".");
    if (!outputDir.endsWith("/")) {
      outputDir = outputDir + "/";
    }
    title1 = commandLine.getOptionValue("title1", inputTextFile1.getName());
    title2 = commandLine.getOptionValue("title2", inputTextFile2.getName());
    String frate = commandLine.getOptionValue("framerate", "5");
    frameRate = Integer.parseInt(frate);
    createVideo = commandLine.hasOption("video");
    Output.println("Generating comparison word waves...");
    generateWordCloud();
    createVideo();
}

В листинге 2 метод execute() получает экземпляр org.apache.commons.cli.CommandLine как параметр; этот параметр получает опции для команды. Добавьте поддерживаемые опции в файл plugin.xml позже. После того как вы получили и настроили опции, создайте облако слов посредством вызова метода generateWordCloud(). Затем создайте видеоролик посредством вызова метода createVideo().

В листинге 3 показан метод generateWordCloud(), который осуществляет вызов метода main в классе processing.PApplet, а затем ждет, пока Processing/WordCram закончит рендеринг облака слов.

Листинг 3. Метод generateWordCloud()
private void generateWordCloud() {
    try {
      main(new String[] { "--present", getClass().getName() });
      // wait until word wave is finished
      while (!processingDone) {
        try {
          Thread.sleep(0, 1);
        } catch (InterruptedException e) {
        }
      }
    } catch (Exception e) {
      logger.error(e.toString(), e);
      Output.error(e.toString());
    }
}

В листинге 4 показан метод setup для генерации облаков слов.

Листинг 4. Метод setup()
public void setup() {
    if (testing) {
      logger.debug("testing");
      inputTextFile1 = new File("c:/CocaCola_MissionVisionValues.txt");
      inputTextFile2 = new File("c:/PepsiCo_MissionVisionValues.txt");
      outputDir = "c:/output/";
      fileName = "results";
      drawTitle = true;
      createVideo = false;
      title1 = "Coke";// inputTextFile1.getName();
      title2 = "Pepsi";// inputTextFile2.getName();
    }
    logger.debug("frameWidth: {}, frameHeight: {}", frameWidth, frameHeight);
    size(frameWidth, frameHeight);
    background(255);
    logger.debug("setup");
    // create buffer to draw the upper word wave
    buffer1 = createGraphics(frameWidth, frameHeight / 2, JAVA2D);
    buffer1.beginDraw();
    buffer1.background(255);
    wordCram1 = initWordCram(inputTextFile1, buffer1);
    // create buffer to draw the lower word wave
    buffer2 = createGraphics(frameWidth, frameHeight / 2, JAVA2D);
    buffer2.beginDraw();
    buffer2.background(255);
    wordCram2 = initWordCram(inputTextFile2, buffer2);
    // set up font for titles
    fill(0);
    textFont(createFont(font, 40));
    textAlign(CENTER);
}

В листинге 4 среда Processing осуществляет вызов метода setup() до начала рисования. На этом этапе вы инициализируете размер экрана и цвет фона, а также создаете графические буферы, в которые помещается облако слов, сгенерированное WordCram. Кроме того, этот код задает переменные для тестирования из среды Eclipse.

Библиотека WordCram, отвечающая за генерацию облаков слов, инициализируется в листинге 5. Вы можете задать такие аспекты облака слов, как размещение и цвета. Библиотека WordCram предоставляет несколько механизмов размещения (placer), таких как используемая в этой статье волна, а также несколько механизмов окрашивания для слов (colorer). В данном случае вы используете свой собственный механизм окрашивания.

Листинг 5. Метод initWordCram()
private WordCram initWordCram(File inputFile, PGraphics buffer) {
    WordCram wordCram = new WordCram(this);
    if (buffer != null) {
      wordCram = wordCram.withCustomCanvas(buffer);
    }
    // initialize WordCram with specified placer, text file,
    // colorer, and other details
    wordCram = wordCram.fromTextFile(inputFile.getPath());
    wordCram = wordCram.withColorer(this);
    wordCram = wordCram.withWordPadding(2);
    wordCram = wordCram.withPlacer(Placers.wave());
    wordCram = wordCram.withAngler(Anglers.randomBetween(-0.15f, 0.15f));
    wordCram = wordCram.withFont(createFont(font, 40));
    wordCram = wordCram.sizedByWeight(7, 52);
    wordCram = wordCram.maxNumberOfWordsToDraw(maxWords);
    return wordCram;
}

В листинге 6 показано, что генерацию облака слов осуществляет метод draw().

Листинг 6. Метод draw()
public void draw() {
    logger.debug("Draw..");
    // draw one word at a time
    if (wordCram1.hasMore()) {
      // draw next word in upper word wave
      wordCram1.drawNext();
      buffer1.endDraw();
      image(buffer1, 0, 0);

      buffer1.beginDraw();
      // draw next word in lower word wave
      wordCram2.drawNext();
      buffer2.endDraw();
      image(buffer2, 0, frameHeight / 2);
      buffer2.beginDraw();
    } else {
      buffer1.endDraw();
      buffer2.endDraw();
      image(buffer1, 0, 0);
      image(buffer2, 0, frameHeight / 2);
      listSkippedWords(inputTextFile1.getName(), wordCram1);
      listSkippedWords(inputTextFile2.getName(), wordCram2);
      noLoop();
      // if no video then
      // save only last frame result
      if (!createVideo) {
        saveFrame(outputDir + fileName + ".png");
      }
      // for testing purposes within Eclipse
      if (testing) {
        createVideo();
      }
      processingDone = true;
    }
    if (drawTitle) {
      color(0);
      textSize(20);
      text(title1, 0, 0, frameWidth, 50);
      text(title2, 0, frameHeight / 2, frameWidth, 50);
    }
    if (createVideo) {
      saveFrame(outputDir + fileName + "-####.png");
    }
}

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

Метод listSkippedWords() в листинге 7 выводит печать список слов, которые невозможно включить в визуализацию.

Листинг 7. Метод listSkippedWords()
private void listSkippedWords(String desc, WordCram wordcram) {
    Word[] words = wordcram.getWords();
    int skipped = 0;
    // for each word check whether it was skipped
    List<String> skippedWords = new Vector<String>();
    for (Word word : words) {
      if (word.wasSkipped()) {
        int skippedBecause = word.wasSkippedBecause();
        if (skippedBecause == WordCram.NO_SPACE) {
          // increase number of skipped words
          // only if no space for word
          skippedWords.add(word.word);
          skipped++;
        }
      }
    }
    // print number of skipped words
    if (skipped > 0) {
      logger.debug("skippedWords: {}, {}", desc, skippedWords);
      Output.println(desc + ": no space for " + skipped + " words: "
          + skippedWords);
    }
}

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

Метод colorFor() в листинге 8 реализует интерфейс WordColorer от WordCram. Этот метод возвращает выбранные по случайному закону цвета из заранее заданного списка.

Листинг 8. Метод colorFor()
public int colorFor(Word w) {
    int index = (int) random(colors.length);
    int colorHex = colors[index];
    int r = colorHex >> 16;
    int g = (colorHex >> 8) & 0x0000ff;
    int b = colorHex & 0x0000ff;
    logger.debug("R: {}, G: {}, B: {}", new Integer[] { r, g, b });
    return color(r, g, b);
}

В листинге 9 показан заключительный метод createVideo(), вызов которого осуществляется в листинге 6.

Листинг 9. Метод createVideo()
private void createVideo() {
    if (createVideo) {
      Output.println("Generating video...");
      try {
        File aviFile = new File(outputDir, fileName + ".avi");
        // format specifies the type of video we are creating
        // video encoding, frame rate, and size is specified here
        Format format = new Format(org.monte.media.FormatKeys.EncodingKey,
            org.monte.media.VideoFormatKeys.ENCODING_AVI_PNG,
            org.monte.media.VideoFormatKeys.DepthKey, 24,
            org.monte.media.FormatKeys.MediaTypeKey, MediaType.VIDEO,
            org.monte.media.FormatKeys.FrameRateKey,
            new Rational(frameRate, 1),
            org.monte.media.VideoFormatKeys.WidthKey, width,
            org.monte.media.VideoFormatKeys.HeightKey, height);
        logger.debug("Framerate: {}", frameRate);
        AVIWriter out = null;
        try {
          // create new AVI writer with previously specified format
          out = new AVIWriter(aviFile);
          out.addTrack(format);
          int i = 1;
          // read the first image file
          String frameFileName = String.format(fileName + "-%04d.png", i);
          File frameFile = new File(outputDir, frameFileName);
          while (frameFile.exists()) {
            logger.debug("Frame filename: {}", frameFileName);
            // while frame images exist
            // create a Buffer and write it to AVI writer
            Buffer buf = new Buffer();
            buf.format = new Format(org.monte.media.FormatKeys.EncodingKey,
                org.monte.media.VideoFormatKeys.ENCODING_BUFFERED_IMAGE,
                org.monte.media.VideoFormatKeys.DataClassKey,
                BufferedImage.class).append(format);
            buf.sampleDuration = format.get(
                org.monte.media.FormatKeys.FrameRateKey).inverse();
            buf.data = ImageIO.read(frameFile);
            out.write(0, buf);
            // read next frame image
            i++;
            frameFileName = String.format(fileName + "-%04d.png", i);
            frameFile = new File(outputDir, frameFileName);
          }
        } finally {
          if (out != null) {
            out.close();
          }
          Output.println("Done.");
        }
      } catch (IOException e) {
        logger.error(e.toString(), e);
        Output.error(e.toString());
      }
    }
}

Листинг 9 демонстрирует простоту создания видео из изображений. Вам требуется лишь задать формат видео, а затем создать видео по одному изображению за раз.

Добавление опций командной строки к файлу plugin.xml

Итак, наш программный код готов. Прежде чем его можно будет развернуть, добавьте опции командной строки в файл plugin.xml, чтобы приложение Command Line Program смогло осуществлять их разбор.

  1. Откройте файл plugin.xml, а затем откройте вкладку Extensions.
  2. Выберите опцию compare-command, нажмите правую кнопку, а затем выберите New > option.
  3. Нашему приложению требуются опции input1, input2 и video. Опции input1 и input2 задают имена для двух текстовых файлов, которые вы собираетесь сравнивать. Опция video генерирует видео (если она опущена, то видео не генерируется). На рис. 7 показано определение опции input1 (Text 1 file to compare), а также другие опции, которые можно добавить в случае необходимости.
Рисунок 7. Опции команды
Screen capture of the Extension Element details dialog in the Extensions tab

Теперь команда Compare для Command Line Program готова, и вы можете развернуть ее.


Развертывание приложения

Чтобы использовать приложение TextVisualizationAndAnalysis, необходимо развернуть его в среде Command Line Program. Создайте функцию и сайт обновления для плагина TextVisualizationAndAnalysis, а затем установите его в среде Command Line Program.

Создание функции

Функции в Eclipse представляют собой устанавливаемые и обновляемые наборы плагинов. Приложение Command Line Program использует стандартную функциональность Eclipse для установки, обновления и удаления новых команд-расширений. Чтобы создать функцию для команды Compare, выполните следующие шаги.

  1. Создайте проект функции и присвойте ему имя TextVisualizationAndAnalysisFeature.
  2. В качестве номера версии укажите 0.0.1 и нажмите Next.
  3. Выберите плагин TextVisualizationAndAnalysis и нажмите Finish.

Генерация сайта обновления

Сайты обновления содержат функции, которые можно установить в соответствующие приложения. Сайт обновления может быть локальным каталогом или дистанционно расположенным веб-сервером. Чтобы создать сайт обновления для программы TextVisualizationAndAnalysis выполните следующие шаги.

  1. Создайте проект сайта обновления и присвойте ему имя TextVisualizationAndAnalysisUpdateSite.
  2. На странице Update Site Map под заголовком Managing the Site выберите Add Feature для добавления функции TextVisualizationAndAnalysisFeature (см. рис. 8).
    Рисунок 8. Страница Update Site Map
    Screen capture of the Update Site Map page
  3. Нажмите Build All.

Установка команды

Вы не сможете выполнить команду отдельно, поскольку ее необходимо установить в среду Command Line Program. Установка осуществляется с помощью самого приложения Command Line Program. Введите команду admin (в данном случае предполагается, что созданный сайт обновления находится в каталоге c:/workspace/).

clp.cmd admin --install --dir='c:\workspace\TextVisualizationAndAnalysisUpdateSite'

Исполнение приложения

Ниже показано несколько примеров команд, которые показывают, каким образом можно исполнять описываемое приложение.

Генерация и показ изображения с результатами сравнения текстов.

clp.cmd compare --input1='c:/path/file1.txt' --input2='c:/path/file2.txt'

Использование имен входных файлов в качестве заголовка для визуализации.

clp.cmd compare --input1='c:/path/file1.txt' --input2='c:/path/file2.txt' --title

Использование настраиваемых заголовков.

clp.cmd compare --input1='c:/path/file1.txt' --input2='c:/path/file2.txt'
   --title --title1='Text1' --title2='Text2'

Генерация изображения и видео.

clp.cmd compare --input1='c:/path/file1.txt' -–input2='c:/path/file2.txt' -title --video

Результаты и анализ

Кодирование видео

Обратите внимание, что в листинге 6 для кодирования видео задан формат PNG. Это видео может не воспроизводиться в некоторых проигрывателях; его можно воспроизвести при помощи мультимедийного проигрывателя с открытым исходным кодом VLC (см. раздел Ресурсы).

Теперь можно приступать к практическому использованию приложения TextVisualizationAndAnalysis. Я использую его для визуализации двух похожих текстов: публично доступных заявлений типа "миссия организации" (mission statement) от двух корпораций из одной отрасли — Coca Cola Company и PepsiCo (см. раздел Ресурсы). Затем я использую визуализацию для проведения анализа. Предполагается, что волны слов будут визуализировать то, что думают вышеуказанные корпорации, и что является самым важным для них – в данный момент и в будущем (чтобы получить исходные тексты и полный программный код приложения в проекте плагина, обратитесь к разделу Загрузка.)

Визуализация

Я использовал последнюю команду из предыдущего раздела Исполнение приложения, для генерации изображения и видео. На рис. 9 визуализированы результаты сравнения этих двух текстов.

Рисунок 9. Визуализация двух подобных текстов
Visualization comparison of the mission statements from the Coca Cola Company and PepsiCo

На рис. 9 верхняя волна слов визуализирует заявление Mission, Vision & Values корпорации Coca-Cola; нижняя волна слов визуализирует заявление Values & Philosophy корпорации PepsiCo. Эти волны слов демонстрируют по 50 самых упоминаемых слов в соответствующих текстах, при этом слова с более высокой частотой упоминания размещаются в левом верхнем углу. Размер шрифта уменьшается в направлении слева направо; другими словами, слова в правом нижнем углу упоминаются менее часто, чем слова в левом верхнем углу.

На врезке представлен десятисекундный видеоролик с пословной генерацией визуализации

Анализ

Чтобы проанализировать сравнение визуализаций на рис. 9, присвоим максимальную важность словам в левом верхнем квадранте. Сначала для каждой волны слов нарисуем на визуализации вертикальную линию, смещенную от ее левой границы на расстояние одной четверти ширины волны (рис. 10).

Рисунок 10. Анализ двух текстов
Analyzing the visualization comparison in Figure 9 to assign word importance in the left quarter

Я исхожу из предположения, что слова слева от вышеупомянутой линии обе корпорации рассматривают как самые важные.

Складывается впечатление, что корпорация Coca-Cola концентрируется на своей концепции и имеет перспективный план по реализации этой концепции. Кроме того, она рассматривает весь мир как свой бизнес и оценивает свои действия и качество своей работы с точки реализации своей концепции.

Применительно к корпорации PepsiCo складывается впечатление, что ее бизнес-цель состоит в росте, в том числе в росте финансовых показателей. Кроме того, похоже, что эта корпорация придает большое значение экологическим и социальным аспектам.

Даже такое краткое сравнение результатов визуализации показывает, что две компании из одной отрасли могут существенно различаться по своим взглядам. Наш анализ позволяет обосновать следующее заключение: корпорация Coca-Cola Company больше озабочена своим местом в будущем мире, а корпорация PepsiCo больше думает о бизнесе и о своем росте.


Обновление приложения

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

  1. Внесите необходимые изменения в программный код или в другие файлы.
  2. Увеличьте номер версии у плагина и у функции.
    • Важное замечание: Изменение номера версии требуется и для плагина, и для функции. В противном случае механизм обновления не сможет обнаружить, что изменения были произведены.
    • Номер версии должен увеличиваться инкрементно, с минимально допустимым шагом. Например, прежняя версия имела номер 0.0.1, а новая версия будет иметь номер 0.0.2.
  3. Добавьте новую версию на сайт обновления и на сайт обновленных сборок.
  4. Выполните следующую команду.
    clp.cmd admin --update --dir='c:\workspace\TextVisualizationAndAnalysisUpdateSite'
  5. Запустите приложение на исполнение в обычном режиме.

Заключение

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


Загрузка

ОписаниеИмяРазмер
Проекты плагинов, готовыек импорту в среду EclipseTextVisualizationAndAnalysis_projects.zip1.3МБ
Обновление для развертывания вCommand Line ProgramTextVisualizationAndAnalysisUpdateSite.zip1.3МБ

Ресурсы

Научиться

  • Оригинал статьи: Build a text visualization and analytics application.
  • Eclipse plug-in concepts (Концепции подключаемых модулей Eclipse). Прочитайте о функциях, о сайтах обновления и других концепциях, используемых в плагинах Eclipse, в документе Plug-in Development Environment Guide (Руководство по среде разработки плагинов).
  • Data visualization with Processing, Part 1: An introduction to the language and environment (Визуализация данных с помощью языка Processing. Часть 1. Введение в язык и среду), M. Tim Jones, developerWorks, ноябрь 2010 г. Это введение в язык и среду Processing представляет собой первую статью в серии из трех частей.
  • OpenProcessing. Посетите этот сайт для ознакомления с обширной галереей эскизов, созданных с помощью Processing.
  • Mission, Vision & Values. Текст корпорации Coca-Cola Company по состоянию на весну 2012 г., который используется в примере в данной статье.
  • PepsiCo Values & Philosophy. Текст корпорации PepsiCo по состоянию на весну 2012 г., который используется в примере в данной статье (за исключением раздела Guiding Principles).
  • Примеры визуализации с помощью IBM Many Eyes: Примеры визуализации с помощью инструмента IBM Many Eyes, в том числе облако слов на рис. 1 данной статьи.
  • Блог Сами Салкосуо: Блог Сами Салкосуо (Sami Salkosuo) содержит множество визуализированных облаков слов, генерация которых была осуществлена с помощью инструментов, описанных в данной статье.
  • IBM InfoSphere Streams: Воспользуйтесь хорошо масштабируемой и мощной аналитической платформой, которая способна обрабатывать невероятно интенсивные потоки данных — до миллионов событий или сообщений в секунду.
  • IBM InfoSphere BigInsights: InfoSphere BigInsights, зрелый дистрибутив Hadoop от IBM для анализа больших данных, с легкостью обрабатывает и анализирует огромные объемы структурированных и неструктурированных данных. Этот дистрибутив дополняет стандартные средства Hadoop такими возможностями корпоративного класса, как усовершенствованные средства анализа, акселераторы приложений, поддержка различных дистрибутивов, оптимизация производительности, интеграция в масштабе предприятия и т. д.
  • Раздел Open source на сайте developerWorks— к вашим услугам обширный ассортимент справочной информации, инструментов и обновлений, который поможет осуществлять разработки на основе технологий с открытым кодом и использовать их вместе с продуктами IBM.

Получить продукты и технологии

  • Eclipse: Загрузите Eclipse для своей платформы.
  • Command Line Program: Softabar Command Line Program – платформа с открытым исходным кодом для создания приложений с поддержкой командной строки.
  • Monte Media Library: Monte Media Library –Java-библиотека для обработки медиаданных.
  • Processing: Processing — язык программирования и среда с открытым исходным кодом для создания изображений, анимаций и интерактивных материалов.
  • WordCram: WordCram — библиотека на языке Processing для генерации облаков слов.
  • VLC: VLC — есплатный мультимедийный проигрыватель с открытым исходным кодом.
  • IBM InfoSphere Streams: Загрузите продукт InfoSphere Streams и создавайте приложения, которые быстро потребляют, анализируют и коррелируют информацию по мере ее поступления в реальном времени из тысяч источников.
  • IBM InfoSphere BigInsights: Загрузите продукт InfoSphere BigInsights, способный с легкостью обрабатывать и анализировать огромные объемы структурированных и неструктурированных данных.

Комментарии

developerWorks: Войти

Обязательные поля отмечены звездочкой (*).


Нужен IBM ID?
Забыли Ваш IBM ID?


Забыли Ваш пароль?
Изменить пароль

Нажимая Отправить, Вы принимаете Условия использования developerWorks.

 


Профиль создается, когда вы первый раз заходите в developerWorks. Информация в вашем профиле (имя, страна / регион, название компании) отображается для всех пользователей и будет сопровождать любой опубликованный вами контент пока вы специально не укажите скрыть название вашей компании. Вы можете обновить ваш IBM аккаунт в любое время.

Вся введенная информация защищена.

Выберите имя, которое будет отображаться на экране



При первом входе в developerWorks для Вас будет создан профиль и Вам нужно будет выбрать Отображаемое имя. Оно будет выводиться рядом с контентом, опубликованным Вами в developerWorks.

Отображаемое имя должно иметь длину от 3 символов до 31 символа. Ваше Имя в системе должно быть уникальным. В качестве имени по соображениям приватности нельзя использовать контактный e-mail.

Обязательные поля отмечены звездочкой (*).

(Отображаемое имя должно иметь длину от 3 символов до 31 символа.)

Нажимая Отправить, Вы принимаете Условия использования developerWorks.

 


Вся введенная информация защищена.


static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=40
Zone=Open source, Технология Java
ArticleID=945438
ArticleTitle=Построение приложения для визуализации текста и его анализа
publish-date=09172013