
असंरचित टेक्स्ट डेटा को एनोटेशन, टाइप सिस्टम और मॉड्यूलर विश्लेषण इंजनों के साथ प्रोसेस और समृद्ध करने वाले एनालिटिक्स पाइपलाइनों के निर्माण के लिए Java SDK।
Apache UIMA आपको असंरचित डेटा (जैसे पाठ) के प्रबंधन में मदद करता है जो उपयोगी जानकारी से समृद्ध होता है। उदाहरण के लिए, यदि आप किसी पाठ में किसी इकाई के उल्लेख की पहचान करना चाहते हैं या संभावित रूप से उस इकाई को किसी संदर्भ डेटासेट से जोड़ना चाहते हैं, तो Apache UIMA प्रदान करता है:
ध्यान दें कि Apache UIMA Java SDK केवल एनालिटिक्स बनाने के लिए एक ढांचा प्रदान करता है, लेकिन यह कोई एनालिटिक्स प्रदान नहीं करता है। हालाँकि, कई तृतीय-पक्ष हैं जो Apache UIMA पर निर्मित होते हैं और विश्लेषण घटकों या तैयार समाधानों के संग्रह प्रदान करते हैं।
Apache UIMA v3.6.0 और बाद के संस्करण के लिए Java संस्करण 17 या बाद का आवश्यक है।
UIMA के लिए Eclipse प्लगइन टूलिंग चलाने के लिए आपको Java 17 या बाद के संस्करण का उपयोग करके Eclipse 4.25 (2022-09) या बाद का संस्करण शुरू करना होगा।
क्लास फ़ाइलों पर माइग्रेशन टूल चलाने के लिए Java JDK की आवश्यकता है, न कि Java JRE की।
समर्थित प्लेटफ़ॉर्म हैं: Windows, Linux, और macOS। अन्य Java प्लेटफ़ॉर्म कार्यान्वयन काम करने चाहिए लेकिन उनका महत्वपूर्ण परीक्षण नहीं किया गया है।
/bin निर्देशिका में कई स्क्रिप्ट Java को आमंत्रित करती हैं। वे उपयोग करने के लिए Java का पता लगाने के लिए पर्यावरण चर के मान का उपयोग करते हैं; यदि यह सेट नहीं है, तो वे को आमंत्रित करते हैं और उम्मीद करते हैं कि आपके चर में एक उपयुक्त Java मिलेगा।
JAVA_HOMEjavaPATHआप Maven Central से आयात करके अधिकांश बिल्ड टूल्स में Apache UIMA Java SDK को आसानी से अपने प्रोजेक्ट में जोड़ सकते हैं। उदाहरण के लिए, यदि आप Maven का उपयोग करते हैं, तो आप अपने प्रोजेक्ट में निम्नलिखित निर्भरता जोड़ सकते हैं:
<dependency>
<groupId>org.apache.uima</groupId>
<artifactId>uimaj-core</artifactId>
<version>3.6.0</version>
</dependency>
आगे, हम Apache UIMA Java SDK और Apache uimaFIT लाइब्रेरी का उपयोग करने के कुछ संक्षिप्त उदाहरण देते हैं। Apache uimaFIT एक अलग निर्भरता है जिसे आप जोड़ सकते हैं:
<dependency>
<groupId>org.apache.uima</groupId>
<artifactId>uimafit-core</artifactId>
<version>3.6.0</version>
</dependency>
प्रकार प्रणाली उस प्रकार की जानकारी को परिभाषित करती है जिसे हम असंरचित जानकारी (यहाँ एक पाठ दस्तावेज़) से जोड़ना चाहते हैं। हमारे उदाहरण में, हम इकाइयों के उल्लेखों की पहचान करना चाहते हैं, इसलिए हम एक प्रकार my.Entity को एक फ़ीचर category के साथ परिभाषित करते हैं जिसका उपयोग संबंधित इकाई की श्रेणी को संग्रहीत करने के लिए किया जा सकता है।
उदाहरण के लिए, UIMA आंतरिक रूप से एनोटेशन स्कीमा के बारे में जो जानकारी बनाए रखता है, उसे स्पष्ट करने के लिए हम उत्पन्न स्कीमा को XML के रूप में स्क्रीन पर लिखते हैं।
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);
अब हम एक सामान्य विश्लेषण संरचना (CAS) ऑब्जेक्ट बनाते हैं जिसमें हम उस पाठ को संग्रहीत करते हैं जिसका हम विश्लेषण करना चाहते हैं।
फिर से, UIMA CAS ऑब्जेक्ट में आंतरिक रूप से संग्रहीत जानकारी को स्पष्ट करने के लिए, हम ऑब्जेक्ट का एक XML प्रतिनिधित्व स्क्रीन पर लिखते हैं।
var cas = CasFactory.createCas(tsd);
cas.setDocumentText("Welcome to Apache UIMA.");
cas.setDocumentLanguage("en");
CasIOUtils.save(cas, System.out, SerialFormat.XMI_PRETTY);
अब, हम उदाहरण पाठ में Apache UIMA के उल्लेख की पहचान करने के लिए my.Entity प्रकार का एक एनोटेशन बनाते हैं।
अंत में, हम CAS में सभी एनोटेशन पर पुनरावृत्ति करते हैं और उन्हें स्क्रीन पर प्रिंट करते हैं। इसमें डिफ़ॉल्ट DocumentAnnotation शामिल है जो हमेशा UIMA द्वारा बनाया जाता है, साथ ही my.Entity एनोटेशन जो हमने स्वयं बनाया है।
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());
}
विभिन्न प्रकार के विश्लेषण को चरणों में व्यवस्थित करने के लिए, हम आमतौर पर उन्हें अलग-अलग विश्लेषण इंजनों में पैकेज करते हैं। अब हम स्पष्ट करते हैं कि ऐसे घटकों का निर्माण कैसे किया जा सकता है और उन्हें एक विश्लेषण पाइपलाइन के रूप में कैसे निष्पादित किया जा सकता है।
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());
}
UIMA घटकों को कॉन्फ़िगर करना आम तौर पर XML विवरणक फ़ाइलें बनाकर प्राप्त किया जाता है जो रनटाइम पर फ्रेमवर्क को बताती हैं कि घटकों को कैसे इंस्टेंटिएट और तैनात किया जाना चाहिए। ये XML विवरणक फ़ाइलें उन घटकों के Java कार्यान्वयन के साथ बहुत कसकर जुड़ी होती हैं जिनका वे वर्णन करते हैं। हमने पाया है कि दोनों को एक-दूसरे के साथ सुसंगत रखना बहुत मुश्किल है, खासकर जब कोड रिफैक्टरिंग बहुत बार-बार होती है। uimaFIT UIMA घटकों का वर्णन करने के लिए Java एनोटेशन प्रदान करता है जिनका उपयोग कोड में UIMA घटकों का सीधे वर्णन करने के लिए किया जा सकता है। यह घटक परिभाषा को रिफैक्टर करने (जैसे कॉन्फ़िगरेशन पैरामीटर नाम बदलना) को बहुत सरल बनाता है। यह बिल्ड चक्र के हिस्से के रूप में XML विवरणक फ़ाइलें उत्पन्न करना भी संभव बनाता है, न कि कोड निर्माण के समानांतर मैन्युअल रूप से प्रदर्शन करना। uimaFIT कई सुविधा फ़ैक्टरी विधियाँ प्रदान करके XML विवरणक फ़ाइलों का उपयोग किए बिना UIMA घटकों को इंस्टेंटिएट करना भी आसान बनाता है जो UIMA घटकों की प्रोग्रामेटिक/गतिशील इंस्टेंटिएशन की अनुमति देती हैं। यह uimaFIT को UIMA घटकों के परीक्षण के लिए एक आदर्श लाइब्रेरी बनाता है क्योंकि घटक को पहले विवरणक फ़ाइल बनाने की आवश्यकता के बिना आसानी से इंस्टेंटिएट और आमंत्रित किया जा सकता है। uimaFIT अनुसंधान वातावरण में भी सहायक है जिसमें पाइपलाइन की प्रोग्रामेटिक/गतिशील इंस्टेंटिएशन प्रयोग को सरल बना सकती है। उदाहरण के लिए, कई प्रयोगात्मक स्थितियों में 10-गुना क्रॉस-वैलिडेशन करते समय, प्रत्येक रन के लिए विवरणक फ़ाइलों का एक अलग सेट बनाना या ऐसी विवरणक फ़ाइलें उत्पन्न करने वाली एक स्क्रिप्ट बनाना काफी श्रमसाध्य हो सकता है। uimaFIT प्रकार प्रणाली-अज्ञेयवादी है और किसी विशिष्ट प्रकार प्रणाली पर निर्भर नहीं करता है (या प्रदान नहीं करता है)।
uimaFIT एक लाइब्रेरी है जो UIMA के लिए फ़ैक्टरी, इंजेक्शन और परीक्षण उपयोगिताएँ प्रदान करती है। निम्नलिखित सूची uimaFIT द्वारा प्रदान की गई कुछ विशेषताओं पर प्रकाश डालती है:
फ़ैक्टरी: विवरणक फ़ाइलों के बिना प्रोग्रामेटिक रूप से UIMA घटकों को इंस्टेंटिएट करना सरल बनाती हैं। उदाहरण के लिए, एक AnalysisEngine इंस्टेंटिएट करने के लिए इस तरह से कॉल किया जा सकता है:
AnalysisEngineFactory.createEngine(MyAEImpl.class, myTypeSystem,
paramName1, paramValue2,
paramName2, paramValue2,
...)
इंजेक्शन: कॉन्फ़िगरेशन पैरामीटर मानों को विश्लेषण इंजन में संबंधित सदस्य चरों से बांधने और बाहरी संसाधनों के बंधन को संभालता है। उदाहरण के लिए, कॉन्फ़िगरेशन पैरामीटर को बांधने के लिए एक सदस्य चर को @ConfigurationParameter के साथ एनोटेट करें। बाहरी संसाधनों को @ExternalResource एनोटेशन के माध्यम से इंजेक्ट किया जा सकता है। फिर अपनी initialize विधि में कोड की एक पंक्ति जोड़ें:
ConfigurationParameterInitializer.initialize(this, uimaContext).
यह स्वचालित रूप से संभाला जाता है यदि आप uimaFIT के JCasAnnotator_ImplBase वर्ग का विस्तार करते हैं।
परीक्षण: uimaFIT दस्तावेज़ीकरण में वर्णित कई तरीकों से परीक्षण को सरल बनाता है। अपने घटकों को विवरणक फ़ाइलों के बिना इंस्टेंटिएट करना आसान बनाकर, आपके परीक्षण कोड से बड़ी मात्रा में बनाए रखने में कठिन और अनावश्यक XML को समाप्त किया जा सकता है। इससे परीक्षण लिखना और बनाए रखना आसान हो जाता है। साथ ही, घटकों को पाइपलाइन के रूप में चलाना इस तरह से एक विधि कॉल के साथ पूरा किया जा सकता है:
SimplePipeline.runPipeline(reader, ae1, ..., aeN, consumer1, ... consumerN)
uimaFIT Apache UIMA(TM) परियोजना का एक भाग है। uimaFIT का उपयोग केवल Apache UIMA SDK के Java संस्करण के संगत संस्करण के साथ किया जा सकता है। आपकी सुविधा के लिए, uimaFIT के बाइनरी वितरण पैकेज में uimaFIT का उपयोग करने के लिए आवश्यक सभी लाइब्रेरी शामिल हैं। विशेष रूप से नौसिखिए उपयोगकर्ताओं के लिए, अलग से पूर्ण UIMA SDK की एक प्रति प्राप्त करने की दृढ़ता से सलाह दी जाती है।
uimaFIT Maven Central के माध्यम से उपलब्ध है। यदि आप अपने बिल्ड वातावरण के लिए Maven का उपयोग करते हैं, तो आप निम्नलिखित के साथ अपनी pom.xml फ़ाइल में uimaFIT को निर्भरता के रूप में जोड़ सकते हैं:
<dependencies>
<dependency>
<groupId>org.apache.uima</groupId>
<artifactId>uimafit-core</artifactId>
<version>3.6.0</version>
</dependency>
</dependencies>
मॉड्यूल
Apache UIMA बनाने के लिए, आपको कम से कम एक Java 17 JDK और एक हालिया Maven 3 संस्करण की आवश्यकता है।
स्रोत वितरण ZIP निकालने या रिपॉजिटरी को क्लोन करने के बाद, बनाई गई निर्देशिका में जाएँ और निम्नलिखित कमांड चलाएँ:
mvn clean install
अधिक विवरण के लिए, कृपया http://uima.apache.org/building-uima.html देखें।
आप Apache UIMA वेबसाइट से स्रोत और बाइनरी वितरण डाउनलोड कर सकते हैं।
अपनी पसंद के पैकेज (जैसे .zip या .gz) से Apache UIMA वितरण को अनपैक करने के बाद, UIMA को ठीक से काम करने के लिए नीचे दिए गए चरणों का पालन करें।
JAVA_HOME को अपने JRE इंस्टॉलेशन की निर्देशिका पर सेट करें जिसे आप UIMA के लिए उपयोग करना चाहते हैं।
UIMA_HOME को अपने अनपैक किए गए Apache UIMA वितरण की apache-uima निर्देशिका पर सेट करें।
अपने PATH में UIMA_HOME/bin जोड़ें।
कृपया वास्तविक UIMA_HOME निर्देशिका पथ के आधार पर उदाहरणों में पथों को अपडेट करने के लिए स्क्रिप्ट UIMA_HOME/bin/adjustExamplePaths.bat (या .sh) चलाएँ। यह स्क्रिप्ट एक Java प्रोग्राम चलाती है; आपके पास या तो PATH में java होना चाहिए या पर्यावरण चर JAVA_HOME को एक उपयुक्त JRE पर सेट करना चाहिए।
नोट: Mac OS X ऑपरेटिंग सिस्टम में वैश्विक पर्यावरण चर सेट करने की प्रक्रियाओं का वर्णन यहाँ किया गया है: http://developer.apple.com/qa/qa2001/qa1067.html देखें।
स्थापना का परीक्षण करने के लिए, bin उपनिर्देशिका में स्थित documentAnalyzer.bat (या .sh) फ़ाइल चलाएँ। इससे एक Document Analyzer विंडो पॉप अप होनी चाहिए। इस GUI में प्रदर्शित मानों को इस प्रकार सेट करें:
UIMA_HOME/examples/dataUIMA_HOME/examples/data/processedUIMA_HOME/examples/descriptors/analysis_engine/PersonTitleAnnotator.xmlऊपर UIMA_HOME को अपने Apache UIMA इंस्टॉलेशन के पथ से बदलें।
इसके बाद, Run बटन पर क्लिक करें, जो एक संक्षिप्त विराम के बाद, एक Analyzed Results विंडो पॉप अप करना चाहिए। उस दस्तावेज़ के विश्लेषण परिणाम प्रदर्शित करने के लिए किसी एक दस्तावेज़ पर डबल-क्लिक करें।
यहाँ कई प्रसिद्ध परियोजनाओं की सूची दी गई है जो अपने विश्लेषण उपकरणों को UIMA घटकों के रूप में प्रदान करती हैं या तृतीय-पक्ष विश्लेषण उपकरणों को UIMA घटकों के रूप में लपेटती हैं:
यह एक विस्तृत सूची नहीं है। यदि आपको लगता है कि किसी विशेष परियोजना को यहाँ सूचीबद्ध किया जाना चाहिए, तो कृपया हमें बताएं। आप अतिरिक्त परियोजनाएँ पा सकते हैं, उदाहरण के लिए:
Apache UIMA Java SDK का उपयोग Java वर्चुअल मशीन पर आधारित किसी भी प्रोग्रामिंग भाषा के साथ किया जा सकता है, जिसमें Java, Groovy, Scala और कई अन्य भाषाएँ शामिल हैं।
Python के साथ अंतरसंचालनीयता उदाहरण के लिए तृतीय-पक्ष DKPro Cassis लाइब्रेरी के माध्यम से प्राप्त की जा सकती है जिसका उपयोग XMI प्रारूप में CAS डेटा को पढ़ने, हेरफेर करने और लिखने के लिए किया जा सकता है।
Apache UIMA Java SDK UIMA विनिर्देश का एक Java-आधारित कार्यान्वयन है।
कृपया प्रश्न [email protected] पर निर्देशित करें।
यदि आप अकादमिक अनुसंधान का समर्थन करने के लिए uimaFIT का उपयोग करते हैं, तो कृपया निम्नलिखित पेपर को उपयुक्त रूप में उद्धृत करने पर विचार करें:
@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 इनक्यूबेटर में स्वीकार किया गया, जो एक Apache परियोजना बनने की औपचारिक प्रक्रिया की शुरुआत थी।
2008: UIMA ने Apache इनक्यूबेटर से स्नातक किया और एक शीर्ष-स्तरीय Apache परियोजना बन गई, जो इसकी परिपक्वता और सक्रिय विकास को दर्शाता है।
2009: Apache UIMA-AS (Asynchronous Scaleout) पेश किया गया, जो UIMA पाइपलाइनों के वितरित और अतुल्यकालिक प्रसंस्करण को सक्षम बनाता है।
2012: uimaFIT को Apache UIMA परियोजना में योगदान दिया गया। Apache uimaFIT को पहले uimaFIT के नाम से जाना जाता था, जिसे बदले में पहले UUTUC के नाम से जाना जाता था। इसके योगदान से पहले, यह कोलोराडो विश्वविद्यालय डेनवर में कम्प्यूटेशनल फार्माकोलॉजी केंद्र, कोलोराडो विश्वविद्यालय बोल्डर में कम्प्यूटेशनल भाषा और शिक्षा अनुसंधान केंद्र, और टेक्नीशे यूनिवर्सिटैट डार्मस्टाट में यूबिक्विटस नॉलेज प्रोसेसिंग (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 में विलय कर दिया गया।