3

我的问题看起来很简单,但只是乍一看(对我来说:P)。
我需要创建一个构建特征向量的类。这个特征向量代表一个文本。特点是:平均词长,洞文本中的句子数量等。

在其他特征计算过程中可以提取一些特征,这就是为什么我稍微修改了一个 Builder 设计模式,它看起来像这样:

我正在创建一个构建器对象:

FeatureVectorBuilder fvb = new FeatureVectorBuilder(String text/InputStream <- now it doesn't matter) 

然后我指定一个订单,它表达了我想要包括哪些功能

fvb.setLenghtWord(True) <- for fixed length features
fvb.setXXXFeature(32) <- for variable length features

接下来我正在构建这个向量:

fvb.buildFeatureVector() <- this way computations are optimized;

最后我有一个 FeatureVector 得到。

fvb.getFeatureVector();

一切看起来都还不错,但是...大约有 32 个不同的功能需要设置...
这样,悲观的情况需要 32 个函数调用,同时创建一个具有 32 个参数的函数看起来很愚蠢。

我想知道是否有人在为这样的问题而苦苦挣扎,也许有比“32 种不同方法”方法更好的解决方案:)

4

2 回答 2

0

构建器模式的要点之一是通过在构建器中用多个方法替换它们来避免具有大量参数的方法。如果您有 32 个可能的功能,那么在构建器中拥有 32 个方法对我来说看起来很正常。

另一种可能性是将每个功能设计为一个类,并在构建器中添加这些类的实例:

builder.addFeature(new LengthWordFeature(true))
       .addFeature(new XxxFeature(32));
于 2012-11-01T21:06:09.387 回答
0

干净地封装功能的一种可能性是:

abstract class Feature
{
    String name;
    ...
}

class NumericFeature extends Feature
{
    int value;
}

class OtherFeatureType extends Feature
{
    ....
}

Feature[] features = new Feature[] {
    new NumericFeature("xxxFeature", 32),
    new OtherFeature("feature1", ...),
    ...
};

FeatureVectorBuilder fvb = new FeatureVectorBuilder(text, features);
于 2012-11-01T21:09:55.030 回答