Skip to content
KitploitKITPLOIT
StrumentiBlog
Invia
StrumentiBlog
Invia

Strumenti di Hacking, PenTest e Cybersecurity per il tuo Arsenale di Sicurezza!

Kitploit è una directory di strumenti di hacking, cybersecurity e pentesting. Scopri gli ultimi aggiornamenti dei progetti per trovare vulnerabilità, analizzare sistemi, automatizzare i test e rafforzare la tua sicurezza.

··Feed·Contatto·Privacy·© 2026 Kitploit

Directory degli strumenti

Categorie

Vedi tutte le categorie
Loading categories
apache__uima-uimaj_CVE-2022-32287_3-3-0 — SDK Java per la costruzione di pipeline di analisi che elaborano e arricchiscono dati testuali non strutturati con annotazioni, sistemi di tipi e motori di analisi modulari. | Kitploit
Strumenti/GitHubGitHub/shoucheng3/apache__uima-uimaj_cve-2022-32287_3-3-0
Utilità GenericheAnalisi del CodiceScripting e AutomazioneUtilità e FrameworkMachine LearningApprendimento e Formazione
GitHubshoucheng3/apache__uima-uimaj_cve-2022-32287_3-3-0

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

SDK Java per la costruzione di pipeline di analisi che elaborano e arricchiscono dati testuali non strutturati con annotazioni, sistemi di tipi e motori di analisi modulari.

Vedi Repository
41 anno faNon ancora revisionato

Più Popolari

Vedi tutti →

Scopri gli strumenti più utilizzati dalla nostra community.

Esplora tutti gli strumenti

Sfoglia la nostra collezione di strumenti

Vedi tutti gli strumenti →
Condividi

Benvenuti in Apache UIMA Java SDK

Apache UIMA ti aiuta a gestire dati non strutturati (come i testi) arricchiti con informazioni utili. Ad esempio, se vuoi identificare una menzione di un'entità in un testo o possibilmente collegare tale entità a un dataset di riferimento, Apache UIMA fornisce:

  • una struttura dati conveniente —la Common Analysis Structure (CAS)— per rappresentare tali dati
  • un concetto di sistema di tipi come schema per i dati arricchiti memorizzati nella CAS
  • un modello a componenti costituito da lettori, motori di analisi (processori) e consumatori (scrittori) per elaborare tali dati
  • un modello per aggregare più motori di analisi in pipeline e per eseguirli (opzionalmente parallelizzati)
  • varie opzioni per (de)serializzare la CAS da/verso diversi formati
  • e molte altre funzionalità aggiuntive!

Nota: Apache UIMA Java SDK fornisce solo un framework per costruire sistemi di analisi, ma non fornisce alcun sistema di analisi stesso. Tuttavia, esistono vari terze parti che si basano su Apache UIMA e che forniscono collezioni di componenti di analisi o soluzioni pronte.

Requisiti di sistema

Apache UIMA v3.6.0 e successive richiede Java versione 17 o successiva.

L'esecuzione del plugin Eclipse per UIMA richiede di avviare Eclipse 4.25 (2022-09) o successivo con Java 17 o successivo.

L'esecuzione dello strumento di migrazione su file class richiede l'esecuzione con un Java JDK, non un Java JRE.

Le piattaforme supportate sono: Windows, Linux e macOS. Altre implementazioni della piattaforma Java dovrebbero funzionare ma non sono state testate in modo significativo.

Molti degli script nella directory /bin invocano Java. Utilizzano il valore della variabile d'ambiente per individuare il Java da usare; se non è impostata, invocano aspettandosi di trovare un Java appropriato nella variabile .

JAVA_HOME
java
PATH

Utilizzo di Apache UIMA Java SDK

Puoi aggiungere Apache UIMA Java SDK al tuo progetto facilmente nella maggior parte degli strumenti di build importandolo da Maven Central. Ad esempio, se usi Maven, puoi aggiungere la seguente dipendenza al tuo progetto:

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

Successivamente, forniamo alcuni brevi esempi su come utilizzare Apache UIMA Java SDK e la libreria Apache uimaFIT. Apache uimaFIT è una dipendenza separata che puoi aggiungere:

root@kitploit:~
<dependency>
  <groupId>org.apache.uima</groupId>
  <artifactId>uimafit-core</artifactId>
  <version>3.6.0</version>
</dependency>
Creazione di un sistema di tipi

Il sistema di tipi definisce il tipo di informazione che vogliamo allegare all'informazione non strutturata (qui un documento di testo). Nel nostro esempio, vogliamo identificare menzioni di entità, quindi definiamo un tipo my.Entity con una caratteristica category che può essere usata per memorizzare la categoria a cui appartiene l'entità.

Per illustrare le informazioni che UIMA mantiene internamente sullo schema di annotazione, scriviamo lo schema generato come XML a schermo.

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);
Creazione di un oggetto Common Analysis Structure

Ora creiamo un oggetto Common Analysis Structure (CAS) in cui memorizziamo il testo che vogliamo analizzare.

Ancora una volta, per illustrare le informazioni che UIMA memorizza internamente nell'oggetto CAS, scriviamo una rappresentazione XML dell'oggetto a schermo.

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

CasIOUtils.save(cas, System.out, SerialFormat.XMI_PRETTY);
Aggiunta e recupero di annotazioni

Ora, creiamo un'annotazione del tipo my.Entity per identificare la menzione di Apache UIMA nel testo di esempio.

Infine, iteriamo su tutte le annotazioni nella CAS e le stampiamo a schermo. Questo include l'DocumentAnnotation predefinita che viene sempre creata da UIMA, così come l'annotazione my.Entity che abbiamo creato noi stessi.

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());
}
Lavorare con i componenti di analisi

Per organizzare diversi tipi di analisi in passaggi, di solito li raggruppiamo in singoli motori di analisi. Illustriamo ora come tali componenti possono essere costruiti e come possono essere eseguiti come pipeline di analisi.

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());
}

Utilizzo di uimaFIT

La configurazione dei componenti UIMA viene generalmente ottenuta creando file di descrizione XML che dicono al framework in fase di esecuzione come i componenti devono essere istanziati e distribuiti. Questi file di descrizione XML sono strettamente accoppiati con l'implementazione Java dei componenti che descrivono. Abbiamo scoperto che è molto difficile mantenere i due coerenti tra loro, specialmente quando il refactoring del codice è molto frequente. uimaFIT fornisce annotazioni Java per descrivere i componenti UIMA che possono essere utilizzate per descrivere direttamente i componenti UIMA nel codice. Questo semplifica enormemente il refactoring di una definizione di componente (ad esempio, cambiare il nome di un parametro di configurazione). Rende anche possibile generare file di descrizione XML come parte del ciclo di build piuttosto che essere eseguiti manualmente in parallelo con la creazione del codice. uimaFIT rende anche facile istanziare componenti UIMA senza utilizzare affatto file di descrizione XML fornendo una serie di metodi factory di comodo che consentono l'istanziazione programmatica/dinamica dei componenti UIMA. Questo rende uimaFIT una libreria ideale per testare i componenti UIMA perché il componente può essere facilmente istanziato e invocato senza richiedere la creazione preventiva di un file di descrizione. uimaFIT è anche utile in ambienti di ricerca in cui l'istanziazione programmatica/dinamica di una pipeline può semplificare la sperimentazione. Ad esempio, quando si esegue una convalida incrociata a 10 pieghe su una serie di condizioni sperimentali, può essere molto laborioso creare un diverso set di file di descrizione per ogni esecuzione o persino uno script che generi tali file di descrizione. uimaFIT è agnostico rispetto al sistema di tipi e non dipende (né fornisce) un sistema di tipi specifico.

uimaFIT è una libreria che fornisce factory, iniezione e utilità di test per UIMA. Il seguente elenco evidenzia alcune delle funzionalità che uimaFIT fornisce:

  • Factory: semplificano l'istanziazione programmatica dei componenti UIMA senza file di descrizione. Ad esempio, per istanziare un AnalysisEngine si potrebbe fare una chiamata come questa:

    root@kitploit:~
    AnalysisEngineFactory.createEngine(MyAEImpl.class, myTypeSystem,
      paramName1, paramValue2, 
      paramName2, paramValue2, 
      ...)
    
  • Iniezione: gestisce il binding dei valori dei parametri di configurazione alle variabili membro corrispondenti nei motori di analisi e gestisce il binding delle risorse esterne. Ad esempio, per legare un parametro di configurazione è sufficiente annotare una variabile membro con @ConfigurationParameter. Le risorse esterne possono essere iniettate allo stesso modo tramite l'annotazione @ExternalResource. Quindi aggiungi una riga di codice al tuo metodo di inizializzazione:

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

    Questo viene gestito automaticamente se estendi la classe JCasAnnotator_ImplBase di uimaFIT.

  • Test: uimaFIT semplifica il testing in diversi modi descritti nella documentazione. Rendendo facile istanziare i tuoi componenti senza file di descrizione, una grande quantità di XML difficile da mantenere e non necessario può essere eliminata dal codice di test. Questo rende i test più facili da scrivere e mantenere. Inoltre, eseguire i componenti come pipeline può essere realizzato con una chiamata al metodo come questa:

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

uimaFIT fa parte del progetto Apache UIMA(TM). uimaFIT può essere utilizzato solo insieme a una versione compatibile della versione Java di Apache UIMA SDK. Per vostra comodità, il pacchetto di distribuzione binaria di uimaFIT include tutte le librerie necessarie per utilizzare uimaFIT. In particolare per gli utenti alle prime armi, si consiglia vivamente di ottenere una copia del SDK UIMA completo separatamente.

uimaFIT è disponibile tramite Maven Central. Se usi Maven per il tuo ambiente di build, puoi aggiungere uimaFIT come dipendenza al tuo file pom.xml con quanto segue:

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

Moduli

  • uimafit-core - il modulo principale di uimaFIT
  • uimafit-cpe - supporto per il Collection Processing Engine (pipeline multi-thread)
  • uimafit-maven - un plugin Maven per potenziare automaticamente i componenti UIMA con metadati uimaFIT e per generare descrittori XML per componenti abilitati uimaFIT.
  • uimafit-junit - codice di supporto per facilitare l'implementazione di test UIMA/ uimaFIT in test JUnit
  • uimafit-assertj - aggiunge asserzioni per tipi UIMA/uimaFIT tramite il framework AssertJ
  • uimafit-spring - un modulo sperimentale che funge da proof-of-concept per l'integrazione di UIMA con il framework Spring. Attualmente non è considerato finito e utilizza reflection invasiva per modificare il framework UIMA in modo che passi tutti i componenti creati da UIMA attraverso Spring per fornire il wiring delle dipendenze del contesto Spring. Questo modulo è reso disponibile per gli avventurosi ma attualmente non è considerato stabile, finito, o anche una parte propria del pacchetto. Ad esempio, non è incluso nel pacchetto di distribuzione binaria.

Build

Per costruire Apache UIMA, hai bisogno almeno di un Java 17 JDK e di una versione recente di Maven 3.

Dopo aver estratto l'archivio della distribuzione dei sorgenti o clonato il repository, entra nella directory creata ed esegui il seguente comando:

root@kitploit:~
mvn clean install

Per maggiori dettagli, consulta http://uima.apache.org/building-uima.html

Esecuzione degli esempi dalla distribuzione sorgente/binaria

Puoi scaricare le distribuzioni sorgente e binaria dal sito web di Apache UIMA.

Variabili d'ambiente

Dopo aver decompresso la distribuzione di Apache UIMA dal pacchetto scelto (ad esempio .zip o .gz), esegui i passaggi seguenti per configurare UIMA in modo che funzioni correttamente.

  • Imposta JAVA_HOME sulla directory della tua installazione JRE che desideri utilizzare per UIMA.

  • Imposta UIMA_HOME sulla directory apache-uima della tua distribuzione Apache UIMA decompressa

  • Aggiungi UIMA_HOME/bin al tuo PATH

  • Esegui lo script UIMA_HOME/bin/adjustExamplePaths.bat (o .sh), per aggiornare i percorsi negli esempi in base al percorso effettivo della directory UIMA_HOME. Questo script esegue un programma Java; devi avere java nel tuo PATH o impostare la variabile d'ambiente JAVA_HOME su un JRE adatto.

    Nota: Le procedure del sistema operativo Mac OS X per la configurazione delle variabili d'ambiente globali sono descritte qui: vedi http://developer.apple.com/qa/qa2001/qa1067.html.

Verifica della tua installazione

Per testare l'installazione, esegui il file documentAnalyzer.bat (o .sh) situato nella sottodirectory bin. Dovrebbe apparire una finestra Document Analyzer. Imposta i valori visualizzati in questa GUI come segue:

  • 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

Sostituisci UIMA_HOME sopra con il percorso della tua installazione di Apache UIMA.

Successivamente, fai clic sul pulsante Run, che dopo una breve pausa dovrebbe far apparire una finestra Analyzed Results. Fai doppio clic su uno dei documenti per visualizzare i risultati dell'analisi per quel documento.

Fornitori di componenti UIMA

Ecco un elenco di diversi progetti noti che forniscono i loro strumenti di analisi come componenti UIMA o che incapsulano strumenti di analisi di terze parti come componenti UIMA:

  • Apache cTAKES - Sistema di elaborazione del linguaggio naturale per l'estrazione di informazioni da testi clinici liberi di cartelle cliniche elettroniche.
  • Apache OpenNLP - Incapsula OpenNLP per UIMA. Adattabile a diversi sistemi di tipi.
  • Apache Ruta - Analisi testuale generica basata su regole. Funziona con qualsiasi sistema di tipi.
  • ClearTK - Incapsula diversi strumenti di terze parti (OpenNLP, CoreNLP, ecc.) e offre un framework flessibile per l'addestramento di propri modelli di machine learning. Utilizza il sistema di tipi ClearTK.
  • DKPro Core - Incapsula molti strumenti di terze parti (OpenNLP, CoreNLP, ecc.) e supporta un'ampia gamma di formati di dati. Utilizza il sistema di tipi DKPro Core.
  • JULIE Lab Component Repository (JCoRe) Incapsula diversi strumenti di terze parti (OpenNLP, CoreNLP, ecc.) e supporta un'ampia gamma di formati di dati, in particolare dal dominio biomedico. Utilizza il sistema di tipi JCoRe.

Questo non è un elenco esaustivo. Se ritieni che un progetto particolare dovrebbe essere elencato qui, ti preghiamo di farcelo sapere. Puoi trovare altri ad esempio:

  • seguendo il grafico delle dipendenze di GitHub
  • cercando Google Scholar per UIMA

Interoperabilità

Apache UIMA Java SDK può essere utilizzato con qualsiasi linguaggio di programmazione basato sulla Java Virtual Machine, inclusi Java, Groovy, Scala e molti altri linguaggi.

L'interoperabilità con Python può essere ottenuta, ad esempio, tramite la libreria di terze parti DKPro Cassis che può essere utilizzata per leggere, manipolare e scrivere dati CAS nel formato XMI.

Ulteriori letture

Apache UIMA Java SDK è un'implementazione basata su Java della specifica UIMA.

Supporto

Indirizza le domande a [email protected].

Riferimento

Se utilizzi uimaFIT per supportare la ricerca accademica, ti preghiamo di considerare di citare il seguente articolo come appropriato:

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}
}

Storia

  • Inizi anni 2000: UIMA è stato originariamente sviluppato da IBM come parte della ricerca sull'analisi di informazioni non strutturate (come testo, audio e video). È stato progettato per elaborare grandi volumi di dati non strutturati in modo scalabile, mirando ad applicazioni di elaborazione del linguaggio naturale (NLP).

  • 2004: UIMA è stato reso open-source, consentendo un uso più ampio e contributi dall'esterno di IBM.

  • 2006: Il progetto UIMA è stato accettato nell'Apache Incubator, avviando il processo formale per diventare un progetto Apache.

  • 2008: UIMA è uscito dall'Apache Incubator ed è diventato un progetto Apache di primo livello, a significare la sua maturità e lo sviluppo attivo.

  • 2009: È stato introdotto Apache UIMA-AS (Asynchronous Scaleout), consentendo l'elaborazione distribuita e asincrona delle pipeline UIMA.

  • 2012: uimaFIT è stato contribuito al progetto Apache UIMA. Apache uimaFIT era precedentemente noto come uimaFIT, che a sua volta era precedentemente noto come UUTUC. Prima del suo contributo, era uno sforzo collaborativo tra il Center for Computational Pharmacology dell'Università del Colorado Denver, il Center for Computational Language and Education Research dell'Università del Colorado a Boulder e il laboratorio Ubiquitous Knowledge Processing (UKP) della Technische Universität Darmstadt.

  • 2013: UIMA DUCC (Distributed UIMA Cluster Computing) è stato introdotto come sottoprogetto di Apache UIMA.

  • 2016: Apache UIMA Ruta (Rule-based Text Annotation) è stato introdotto come estensione, fornendo un linguaggio di scripting per l'elaborazione testuale basata su regole.

  • 2023: UIMA DUCC e UIMA-AS sono stati ritirati.

  • 2024: uimaFIT è stato integrato nel UIMA Java SDK

Scarica lo strumento