This file is indexed.

/usr/include/irstlm/lmInterpolation.h is in libirstlm-dev 5.80.03-2.

This file is owned by root:root, with mode 0o644.

The actual contents of the file can be viewed below.

  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
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
// $Id: lmInterpolation.h 3686 2010-10-15 11:55:32Z bertoldi $

/******************************************************************************
IrstLM: IRST Language Model Toolkit
Copyright (C) 2006 Marcello Federico, ITC-irst Trento, Italy

This library is free software; you can redistribute it and/or
modify it under the terms of the GNU Lesser General Public
License as published by the Free Software Foundation; either
version 2.1 of the License, or (at your option) any later version.

This library is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
Lesser General Public License for more details.

You should have received a copy of the GNU Lesser General Public
License along with this library; if not, write to the Free Software
Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301 USA

******************************************************************************/

#ifndef MF_LMINTERPOLATION_H
#define MF_LMINTERPOLATION_H

#include <stdio.h>
#include <cstdlib>
#include <stdlib.h>
#include <string>
#include <math.h>
#include <vector>
#include "util.h"
#include "dictionary.h"
#include "n_gram.h"
#include "lmContainer.h"


/*
interpolation of several sub LMs
*/

#define MAX_TOKEN 2

class lmInterpolation: public lmContainer
{
  static const bool debug=true;
  int m_number_lm;
  int order;
  int dictionary_upperbound; //set by user
  double  logOOVpenalty; //penalty for OOV words (default 0)
  bool      isInverted;
  int memmap;  //level from which n-grams are accessed via mmap

  std::vector<double> m_weight;
  std::vector<std::string> m_file;
  std::vector<bool> m_isinverted;
  std::vector<lmContainer*> m_lm;

  int               maxlev; //maximun order of sub LMs;

  float ngramcache_load_factor;
  float dictionary_load_factor;

  dictionary *dict; // dictionary for all interpolated LMs

public:

  lmInterpolation(float nlf=0.0, float dlfi=0.0);
  virtual ~lmInterpolation() {};

  void load(const std::string filename,int mmap=0);
  lmContainer* load_lm(int i, int memmap, float nlf, float dlf);

  virtual double clprob(ngram ng,            double* bow=NULL,int* bol=NULL,char** maxsuffptr=NULL,unsigned int* statesize=NULL,bool* extendible=NULL);
  virtual double clprob(int* ng, int ngsize, double* bow=NULL,int* bol=NULL,char** maxsuffptr=NULL,unsigned int* statesize=NULL,bool* extendible=NULL);

  int maxlevel() const {
    return maxlev;
  };

  virtual inline void setDict(dictionary* d) {
		if (dict) delete dict;
    dict=d;
  };
	
  virtual inline dictionary* getDict() const {
    return dict;
  };

  //set penalty for OOV words
  virtual inline double getlogOOVpenalty() const {
    return logOOVpenalty;
  }

  virtual double setlogOOVpenalty(int dub);

  double inline setlogOOVpenalty(double oovp) {
    return logOOVpenalty=oovp;
  }

//set the inverted flag (used to set the inverted flag of each subLM, when loading)
  inline bool is_inverted(const bool flag) {
    return isInverted = flag;
  }

//for an interpolation LM this variable does not make sense
//for compatibility, we return true if all subLM return true
  inline bool is_inverted() {
    for (int i=0; i<m_number_lm; i++) {
      if (m_isinverted[i] == false) return false;
    }
    return true;
  }

  inline virtual void dictionary_incflag(const bool flag) {
    dict->incflag(flag);
  };

  inline virtual bool is_OOV(int code) { //returns true if the word is OOV for each subLM
    for (int i=0; i<m_number_lm; i++) {
      int _code=m_lm[i]->getDict()->encode(getDict()->decode(code));
      if (m_lm[i]->is_OOV(_code) == false) return false;
    }
    return true;
  }
};

#endif