skip to navigation
skip to content

dmengine 0.1

Distributed Morphology calculator

Latest Version: 0.2.3

DM-engine is a Python implementation of Distributed Morphology (DM).

Distributed Morphology is a framework from theoretical linguistics that is used to describe the morphology (word structure) of natural languages. This package provides an engine that calculates the word forms that are generated by a given DM analysis.

Analyses are entered as plain-text files in the human-friendly YAML format. Minimally, they consist of a title, an inventory of feature values, a list of insertable vocabulary items (VIs), and a list of inputs to be processed (see the example below). The dmengine command-line tool calculates the results and generates a detailed transcript of all calculations for later inspection. The resulting YAML file can be converted into a LaTeX-based report that optionally is directly compiled into a PDF file.


This package runs under Python 2.7, use pip to install:

$ pip install dmengine

This will also install the PyYAML and oset packages from PyPI as required dependencies.

Converting the results to a PDF report also requires a LaTeX distribution (TeX Live and MikTeX should work). Make sure its executables are on your systems’ path.


Create a plain text file that defines your analysis:

# example.yaml - simple demonstration of the analysis definition syntax
title: English verbal agreement
- value: V
  category: pos
- value: Nom
  category: case
- value: +1
  category: person
- value: +2
  category: person
- value: +3
  category: person
- value: -pl
  category: number
- value: +pl
  category: number
- exponent: sleep
  features: [ V ]
- exponent: -s
  features: [ Nom, +3, -pl ]
- exponent: 
  features: [ Nom ]
- name: Intransitive paradigm
  headers: [ [1, 2, 3], [sg, pl] ]
  - [ [V], [Nom, +1, -pl] ]
  - [ [V], [Nom, +1, +pl] ]
  - [ [V], [Nom, +2, -pl] ]
  - [ [V], [Nom, +2, +pl] ]
  - [ [V], [Nom, +3, -pl] ]
  - [ [V], [Nom, +3, +pl] ]

Save your analysis definition to a file ending with .yaml (e.g. example.yaml).

Open a shell (command line window) and navigate to the directory of your definition file.

Calculate the results of the analyis with the dmengine command creating a PDF report:

$ dmengine example.yaml --pdf

This will create three files:

  • example-results.yaml – plain-text file with the results in YAML format
  • example-results.tex – LaTeX source for the result report
  • example-results.pdf – PDF output of the report compiled with pdflatex


Go to the outputs section of the report. It provides a paradigm table of the calculated results:

The log section of the report contains detailed information about each individual input and the derivation of the output.

Invocation options

Check the usage of the dmengine command:

$ dmengine --help

usage: dmengine [-h] [--version] [--report] [--pdf] [--view]
                filename [directory]

Calculates a given Distributed Morphology (DM) analysis

positional arguments:
  filename    dm analysis .yaml definition file
  directory   analysis results output directory

optional arguments:
  -h, --help  show this help message and exit
  --version   show program's version number and exit
  --report    create a LaTeX report from the results
  --pdf       render the report to PDF (implies --report)
  --view      open the report in viewer app (implies --pdf)


Analyses can use the following types of rules that manipulate the input before insertion:

  • impoverishment – feature deletion
  • obliteration – head removal
  • fission – head feature extraction
  • fusion – head merging
  • copy – head duplication
  • add – features addition
  • metathesis – head position swapping

The following types of readjustment rules are supported (manipulating the output after insertion):

  • delete – exponent removal
  • copy – exponent duplication
  • metathesis – exponent position swapping
  • transform – regular expression search & replace


The insertion of vocabulary items and the application of pre-insertion rules can be restricted to the following context types:

  • this_head – the processed head must have the features
  • left_head – the left-adjacent head must have the features
  • right_head – the right-adjacent head must have the features
  • any_head – any input head must have the features
  • anywhere – features must be matched somewhere in the input

See also

Raphael Finkel provides web-based engines for calculating Paradigm Function Morphology and Network Morphology analyses.


dmengine is distributed under the MIT license.

File Type Py Version Uploaded on Size (md5) Source 2014-05-26 71KB