Difference between revisions of "Apertium-apy"
		
		
		
		
		
		
		Jump to navigation
		Jump to search
		
				
		
		
		
		
		
		
		
	
|  (→TODO) | |||
| Line 1: | Line 1: | ||
| '''Apertium-APy''' stands for "'''Apertium''' '''A'''PI in '''Py'''thon".  It's a simple apertium API server written in python, meant as a drop-in replacement for [[ScaleMT]].  It is currently found in the svn under trunk/apertium-tools/apertium-apy, where servlet.py is basically its entirety.  This is meant for front ends like the simple one in trunk/apertium-tools/simple-html (where index.html is the main deal). | '''Apertium-APy''' stands for "'''Apertium''' '''A'''PI in '''Py'''thon".  It's a simple apertium API server written in python, meant as a drop-in replacement for [[ScaleMT]].  It is currently found in the svn under trunk/apertium-tools/apertium-apy, where servlet.py is basically its entirety.  This is meant for front ends like the simple one in trunk/apertium-tools/simple-html (where index.html is the main deal). | ||
| ===Try it out=== | |||
| ⚫ | |||
| ⚫ | |||
| Try testing with e.g. | Try testing with e.g. | ||
|     export APERTIUMPATH="/path/to/svn/trunk" | |||
|     python3 servlet "$APERTIUMPATH" 2737 & |     python3 servlet "$APERTIUMPATH" 2737 & | ||
| Line 17: | Line 16: | ||
| And see how the last three (after a slight wait) start outputting before the first request is done. | And see how the last three (after a slight wait) start outputting before the first request is done. | ||
| ⚫ | |||
| ⚫ | |||
| ==TODO== | ==TODO== | ||
Revision as of 15:52, 10 October 2013
Apertium-APy stands for "Apertium API in Python". It's a simple apertium API server written in python, meant as a drop-in replacement for ScaleMT. It is currently found in the svn under trunk/apertium-tools/apertium-apy, where servlet.py is basically its entirety. This is meant for front ends like the simple one in trunk/apertium-tools/simple-html (where index.html is the main deal).
Try it out
Try testing with e.g.
export APERTIUMPATH="/path/to/svn/trunk" python3 servlet "$APERTIUMPATH" 2737 & curl -s --data-urlencode 'langpair=nb|nn' --data-urlencode \ 'q@/tmp/reallybigfile' 'http://localhost:2737/translate' >/tmp/output & curl 'http://localhost:2737/translate?langpair=nb%7Cnn&q=men+ikke+den' curl 'http://localhost:2737/translate?langpair=nb%7Cnn&q=men+ikke+den' curl 'http://localhost:2737/translate?langpair=nb%7Cnn&q=men+ikke+den'
And see how the last three (after a slight wait) start outputting before the first request is done.
Threading
Currently it uses TCPServer inheriting ThreadingMixIn. A lock on translateNULFlush (which has to have at most one thread per pipeline) ensures that part stays single-threaded (to avoid Alice getting Bob's text).
TODO
- It should be possible to set a time-out for translation threads, so if a translation is taking too long, it gets killed and the queue moves along.
- It should use one lock per pipeline, since we don't need to wait for mk-en just because sme-nob is running.
- http://stackoverflow.com/a/487281/69663 recommends select/polling over threading (http://docs.python.org/3.3/library/socketserver.html for more on the differences) but requires either lots of manually written dispatching code (http://pymotw.com/2/select/) or a framework like Twisted.
- some language pairs still don't work (sme-nob?)
- hfst-proc -g doesn't work with null-flushing (or?)

