2016-08-23 7 views
-1

Я новичок в Apache UIMA, и я пытаюсь построить конвейер NLP с использованием Apache UIMA. Когда пользователь загружает документ (т. Е. Pdf, слова), я хочу извлечь данные с помощью Tika Annotator. Я могу извлечь текст из pdf и других документов с помощью APache Tika, но как написать для этого Annotator и как передать вывод одного аннотатора в качестве входа в другой аннотатор. Я прошел через сайт UIMA Apache, но не смог много захватить с сайта, чтобы использовать его в своем проекте.Использование Apache UIMA для сборки NLP Operation Pipeline

, например, будет иметь Тик Annotator для извлечения текста, а затем выполнить токенизации в TokenAnnotator с использованием выходного Тик Annotator, а затем использовать TokenAnnotator выход в качестве входных данных POS Annotator

Любой помощь будет высоко оценил

+0

Привет, Рана, я думаю, это могло бы помочь, если бы вы могли предоставить более подробную информацию о фактических вариантах использования. Даже если у вас есть токены и POS-тегированные тексты, они не будут очень полезными. Что вы пытаетесь достичь в конце? –

+0

Привет, Я пытаюсь построить трубопровод в UIMA. Фактический пример использования выглядит следующим образом: (1) Вы загружаете какой-то документ в формате pdf, документ Word (2) Вы используете Apache Tika Annotator для извлечения содержимого из документа (3) Использование вывода Tika Annotator для выполнения белого пространства Tokenization (4) Выполнение тегов POS. – Rana

+0

То, что я понял. Но как только у вас есть текинированные тексты и помеченные тегами, какие будут следующие шаги? Поскольку, как правило, эти два шага являются предварительными шагами в конвейере NLP (если оптимизация токенизации и маркировки - это то, над чем вы работаете, но это не было похоже на это). –

ответ

2

UIMA использует CAS (или JCas, если вы делаете Java) как «общий контекст» между аннотаторами.

Итак, в вашем случае вы определяете конвейер UIMA Annotator как последовательность (TikaAnnotator, SentenceAnnotator, POSAnnotator), затем вызываете этот конвейер с документом PDF или Word в качестве входа. Возможно, вам придется сериализовать байты PDF/Word в качестве base64 и декодировать его, потому что CAS ожидает строку (ascii?) В документеText. TikaAnnotator будет читать байты PDF/Word, используя CAS.getDocumentText(), проанализировать текст и записать текст в AnnotationIndex с определенным типом класса аннотации (скажем, TikaAnnotation).

SentenceAnnotator вытащит текст из индекса Annotation с помощью ключа TikaAnnotation.class и добавит его в несколько SentenceAnnotations, которые снова выписаны в AnnotationIndex в CAS.

Наконец, POSAnnotator вытащит SentenceAnnotations по имени класса и для каждого из них выпишет несколько аннотаций POS обратно в индекс.

У меня есть код здесь, который может помочь проиллюстрировать выше. В Интернете также есть много подобных примеров, и у IIRC UIMA есть отличная документация.

http://sujitpal.blogspot.com/2011/04/uima-sentence-annotator-using-opennlp.html http://sujitpal.blogspot.com/2011/08/uima-noun-phrase-pos-annotator-using.html

UIMA зависит от сочетания конфигурации XML и Java коды, и я обнаружил, что система стала болью, чтобы сохранить через некоторое время. Для последующего (работающего) проекта (на основе POC, описанного в сообщении в блоге) вместо этого я выбрал UIMAFit.