def run(self):
        logging.info('working dir is %s', self.config.experiment_dir)

        # get data
        logging.info('extracting data')
        Extractor(self.config).run()

        # learn lm
        logging.info('learning LM')
        SRILM(self.config).run_ngram_count()

        # train moses
        moses = Moses(self.config)
        logging.info('training TM')
        moses.run_train()

        # reweight using monolingual data
        if self.config.monolingual:
            logging.info('learning from monolingual data')
            NLReweighter(self.config).run()

        # filter disconnected rules
        if self.config.filter:
            logging.info('filtering disconnected rules')
            moses.filter_phrase_table()

        # tune moses
        if self.config.run == 'test':
            logging.info('tuning TM')
            moses.run_tune()

        if self.config.retrain:
            logging.info('retraining TM')
            moses.run_retrain()

        # decode input
        logging.info('decoding')
        moses.run_decode()

        if self.config.nlg:
            logging.info('running BLEU')
            BLEUScorer(self.config).run()
            pass

        else:
            # functionalize
            logging.info('functionalizing')
            Functionalizer(self.config).run()

            # compare answers
            logging.info('executing queries')
            if self.config.corpus == 'geo':
                GeoWorld(self.config).run()
            #elif self.config.corpus == 'atis':
            #  SlotChecker(self.config).run()
            else:
                QueryComparer(self.config).run()
  def run(self):
    logging.info('working dir is %s', self.config.experiment_dir)

    # get data
    logging.info('extracting data')
    os.system("cp "+sys.argv[1]+" "+self.config.experiment_dir+"/settings.yaml")
    os.system("cp dependencies.yaml "+self.config.experiment_dir)
    Extractor(self.config).run()

    # learn lm
    logging.info('learning LM')
    SRILM(self.config).run_ngram_count()

    # train moses
    logging.info('training TM')
    if self.config.decoder == 'moses':
      moses = Moses(self.config)
      moses.run_train()
    elif self.config.decoder == 'cdec':
      cdec = CDEC(self.config)
      cdec.run_train()

    # reweight using monolingual data
    if self.config.monolingual:
      logging.info('learning from monolingual data')
      NLReweighter(self.config).run()

    # filter disconnected rules
    if self.config.filter:
      logging.info('filtering disconnected rules')
      moses.filter_phrase_table()

    # tune moses
    if self.config.run == 'test' or self.config.run == 'all' :
      if self.config.decoder == 'moses':
        if self.config.weights != 'mert':
          logging.info('copying tuned weights')
          os.system("cp -r "+self.config.workdir+"/"+self.config.weights+" "+self.config.experiment_dir)
          with open(self.config.experiment_dir+"/mert-work/moses.ini", "r+") as f:
            data = f.read()
            #will break at the century change 2999->3000 ;) or if we travel back to the 19 hundreds for that matter..
            data = re.sub(r"/.*?2.*?/", r"%s/" % self.config.experiment_dir, data)
            f.seek(0)
            f.write(data)
            f.truncate()
        else:
          logging.info('tuning TM')
          moses.run_tune()    
      elif self.config.decoder == 'cdec':
        if self.config.weights == 'mert':
          logging.info('tuning TM using mert')
          cdec.run_tune('mert')
        elif self.config.weights == 'mira':
          logging.info('tuning TM using mira')
          cdec.run_tune('mira')
        else:
          logging.info('copying tuned weights')
          os.system("cp "+self.config.workdir+"/"+self.config.weights+" "+self.config.experiment_dir)

    if self.config.retrain: 
      logging.info('retraining TM')
      if self.config.decoder == 'moses':
        moses.run_retrain()

    # decode input
    logging.info('decoding')
    if self.config.decoder == 'moses':
      moses.run_decode()
    elif self.config.decoder == 'cdec':
      cdec.run_decode()
    if self.config.neg!="":
      if self.config.decoder == 'moses':
        moses.run_decode(True)
      elif self.config.decoder == 'cdec':
        cdec.run_decode(True)

    if self.config.nlg:
      logging.info('running BLEU')
      BLEUScorer(self.config).run()
      pass

    else:
      # functionalize
      logging.info('functionalizing')
      Functionalizer(self.config).run()
      if self.config.neg!="":
        Functionalizer(self.config).run(True)

      # compare answers
      logging.info('executing queries')
      if self.config.corpus == 'geo':
        GeoWorld(self.config).run()
      elif self.config.corpus == 'spoc':
        spocShip(self.config).run()
        if self.config.neg!="":
          spocShip(self.config).run(True)
      else:
        QueryComparer(self.config).run()
# -*- coding: utf-8 -*-

from PyQt4.QtGui import QApplication

import os
import sys

from mainWindow import MainWindow
from datamodel import DataModel
from moses import Moses

if __name__ == "__main__":
    app = QApplication(sys.argv)
    workdir = os.path.join(os.path.join(os.path.expanduser('~'), 'mosesgui'))
    if not os.path.exists(workdir):
        os.makedirs(workdir)
    dm = DataModel(filename=os.path.join(workdir, "models.sqlite"))
    moses = Moses()
    if not moses.detect():
        sys.exit(1)
    MainWindow = MainWindow(dm=dm, moses=moses, workdir=workdir)
    MainWindow.setupUi(MainWindow)
    MainWindow.show()
    sys.exit(app.exec_())
  def run(self):
    logging.info('working dir is %s', self.config.experiment_dir)

    # get data
    logging.info('extracting data')
    Extractor(self.config).run()

    # learn lm
    logging.info('learning LM')
    SRILM(self.config).run_ngram_count()

    # train moses
    moses = Moses(self.config)
    logging.info('training TM')
    moses.run_train()

    # reweight using monolingual data
    if self.config.monolingual:
      logging.info('learning from monolingual data')
      NLReweighter(self.config).run()

    # filter disconnected rules
    if self.config.filter:
      logging.info('filtering disconnected rules')
      moses.filter_phrase_table()

    # tune moses
    if self.config.run == 'test':
      logging.info('tuning TM')
      moses.run_tune()

    if self.config.retrain:
      logging.info('retraining TM')
      moses.run_retrain()

    # decode input
    logging.info('decoding')
    moses.run_decode()

    if self.config.nlg:
      logging.info('running BLEU')
      BLEUScorer(self.config).run()
      pass

    else:
      # functionalize
      logging.info('functionalizing')
      Functionalizer(self.config).run()

      # compare answers
      logging.info('executing queries')
      if self.config.corpus == 'geo':
        GeoWorld(self.config).run()
      #elif self.config.corpus == 'atis':
      #  SlotChecker(self.config).run()
      else:
        QueryComparer(self.config).run()