Distributed Morphology calculator
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
Create a plain text file that defines your analysis:
# example.yaml - simple demonstration of the analysis definition syntax title: English verbal agreement features: - 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 vis: - exponent: sleep features: [ V ] - exponent: -s features: [ Nom, +3, -pl ] - exponent: -Ø features: [ Nom ] paradigms: - name: Intransitive paradigm headers: [ [1, 2, 3], [sg, pl] ] inputs: - [ [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.
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
Raphael Finkel provides web-based engines for calculating Paradigm Function Morphology and Network Morphology analyses.
dmengine is distributed under the MIT license.