JennyDanger
JennyDanger

Reputation: 616

How can I translate this deserialization code from java to scala?

I'm a Scala/Java noob, so sorry if this is a relatively easy solution--but I'm trying to access a model in an external file (an Apache Open NLP model), and not sure where I'm going wrong. Here's how you'd do it in Java, and here's what I'm trying:

import java.io._

val nlpModelPath = new java.io.File( "." ).getCanonicalPath + "/lib/models/en-sent.bin"
val modelIn: InputStream = new FileInputStream(nlpModelPath)

which works fine, but trying to instantiate an object based off the model in that binary file is where I'm failing:

val sentenceModel = new modelIn.SentenceModel // type SentenceModel is not a member of java.io.InputStream
val sentenceModel = new modelIn("SentenceModel") // not found: type modelIn

I've also tried a DataInputStream:

val file = new File(nlpModelPath)
val dis = new DataInputStream(file)
val sentenceModel = dis.SentenceModel() // value SentenceModel is not a member of java.io.DataInputStream

I'm not sure what I'm missing--maybe some method to convert the Stream to some binary object from which I can pull in methods? Thank you for any pointers.

Upvotes: 1

Views: 161

Answers (1)

om-nom-nom
om-nom-nom

Reputation: 62835

The problem is that you're using wrong syntax (please, don't take it personal, but why don't you read some beginner java book or even just a tutorial first if you planning to stick with java or scala for some time?)

Code you would write in java

SentenceModel model = new SentenceModel(modelIn);

will look similar in scala:

val model: SentenceModel = new SentenceModel(modelIn)
// or just 
val model = new SentenceModel(modelIn)

The problem you got with this syntax is that you forgot to import definition of SentenceModel so compiler simply has no clue what is SentenceModel.

Add

import opennlp.tools.sentdetect.SentenceModel

At the top of your .scala file and this will fix it.

Upvotes: 7

Related Questions