Difference between revisions of "D-Bus service for Apertium"

From Apertium
Jump to navigation Jump to search
(First bit about how to install Apertium's D-Bus bindings)
Line 1: Line 1:
 
[http://dbus.freedesktop.org/ D-Bus] is a simple inter-process communication system. We are in the process of developing D-Bus services for Apertium which will make programmatic access to the Apertium tools easier.
 
[http://dbus.freedesktop.org/ D-Bus] is a simple inter-process communication system. We are in the process of developing D-Bus services for Apertium which will make programmatic access to the Apertium tools easier.
  +
  +
We have started developing simple D-Bus bindings for Apertium which allow for:
  +
* discovery of details of the current Apertium installation and,
  +
* translations via a programmatic interface.
  +
  +
The D-Bus bindings are needed for some of the debugging tools, such as [[Apertium-view]].
  +
  +
==Installing the D-Bus bindings for Apertium==
  +
  +
You will need:
  +
* [http://www.freedesktop.org/wiki/Software/dbus D-Bus for Python] - almost every modern UNIX will have a package for this. You can install this in Debian/Ubuntu Linux by issuing:
  +
::<code>sudo apt-get install python-dbus</code>.
  +
* [[apertium-py]], which is a collection of Python routines that might be useful to people writing tools for Apertium. You can check it out using SVN:
  +
::<code>svn co http://apertium.svn.sourceforge.net/svnroot/apertium/apertium-tools/apertium-py</code>.
  +
:Installation is a breeze thanks to Python's distutils. In checkout directory (probably <code>apertium-py</code>) there should be a file called <code>setup.py</code>. Simply execute:
  +
::<code>python setup.py install</code>.
  +
:If you are using your system's stock Python interpreter, you'll probably have to execute that as root (<code>sudo python setup.py install</code>).
  +
* [[apertium-dbus]], which contains the actual D-Bus bindings. This is quite rough around the edges at the moment. To get the code, check out the code from SVN using:
  +
::<code>svn co http://apertium.svn.sourceforge.net/svnroot/apertium/apertium-tools/apertium-dbus</code>.
  +
:After checkout, you need to execute the <code>install_services.sh</code> script in the checked out directory. The command line format is ('''NB: This script assumes that your D-Bus activation directory is at <code>/usr/share/dbus-1/services</code>. If you don't know what I'm talking about, then you are probably safe, since this is the default for D-Bus.'''):
  +
::<code>./install_services.sh &lt;path to info.py and mode.py&gt; &lt;path to apertium&gt;</code>
  +
:The first parameter is the path to the files <code>info.py</code> and <code>mode.py</code> which are in the same directory as <code>install_services.sh</code> after checkout. Feel free to move them. The second parameter is the ''prefix'' to your Apertium installation. If your Apertium binaries are under <code>/usr/local/bin</code> (you can check this by running <code>which apertium</code> on the command line), then the prefix is <code>/usr/local</code>. On my machine, I invoked the script as follows:
  +
::<code>./install_services.sh /home/wynand/apertium-git/apertium-tools/apertium-dbus /usr/local</code>
  +
:since I keep <code>info.py</code> and <code>mode.py</code> in my development tree. You can also see that my Apertium installation is in <code>/usr/local</code>
  +
   
 
==D-Bus bus names==
 
==D-Bus bus names==

Revision as of 18:30, 14 December 2007

D-Bus is a simple inter-process communication system. We are in the process of developing D-Bus services for Apertium which will make programmatic access to the Apertium tools easier.

We have started developing simple D-Bus bindings for Apertium which allow for:

  • discovery of details of the current Apertium installation and,
  • translations via a programmatic interface.

The D-Bus bindings are needed for some of the debugging tools, such as Apertium-view.

Installing the D-Bus bindings for Apertium

You will need:

  • D-Bus for Python - almost every modern UNIX will have a package for this. You can install this in Debian/Ubuntu Linux by issuing:
sudo apt-get install python-dbus.
  • apertium-py, which is a collection of Python routines that might be useful to people writing tools for Apertium. You can check it out using SVN:
svn co http://apertium.svn.sourceforge.net/svnroot/apertium/apertium-tools/apertium-py.
Installation is a breeze thanks to Python's distutils. In checkout directory (probably apertium-py) there should be a file called setup.py. Simply execute:
python setup.py install.
If you are using your system's stock Python interpreter, you'll probably have to execute that as root (sudo python setup.py install).
  • apertium-dbus, which contains the actual D-Bus bindings. This is quite rough around the edges at the moment. To get the code, check out the code from SVN using:
svn co http://apertium.svn.sourceforge.net/svnroot/apertium/apertium-tools/apertium-dbus.
After checkout, you need to execute the install_services.sh script in the checked out directory. The command line format is (NB: This script assumes that your D-Bus activation directory is at /usr/share/dbus-1/services. If you don't know what I'm talking about, then you are probably safe, since this is the default for D-Bus.):
./install_services.sh <path to info.py and mode.py> <path to apertium>
The first parameter is the path to the files info.py and mode.py which are in the same directory as install_services.sh after checkout. Feel free to move them. The second parameter is the prefix to your Apertium installation. If your Apertium binaries are under /usr/local/bin (you can check this by running which apertium on the command line), then the prefix is /usr/local. On my machine, I invoked the script as follows:
./install_services.sh /home/wynand/apertium-git/apertium-tools/apertium-dbus /usr/local
since I keep info.py and mode.py in my development tree. You can also see that my Apertium installation is in /usr/local


D-Bus bus names

D-Bus allows services to be registered under Java style package names (e.g. org.apertium.my_service).

We envision two services:

  • org.apertium.info - this will expose objects to query various aspects of the installed apertium system.
  • org.apertium.translate - this will exposes translation functions.

Multiple objects can be registered with each service. Objects are given UNIX path names. For example, suppose we have English-Polish (en-pl) and English-Catalan (en-ca) translation modes installed in our system, then org.apertium.translate will expose at least four translation objects:

  • English->Catalan translation object,
  • Catalan->English translation object,
  • English->Polish translation object,
  • Polish->English translation object.

Given that one invokes these modes from the command line with "apertium en-ca", "apertium ca-en", "apertium en-pl" and "apertium pl-en", a good naming scheme for the objects would be:

  • /en-ca for the English->Catalan translation object
  • /ca-en for the Catalan->English translation object
  • /en-pl for the English->Polish translation object
  • /pl-en for the Polish->English translation object

These objects will have the full names org.apertium.translate/en-ca, org.apertium.translate/ca-en, org.apertium.translate/en-pl and org.apertium.translate/pl-en.

Alternative

Something that just creates the pipeline from the modes.xml file would be good, and then exposes each mode. If people want to change it they can edit the modes file, e.g.:

org.apertium.info

Would list information about what modes are installed, and what they correspond to (e.g. human readable language names, metadata that stuff... this could be in a separate "directory" xml file that is updated with each package installed.)

org.apertium.mode/<name>

Would be an interface to exectute a particular mode on a piece of text. Of course you still have the problem of the other command line options (-u, -f, etc...)