Skip to content
KitploitKITPLOIT
ИнструментыБлог
Отправить
ИнструментыБлог
Отправить

Инструменты для хакинга, пентеста и кибербезопасности — ваш арсенал защиты!

Kitploit — это каталог инструментов для хакинга, кибербезопасности и пентестинга. Находите последние обновления проектов для поиска уязвимостей, анализа систем, автоматизации тестирования и усиления вашей безопасности.

··Ленты·Контакты·Конфиденциальность·© 2026 Kitploit

Каталог инструментов

Категории

Все категории
Loading categories
apache__uima-uimaj_CVE-2022-32287_3-3-0 — Java SDK для создания конвейеров аналитики, которые обрабатывают и обогащают неструктурированные текстовые данные с помощью аннотаций, систем типов и модульных механизмов анализа. | Kitploit
Инструменты/GitHubGitHub/shoucheng3/apache__uima-uimaj_cve-2022-32287_3-3-0
Утилиты общего назначенияАнализ КодаСкриптинг и автоматизацияУтилиты и фреймворкиМашинное ОбучениеОбучение и Образование
GitHubshoucheng3/apache__uima-uimaj_cve-2022-32287_3-3-0

apache__uima-uimaj_CVE-2022-32287_3-3-0

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

Репозиторий
41 год назадЕщё не проверено

Популярное

Смотреть все →

Откройте для себя самые используемые инструменты нашего сообщества.

Изучить все инструменты

Просмотрите нашу коллекцию инструментов

Смотреть все инструменты →
Поделиться

Добро пожаловать в Apache UIMA Java SDK

Apache UIMA помогает вам управлять неструктурированными данными (например, текстами), которые обогащаются полезной информацией. Например, если вы хотите идентифицировать упоминание сущности в тексте или связать эту сущность с эталонным набором данных, Apache UIMA предоставляет:

  • удобную структуру данных — Common Analysis Structure (CAS) — для представления этих данных
  • концепцию системы типов, служащую схемой для обогащённых данных, хранящихся в CAS
  • компонентную модель, состоящую из считывателей (reader), аналитических движков (процессоров) и потребителей (writer) для обработки этих данных
  • модель для объединения нескольких аналитических движков в конвейеры и их выполнения (при необходимости параллельного)
  • различные варианты (де)сериализации CAS из/в различные форматы
  • и многие другие дополнительные возможности!

Обратите внимание: Apache UIMA Java SDK предоставляет только платформу для создания аналитики, но не предоставляет саму аналитику. Однако существуют различные сторонние проекты, которые основаны на Apache UIMA и предоставляют наборы компонентов анализа или готовые решения.

Системные требования

Apache UIMA v3.6.0 и более поздние версии требуют Java версии 17 или новее.

Для запуска инструментов плагина Eclipse для UIMA требуется Eclipse 4.25 (2022-09) или новее, использующий Java 17 или новее.

Для запуска инструмента миграции для class-файлов требуется Java JDK, а не Java JRE.

Поддерживаемые платформы: Windows, Linux и macOS. Другие реализации платформы Java должны работать, но не были тщательно протестированы.

Многие скрипты в каталоге /bin вызывают Java. Они используют значение переменной окружения для поиска используемой Java; если она не задана, они вызывают , ожидая найти подходящую Java в вашей переменной .

JAVA_HOME
java
PATH

Использование Apache UIMA Java SDK

Вы можете легко добавить Apache UIMA Java SDK в свой проект в большинстве инструментов сборки, импортировав его из Maven Central. Например, если вы используете Maven, вы можете добавить следующую зависимость в свой проект:

root@kitploit:~
<dependency>
  <groupId>org.apache.uima</groupId>
  <artifactId>uimaj-core</artifactId>
  <version>3.6.0</version>
</dependency>

Далее мы приведём несколько кратких примеров использования Apache UIMA Java SDK и библиотеки Apache uimaFIT. Apache uimaFIT — это отдельная зависимость, которую вы можете добавить:

root@kitploit:~
<dependency>
  <groupId>org.apache.uima</groupId>
  <artifactId>uimafit-core</artifactId>
  <version>3.6.0</version>
</dependency>
Создание системы типов

Система типов определяет тип информации, которую мы хотим прикрепить к неструктурированной информации (здесь — текстовому документу). В нашем примере мы хотим идентифицировать упоминания сущностей, поэтому мы определяем тип my.Entity с признаком category, который можно использовать для хранения категории, к которой принадлежит сущность.

Чтобы проиллюстрировать информацию, которую UIMA внутренне хранит о схеме аннотаций, мы выводим сгенерированную схему в виде XML на экран.

root@kitploit:~
String TYPE_NAME_ENTITY = "my.Entity";
String TYPE_NAME_TOKEN = "my.Token";
String FEAT_NAME_CATEGORY = "category";

var tsd = UIMAFramework.getResourceSpecifierFactory().createTypeSystemDescription();
tsd.addType(TYPE_NAME_TOKEN, "", CAS.TYPE_NAME_ANNOTATION);
var entityTypeDesc = tsd.addType(TYPE_NAME_ENTITY, "", CAS.TYPE_NAME_ANNOTATION);
entityTypeDesc.addFeature(FEAT_NAME_CATEGORY, "", CAS.TYPE_NAME_STRING);

tsd.toXML(System.out);
Создание объекта Common Analysis Structure

Теперь мы создаём объект Common Analysis Structure (CAS), в который сохраняем текст, который хотим проанализировать.

Опять же, чтобы проиллюстрировать информацию, которую UIMA внутренне хранит в объекте CAS, мы выводим XML-представление объекта на экран.

root@kitploit:~
var cas = CasFactory.createCas(tsd);
cas.setDocumentText("Welcome to Apache UIMA.");
cas.setDocumentLanguage("en");

CasIOUtils.save(cas, System.out, SerialFormat.XMI_PRETTY);
Добавление и получение аннотаций

Теперь мы создаём аннотацию типа my.Entity, чтобы идентифицировать упоминание Apache UIMA в примере текста.

Наконец, мы перебираем все аннотации в CAS и выводим их на экран. Это включает стандартную аннотацию DocumentAnnotation, которая всегда создаётся UIMA, а также аннотацию my.Entity, которую мы создали сами.

root@kitploit:~
var entityType = cas.getTypeSystem().getType(TYPE_NAME_ENTITY);
var entity = cas.createAnnotation(entityType, 11, 22);
cas.addFsToIndexes(entity);

for (var anno : cas.<Annotation>select(entityType)) {
   System.out.printf("%s: [%s]%n", anno.getType().getName(), anno.getCoveredText());
}
Работа с компонентами анализа

Чтобы организовать различные типы анализа в виде шагов, мы обычно упаковываем их в отдельные аналитические движки. Теперь мы покажем, как такие компоненты можно создавать и как их можно запускать в виде конвейера анализа.

root@kitploit:~
class TokenAnnotator extends CasAnnotator_ImplBase {
  public void process(CAS cas) throws AnalysisEngineProcessException {
    var tokenType = cas.getTypeSystem().getType(TYPE_NAME_TOKEN);
    var bi = BreakIterator.getWordInstance();
    bi.setText(cas.getDocumentText());
    int begin = bi.first();
    int end;
    for (end = bi.next(); end != BreakIterator.DONE; end = bi.next()) {
      var token = cas.createAnnotation(tokenType, begin, end);
      cas.addFsToIndexes(token);
      begin = end;
    }
  }
}

class EntityAnnotator extends CasAnnotator_ImplBase {
  public void process(CAS cas) throws AnalysisEngineProcessException {
    var tokenType = cas.getTypeSystem().getType(TYPE_NAME_TOKEN);
    var entityType = cas.getTypeSystem().getType(TYPE_NAME_ENTITY);
    for (var token : cas.<Annotation>select(tokenType)) {
      if (Character.isUpperCase(token.getCoveredText().charAt(0))) {
        var entity = cas.createAnnotation(entityType, token.getBegin(), token.getEnd());
        cas.addFsToIndexes(entity);
      }
    }
  }
}

cas = CasFactory.createCas(tsd);
cas.setDocumentText("John likes Apache UIMA.");
cas.setDocumentLanguage("en");

var pipeline = AnalysisEngineFactory.createEngineDescription(
  AnalysisEngineFactory.createEngineDescription(TokenAnnotator.class),
  AnalysisEngineFactory.createEngineDescription(EntityAnnotator.class));

SimplePipeline.runPipeline(cas, pipeline);

for (var anno : cas.<Annotation>select(entityType)) {
   System.out.printf("%s: [%s]%n", anno.getType().getName(), anno.getCoveredText());
}

Использование uimaFIT

Конфигурирование компонентов UIMA обычно достигается созданием XML-файлов дескрипторов, которые сообщают платформе во время выполнения, как компоненты должны быть созданы и развёрнуты. Эти XML-файлы дескрипторов очень тесно связаны с Java-реализацией компонентов, которые они описывают. Мы обнаружили, что очень трудно поддерживать их согласованность друг с другом, особенно когда рефакторинг кода происходит очень часто. uimaFIT предоставляет Java-аннотации для описания компонентов UIMA, которые можно использовать для непосредственного описания компонентов UIMA в коде. Это значительно упрощает рефакторинг определения компонента (например, изменение имени параметра конфигурации). Это также позволяет генерировать XML-файлы дескрипторов как часть цикла сборки, а не выполнять это вручную параллельно с созданием кода. uimaFIT также упрощает создание компонентов UIMA без использования XML-файлов дескрипторов, предоставляя ряд удобных фабричных методов, которые позволяют программное/динамическое создание компонентов UIMA. Это делает uimaFIT идеальной библиотекой для тестирования компонентов UIMA, поскольку компонент можно легко создать и вызвать без необходимости сначала создавать файл дескриптора. uimaFIT также полезен в исследовательских средах, где программное/динамическое создание конвейера может упростить эксперименты. Например, при выполнении 10-кратной перекрёстной проверки в ряде экспериментальных условий может быть довольно трудоёмко создавать отдельный набор файлов дескрипторов для каждого запуска или даже скрипт, который генерирует такие файлы дескрипторов. uimaFIT не зависит от системы типов и не требует (и не предоставляет) конкретной системы типов.

uimaFIT — это библиотека, предоставляющая фабрики, внедрение и утилиты для тестирования UIMA. Следующий список описывает некоторые возможности uimaFIT:

  • Фабрики: упрощают программное создание компонентов UIMA без файлов дескрипторов. Например, для создания AnalysisEngine можно выполнить такой вызов:

    root@kitploit:~
    AnalysisEngineFactory.createEngine(MyAEImpl.class, myTypeSystem,
      paramName1, paramValue2, 
      paramName2, paramValue2, 
      ...)
    
  • Внедрение: обеспечивает привязку значений параметров конфигурации к соответствующим переменным-членам в аналитических движках, а также привязку внешних ресурсов. Например, чтобы связать параметр конфигурации, достаточно аннотировать переменную-член с помощью @ConfigurationParameter. Внешние ресурсы аналогично можно внедрять с помощью аннотации @ExternalResource. Затем добавьте одну строку кода в ваш метод initialize:

    root@kitploit:~
    ConfigurationParameterInitializer.initialize(this, uimaContext).
    

    Это обрабатывается автоматически, если вы расширяете класс uimaFIT JCasAnnotator_ImplBase.

  • Тестирование: uimaFIT упрощает тестирование несколькими способами, описанными в документации. Благодаря лёгкому созданию компонентов без файлов дескрипторов из вашего тестового кода можно исключить большое количество трудно поддерживаемого и ненужного XML. Это делает тесты проще в написании и сопровождении. Кроме того, запуск компонентов в виде конвейера может быть выполнен с помощью вызова метода, подобного этому:

    root@kitploit:~
    SimplePipeline.runPipeline(reader, ae1, ..., aeN, consumer1, ... consumerN)
    

uimaFIT является частью проекта Apache UIMA(TM). uimaFIT можно использовать только вместе с совместимой версией Java-версии Apache UIMA SDK. Для вашего удобства пакет бинарного дистрибутива uimaFIT включает все библиотеки, необходимые для использования uimaFIT. Особенно начинающим пользователям настоятельно рекомендуется получить отдельную копию полного UIMA SDK.

uimaFIT доступен через Maven Central. Если вы используете Maven в своём окружении сборки, вы можете добавить uimaFIT в качестве зависимости в ваш файл pom.xml следующим образом:

root@kitploit:~
<dependencies>
  <dependency>
    <groupId>org.apache.uima</groupId>
    <artifactId>uimafit-core</artifactId>
    <version>3.6.0</version>
  </dependency>
</dependencies>

Модули

  • uimafit-core — основной модуль uimaFIT
  • uimafit-cpe — поддержка Collection Processing Engine (многопоточные конвейеры)
  • uimafit-maven — плагин Maven для автоматического дополнения компонентов UIMA метаданными uimaFIT и генерации XML-дескрипторов для компонентов с поддержкой uimaFIT.
  • uimafit-junit — вспомогательный код, упрощающий реализацию тестов UIMA/uimaFIT в JUnit-тестах
  • uimafit-assertj — добавляет проверки для типов UIMA/uimaFIT с помощью фреймворка AssertJ
  • uimafit-spring — экспериментальный модуль, служащий доказательством концепции интеграции UIMA со Spring Framework. В настоящее время он не считается завершённым и использует инвазивную рефлексию для модификации UIMA-фреймворка таким образом, чтобы все компоненты, создаваемые UIMA, проходили через Spring для обеспечения связывания зависимостей контекста Spring. Этот модуль предоставляется для смелых, но в настоящее время не считается стабильным, завершённым или даже полноценной частью пакета. Например, он не включён в пакет бинарного дистрибутива.

Сборка

Для сборки Apache UIMA вам понадобятся как минимум JDK версии 17 и свежая версия Maven 3.

После распаковки ZIP-архива исходного дистрибутива или клонирования репозитория перейдите в созданный каталог и выполните следующую команду:

root@kitploit:~
mvn clean install

Более подробную информацию см. на http://uima.apache.org/building-uima.html

Запуск примеров из исходного/бинарного дистрибутива

Вы можете загрузить исходные и бинарные дистрибутивы с веб-сайта Apache UIMA.

Переменные окружения

После того как вы распаковали дистрибутив Apache UIMA из выбранного вами пакета (например, .zip или .gz), выполните следующие действия, чтобы настроить UIMA для корректной работы.

  • Установите JAVA_HOME в каталог вашей JRE-установки, которую вы хотите использовать для UIMA.

  • Установите UIMA_HOME в каталог apache-uima вашего распакованного дистрибутива Apache UIMA

  • Добавьте UIMA_HOME/bin в ваш PATH

  • Запустите скрипт UIMA_HOME/bin/adjustExamplePaths.bat (или .sh), чтобы обновить пути в примерах в соответствии с фактическим путём к каталогу UIMA_HOME. Этот скрипт запускает Java-программу; у вас должен быть либо java в PATH, либо установлена переменная окружения JAVA_HOME в подходящую JRE.

    Примечание. Процедуры настройки глобальных переменных окружения в операционной системе Mac OS X описаны здесь: см. http://developer.apple.com/qa/qa2001/qa1067.html.

Проверка установки

Чтобы проверить установку, запустите файл documentAnalyzer.bat (или .sh), расположенный в подкаталоге bin. Должно появиться окно Document Analyzer. Задайте значения, отображаемые в этом графическом интерфейсе, следующим образом:

  • Input Directory: UIMA_HOME/examples/data
  • Output Directory: UIMA_HOME/examples/data/processed
  • Location of Analysis Engine XML Descriptor: UIMA_HOME/examples/descriptors/analysis_engine/PersonTitleAnnotator.xml

Замените UIMA_HOME выше на путь к вашей установке Apache UIMA.

Затем нажмите кнопку Run; после короткой паузы должно появиться окно Analyzed Results. Дважды щёлкните по одному из документов, чтобы отобразить результаты анализа для этого документа.

Поставщики компонентов UIMA

Вот список нескольких известных проектов, которые предоставляют свои инструменты анализа в виде компонентов UIMA или оборачивают сторонние инструменты анализа в компоненты UIMA:

  • Apache cTAKES — система обработки естественного языка для извлечения информации из клинических свободных текстов электронных медицинских карт.
  • Apache OpenNLP — оборачивает OpenNLP для UIMA. Адаптируется к различным системам типов.
  • Apache Ruta — универсальная текстовая аналитика на основе правил. Работает с любой системой типов.
  • ClearTK — оборачивает несколько сторонних инструментов (OpenNLP, CoreNLP и т.д.) и предлагает гибкую платформу для обучения собственных моделей машинного обучения. Использует систему типов CleartK.
  • DKPro Core — оборачивает множество сторонних инструментов (OpenNLP, CoreNLP и т.д.) и поддерживает широкий спектр форматов данных. Использует систему типов DKPro Core.
  • JULIE Lab Component Repository (JCoRe) — оборачивает несколько сторонних инструментов (OpenNLP, CoreNLP и т.д.) и поддерживает широкий спектр форматов данных, особенно в области биомедицины. Использует систему типов JCore.

Это не исчерпывающий список. Если вы считаете, что какой-то проект должен быть указан здесь, сообщите нам. Дополнительные проекты можно найти, например:

  • перейдя по графу зависимостей GitHub
  • выполнив поиск Google Scholar по UIMA

Интероперабельность

Apache UIMA Java SDK можно использовать с любым языком программирования, основанным на Java Virtual Machine, включая Java, Groovy, Scala и многие другие языки.

Совместимость с Python может быть достигнута, например, с помощью сторонней библиотеки DKPro Cassis, которую можно использовать для чтения, обработки и записи данных CAS в формате XMI.

Дополнительные материалы

Apache UIMA Java SDK — это реализация спецификации UIMA на Java.

Поддержка

Пожалуйста, направляйте вопросы на [email protected].

Ссылки

Если вы используете uimaFIT для поддержки академических исследований, пожалуйста, рассмотрите возможность цитирования следующей статьи:

root@kitploit:~
@InProceedings{ogren-bethard:2009:SETQA-NLP,
  author    = {Ogren, Philip  and  Bethard, Steven},
  title     = {Building Test Suites for {UIMA} Components},
  booktitle = {Proceedings of the Workshop on Software Engineering, Testing, and Quality Assurance for Natural Language Processing (SETQA-NLP 2009)},
  month     = {June},
  year      = {2009},
  address   = {Boulder, Colorado},
  publisher = {Association for Computational Linguistics},
  pages     = {1--4},
  url       = {http://www.aclweb.org/anthology/W/W09/W09-1501}
}

История

  • Начало 2000-х: UIMA была изначально разработана IBM в рамках исследований по анализу неструктурированной информации (такой как текст, аудио и видео). Она была спроектирована для масштабируемой обработки больших объёмов неструктурированных данных, ориентируясь на приложения обработки естественного языка (NLP).

  • 2004: UIMA была опубликована с открытым исходным кодом, что позволило более широко использовать её и вносить вклад со стороны сообщества за пределами IBM.

  • 2006: Проект UIMA был принят в Apache Incubator, начав формальный процесс становления проектом Apache.

  • 2008: UIMA вышла из Apache Incubator и стала основным проектом Apache, что свидетельствует о её зрелости и активном развитии.

  • 2009: Был представлен Apache UIMA-AS (Asynchronous Scaleout), обеспечивающий распределённую и асинхронную обработку конвейеров UIMA.

  • 2012: uimaFIT был передан проекту Apache UIMA. Apache uimaFIT ранее был известен как uimaFIT, который, в свою очередь, ранее был известен как UUTUC. До передачи он был совместным проектом Центра вычислительной фармакологии Университета Колорадо в Денвере, Центра вычислительных исследований языка и образования Университета Колорадо в Боулдере и лаборатории Ubiquitous Knowledge Processing (UKP) Технического университета Дармштадта.

  • 2013: Был представлен UIMA DUCC (Distributed UIMA Cluster Computing) в качестве подпроекта Apache UIMA.

  • 2016: Apache UIMA Ruta (Rule-based Text Annotation) была представлена как расширение, предоставляющее язык сценариев для обработки текста на основе правил.

  • 2023: UIMA DUCC и UIMA-AS были выведены из эксплуатации.

  • 2024: uimaFIT был объединён с UIMA Java SDK

Скачать инструмент