summaryrefslogtreecommitdiff
path: root/decoder/apply_fsa_models.h
blob: 6561c70ca14fbf5454ad124db8fbec898da15060 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
#ifndef _APPLY_FSA_MODELS_H_
#define _APPLY_FSA_MODELS_H_

#include <string>
#include <iostream>
#include "feature_vector.h"
#include "named_enum.h"

struct FsaFeatureFunction;
struct Hypergraph;
struct SentenceMetadata;
struct HgCFG;


#define FSA_BY(X,t)                              \
  X(t,BU_CUBE,)                                 \
  X(t,BU_FULL,)                                 \
  X(t,EARLEY,)                                  \

#define FSA_BY_TYPE FsaBy

DECLARE_NAMED_ENUM(FSA_BY)

struct ApplyFsaBy {
/*enum {
  BU_CUBE,
  BU_FULL,
  EARLEY,
  N_ALGORITHMS
  };*/
  int pop_limit; // only applies to BU_FULL so far
  bool IsBottomUp() const {
    return algorithm==BU_FULL || algorithm==BU_CUBE;
  }
  int BottomUpAlgorithm() const;
  FsaBy algorithm;
  std::string name() const;
  friend inline std::ostream &operator << (std::ostream &o,ApplyFsaBy const& c) {
    o << c.name();
    if (c.algorithm==BU_CUBE)
      o << "("<<c.pop_limit<<")";
    return o;
  }
  explicit ApplyFsaBy(FsaBy alg, int poplimit=200);
  ApplyFsaBy(std::string const& name, int poplimit=200);
  ApplyFsaBy(const ApplyFsaBy &o) : algorithm(o.algorithm) {  }
  static std::string all_names(); // space separated
};

void ApplyFsaModels(HgCFG &hg_or_cfg_in,
                    const SentenceMetadata& smeta,
                    const FsaFeatureFunction& fsa,
                    DenseWeightVector const& weights, // pre: in is weighted by these (except with fsa featval=0 before this)
                    ApplyFsaBy const& cfg,
                    Hypergraph* out);

void ApplyFsaModels(Hypergraph const& ih,
                    const SentenceMetadata& smeta,
                    const FsaFeatureFunction& fsa,
                    DenseWeightVector const& weights, // pre: in is weighted by these (except with fsa featval=0 before this)
                    ApplyFsaBy const& cfg,
                    Hypergraph* out);


#endif