2016-07-20 7 views
0

除き、そうでなければ、試してみてください。Scalaは、私がこのようなコードを持っているブロック

val extractInfo: (Array[Byte] => String) = (fp: Array[Byte]) => { 

    val parser:Parser = new AutoDetectParser() 
    val handler:BodyContentHandler = new BodyContentHandler(Integer.MAX_VALUE) 
    val config:TesseractOCRConfig = new TesseractOCRConfig() 
    val pdfConfig:PDFParserConfig = new PDFParserConfig() 

    val inputstream:InputStream = new ByteArrayInputStream(fp) 

    val metadata:Metadata = new Metadata() 
    val parseContext:ParseContext = new ParseContext() 
    parseContext.set(classOf[TesseractOCRConfig], config) 
    parseContext.set(classOf[PDFParserConfig], pdfConfig) 
    parseContext.set(classOf[Parser], parser) 
    parser.parse(inputstream, handler, metadata, parseContext) 

    handler.toString 
} 

アパッチティカを使用してPDFファイルからテキストを解析関数リテラル。

ここで私が望むのは、parser.parseで実行され、実行できない場合は空の文字列を返すTryブロックです。私はScalaでこの種のロジックを構築する方法がわかりません。

答えて

4

あなたが探しているものはTryだと思います。

val extractInfo: (Array[Byte] => String) = (fp: Array[Byte]) => Try { 
    val parser:Parser = new AutoDetectParser() 
    ... 
    handler.toString 
} getOrElse("") 

これは、本文のエラーをキャッチし、空の文字列を返すことでこのエラーから回復します。

+0

これはまさに私が探していたものです。ありがとう。 – tadamhicks

2

tryがちょうどifまたはmatchのように、Scalaでは式ですので、あなただけの

try { 
    val parser:Parser = new AutoDetectParser() 
    val handler:BodyContentHandler = new BodyContentHandler(Integer.MAX_VALUE) 
    val config:TesseractOCRConfig = new TesseractOCRConfig() 
    val pdfConfig:PDFParserConfig = new PDFParserConfig() 

    val inputstream:InputStream = new ByteArrayInputStream(fp) 

    val metadata:Metadata = new Metadata() 
    val parseContext:ParseContext = new ParseContext() 
    parseContext.set(classOf[TesseractOCRConfig], config) 
    parseContext.set(classOf[PDFParserConfig], pdfConfig) 
    parseContext.set(classOf[Parser], parser) 
    parser.parse(inputstream, handler, metadata, parseContext) 

    handler.toString 
} catch { 
    case e: Exception => "" 
} 

を書くことができます。ただし、""をセンチネル値として使用する場合(結果が空であるかどうかを確認してエラーが発生したかどうかを後で確認する)、そうしないでください。代わりに戻り値の型としてOption[String]またはTry[String]を使用してください。

関連する問題