2016-08-23 4 views
-1

私はApache UIMAを初めて使用しており、Apache UIMAを使用してNLPパイプラインを構築しようとしています。ユーザーが文書(すなわちpdf、words)をアップロードするとき、Tika Annotatorを使用してデータを抽出したいと思います。私はpdacheやその他の文書からAPache Tikaを使ってテキストを抽出することができますが、このためにAnnotatorを書く方法と、ある注釈の出力を他の注釈に入力として渡す方法です。私はApache UIMAサイトを経由しましたが、私のプロジェクトで使用できるように、サイトから多くをキャプチャすることができませんでした。例えばApache UIMAを使用してNLPオペレーションパイプラインを構築する

は、任意の助けを大幅

+0

こんにちはラナ、実際のユースケースに関する詳細をご提供いただけると助かります。テキストをトークン化してPOSタグを付けたとしても、あまり役に立ちません。あなたが最終的に達成しようとしていることは何ですか? –

+0

こんにちは、私はUIMAでパイプラインを構築しようとしています。実際のユースケースは次のようになります(1)あなたはpdf、word document(2)Apache Tika Annotatorを使用してドキュメントからコンテンツを抽出します。(3)Tika Annotatorの出力を使用してホワイトスペーストークン化4)POSタギングを実行します。 – Rana

+0

それほど私は理解しました。しかし、テキストをトークン化してPOSタグを付けると、次のステップは何でしょうか?通常、これらの2つのステップは、NLPパイプラインの予備ステップです(トークン化とタグ付けを最適化しているものがあなたの作業である場合を除きますが、そのようなものではありません)。 –

答えて

2

UIMAを理解されるテキストを抽出して出力ティカアノテータを用いTokenAnnotatorにトークン化を実行してPOSアノテータ

への入力としてTokenAnnotator出力を使用するティカアノテータを有するであろうアノテータ間の「共有コンテキスト」としてCAS(またはJavaを実行している場合はJCas)を使用します。

UIMA Annotatorパイプラインを(TikaAnnotator、SentenceAnnotator、POSAnnotator)のシーケンスとして定義し、PDFまたはWordドキュメントを入力としてこのパイプラインを呼び出します。 PDF/Wordのバイトをbase64としてシリアル化し、それを元に戻す必要があるかもしれません。なぜなら、CASはdocumentTextに(ascii?)文字列を期待しているからです。 TikaAnnotatorは、CAS.getDocumentText()を使用してPDF/Wordバイトを読み取り、テキストを解析して、特定のタイプのAnnotationクラス(たとえばTikaAnnotation)を持つAnnotationIndexにテキストを書き出します。

SentenceAnnotatorは、TikaAnnotation.classキーを使用してAnnotationインデックスからテキストを取り出し、複数のSentenceAnnotationsにトークン化します。複数のSentenceAnnotationsは、CASのAnnotationIndexに再度書き込まれます。

最後に、POSAnnotatorはSentenceAnnotationsをクラス名で引き出し、それぞれに対して、複数のPOSアノテーションをインデックスに書き戻します。

私は上記の説明に役立ついくつかのコードを用意しています。 Web上にも多くの類似の例があり、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を選択しました。

関連する問題