Dear All

I have this little python script to run quick tests on moses models (see 
below).  The same script works on unix and windows, given the right 
paths.  I'm also using the same basic idea as a basis for the moses 
thread in a translation GUI.

Essentially, the MosesCMD class starts up moses in a subprocess, and 
subsequent calls to translate() send data in on the subprocess' stdin 
and receive translations on its stdout.

Anyway, on unix (actually MacOSX) this will run and run (haven't tested 
it on 1000s of sentences, but plenty); on windows, it packs in after 
five sentences (sometimes fewer) and completely freezes.  Automatically 
killing the subprocess and starting a new one after every three 
sentences works sometimes, but sometimes (eg when it's powering the 
moses thread in a GUI) actually makes things worse.

The moses decoder I'm using on windows I compiled under cygwin.  Both 
decoders are using the same irstlm language models.

I'm not very familiar with windows.  Does anyone have any ideas what 
might be causing the windows moses to keel over?  Is it something to do 
with the way windows manages threads/processes/memory?  Anything I can 
do?  Unfortunately has to run on windows.

With thanks and best wishes

Ivan

Here's the script:

#! /usr/bin/env python

import subprocess, time

class MosesCMD(object):
     def __init__(self):
         self.cmd_path = ''
         self.model_path = ''
         self.recaser_model_path = ''
         self.proc = None

     def start(self):
         cmd = "%s  -f  %s" % (self.cmd_path, self.model_path)
         if self.recaser_model_path:
             cmd = "%s  |  %s  -v 0  -f %s  -dl 1" \
                   % (cmd, self.cmd_path, self.recaser_model_path)
         self.proc = subprocess.Popen(cmd, shell=True,
                                      stdin=subprocess.PIPE,
                                      stdout=subprocess.PIPE,
                                      stderr=subprocess.PIPE)

     def translate(self, line):
         line = '%s\n' % line.strip()
         self.proc.stdin.write(line)
         return self.proc.stdout.readline().capitalize()

     def close(self):
         self.proc.kill()

def main():
     mc = MosesCMD()
     mc.cmd_path = "/path/to/mosesdecoder/moses-cmd/src/moses"
     mc.model_path = "/path/to/model/moses.ini"
     mc.recaser_model_path = "/path/to/recase/moses.ini"
     mc.start()

     time.sleep(1)
     print 'Ready.'

     cy = '*'
     while cy:
         cy = raw_input('cymraeg> ')
         en = mc.translate(cy)
         print 'saesneg> %s\n' %  en
     mc.close()

if __name__ == "__main__":
     main()


-- 
********************************
Ivan Uemlianin

Canolfan Bedwyr
Safle'r Normal Site
Prifysgol Bangor University
BANGOR
Gwynedd
LL57 2PZ

[email protected]
http://www.bangor.ac.uk/~cbs007/
********************************

_______________________________________________
Moses-support mailing list
[email protected]
http://mailman.mit.edu/mailman/listinfo/moses-support

Reply via email to