Dear Jie
Thank you for your reply.
However, using flush() does not help (unless I misunderstand your
suggestion):
def translate(self, line):
line = '%s\n' % line
self.proc.stdin.write(line)
#self.proc.stdin.flush() # makes no difference
tr = self.proc.stdout.readline().capitalize()
#self.proc.stdout.flush() # bad file descriptor
return tr
Best
Ivan
On 04/05/2010 12:15, Jie Jiang wrote:
Hi Ivan:
Try to always call f.flush() after reading and writing operations in
python?
Best regards!
Jie Jiang
CNGL, School of Computing,
Dublin City University,
Glasnevin, Dublin 9.
Tel: +353 (0)1 700 6724
2010/5/4 Ivan Uemlianin <[email protected]
<mailto:[email protected]>>
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. nb: I'm not using communicate
as that kills the process after reading its output.
I wrote recently (5th April) that on Windows this script freezes after
five sentences, but on unix it's OK. Turns out on unix -- macOSX at least
-- it freezes after 38 sentences.
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.
Should the moses decoder be able to run indefinitely? Can anyone help me
work out what's going wrong here?
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] <mailto:[email protected]>
http://www.bangor.ac.uk/~cbs007/ <http://www.bangor.ac.uk/%7Ecbs007/>
********************************
_______________________________________________
Moses-support mailing list
[email protected] <mailto:[email protected]>
http://mailman.mit.edu/mailman/listinfo/moses-support
--
********************************
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