1

我是 Scala/Java 新手,如果这是一个相对简单的解决方案,我很抱歉——但我正在尝试访问外部文件中的模型(Apache Open NLP 模型),但不确定我哪里出错了. 这是你在 Java中的做法,这就是我正在尝试的:

import java.io._

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

效果很好,但是尝试根据该二进制文件中的模型实例化对象是我失败的地方:

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

我也尝试过 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

我不确定我错过了什么——也许有一些方法可以将 Stream 转换为一些我可以从中提取方法的二进制对象?感谢您的任何指点。

4

1 回答 1

7

问题是您使用了错误的语法(请不要将其视为个人内容,但是如果您打算坚持使用 java 或 scala 一段时间,为什么不先阅读一些初学者的 java 书籍,甚至只是一个教程呢? )

你会用java编写的代码

SentenceModel model = new SentenceModel(modelIn);

在 scala 中看起来很相似:

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

这种语法的问题是你忘记导入 SentenceModel 的定义,所以编译器根本不知道什么是 SentenceModel。

添加

import opennlp.tools.sentdetect.SentenceModel

在您的 .scala 文件的顶部,这将修复它。

于 2012-12-24T00:52:29.223 回答