我正在尝试在Clojure项目中使用Scala库,但遇到了一些问题。您将如何在Clojure中实现以下Scala代码?
object LabelDomain extends CategoricalDomain[String]
class Label(val token: Token, s: String) extends LabeledCategoricalVariable(s) {
def domain = LabelDomain
}
object FeaturesDomain extends CategoricalDimensionTensorDomain[String]
class Features(val token: Token) extends BinaryFeatureVectorVariable[String] {
def domain = FeaturesDomain
}
object model extends ChainModel[Label, Features, Token](
LabelDomain,
FeaturesDomain,
l => l.token.attr[Features],
l => l.token,
t => t.attr[Label])
CategoricalDomain
和CategoricalDimensionTensorDomain
是特征。
LabeledCategoricalVariable
和BinaryFeatureVectorVariable
是抽象类。
ChainModel
是一个班级。
答案 0 :(得分:0)
看起来你正试图将FACTORIE与clojure一起使用。作为一个既喜欢clojure并且在建立FACTORIE的实验室工作的人,我也不会推荐这个。 FACTORIE的代码库以非常强制的方式编写,并且充满了可变状态。如果我在clojure中抓住了一个FACTORIE对象,我会发现它非常迷惑。 FACTORIE还积极使用scala功能,这些功能无法很好地转换为已编译的java(这是clojure和scala必须交互的级别)。
如果你已经拥有一个大型的clojure代码库并且需要一个良好的线性链CRF实现(基于你使用上面的ChainModel
),我建议你查看MALLET。它是纯Java,由同一个实验室开发。