Feature set algebra for linguistics
Project description
Features is a simple implementation of feature set algebra in Python.
Linguistic analyses commonly use sets of binary or privative features to refer to different groups of linguistic objects: for example a group of phonemes that share some phonological features like [-consonantal, +high] or a set of morphemes that occur in context of a specific person/number combination like [-participant, GROUP]. Usually, the features are applied in a way such that only some of their combinations are valid, while others are impossible (i.e. refer to no object) – for example [+high, +low], or [-participant, +speaker].
With this package, such feature systems can be defined with a simple contingency table definition (feature matrix) and stored under a section name in a simple clear-text configuration file. Each feature system can then be loaded by its name and provides its own FeatureSet subclass that implements all comparisons and operations between its feature sets according to the given definition (compatibility, entailment, intersection, unification, etc.).
Features creates the complete lattice structure between the possible feature sets of each feature system and lets you navigate and visualize their relations using the Graphviz graph layout software.
Links
Documentation: https://features.readthedocs.io
Changelog: https://features.readthedocs.io/en/latest/changelog.html
Issue Tracker: https://github.com/xflr6/features/issues
Download: https://pypi.org/project/features/#files
Installation
This package runs under Python 2.7 and 3.5+, use pip to install:
$ pip install features
This will also install the concepts package from PyPI providing the Formal Concept Analysis (FCA) algorithms on which this package is based.
Quickstart
Load a predefined feature system by name (in this case features for a six-way person/number distinction, cf. the definitions in the bundled config.ini in the source repository).
>>> import features
>>> fs = features.FeatureSystem('plural')
>>> print(fs.context) # doctest: +ELLIPSIS
<Context object mapping 6 objects to 10 properties [3011c283] at 0x...>
|+1|-1|+2|-2|+3|-3|+sg|+pl|-sg|-pl|
1s|X | | |X | |X |X | | |X |
1p|X | | |X | |X | |X |X | |
2s| |X |X | | |X |X | | |X |
2p| |X |X | | |X | |X |X | |
3s| |X | |X |X | |X | | |X |
3p| |X | |X |X | | |X |X | |
Create feature sets from strings or string sequences. Use feature string parsing, get back string sequences and feature or extent strings in their canonical order (definition order):
>>> fs('+1 +sg'), fs(['+2', '+2', '+sg']), fs(['+sg', '+3'])
(FeatureSet('+1 +sg'), FeatureSet('+2 +sg'), FeatureSet('+3 +sg'))
>>> fs('SG1').concept.intent
('+1', '-2', '-3', '+sg', '-pl')
>>> fs('1').string, fs('1').string_maximal, fs('1').string_extent
('+1', '+1 -2 -3', '1s 1p')
Use feature algebra: intersection (join) , union/unification (meet), set inclusion (extension/subsumption). Do feature set comparisons (logical connectives).
>>> fs('+1 +sg') % fs('+2 +sg')
FeatureSet('-3 +sg')
>>> fs('-3') ^ fs('+1') ^ fs('-pl')
FeatureSet('+1 +sg')
>>> fs('+3') > fs('-1') and fs('+pl') < fs('+2 -sg')
True
>>> fs('+1').incompatible_with(fs('+3')) and fs('+sg').complement_of(fs('+pl'))
True
Navigate the created subsumption lattice (Hasse graph) of all valid feature sets:
>>> fs('+1').upper_neighbors, fs('+1').lower_neighbors
([FeatureSet('-3'), FeatureSet('-2')], [FeatureSet('+1 +sg'), FeatureSet('+1 +pl')])
>>> fs('+1').upset()
[FeatureSet('+1'), FeatureSet('-3'), FeatureSet('-2'), FeatureSet('')]
>>> for f in fs: # doctest: +ELLIPSIS
... print('[%s] <-> {%s}' % (f.string_maximal, f.string_extent))
[+1 -1 +2 -2 +3 -3 +sg +pl -sg -pl] <-> {}
[+1 -2 -3 +sg -pl] <-> {1s}
...
[-1] <-> {2s 2p 3s 3p}
[] <-> {1s 1p 2s 2p 3s 3p}
See the docs on how to define, load, and use your own feature systems.
Further reading
See also
concepts – Formal Concept Analysis with Python
fileconfig – Config file sections as objects
graphviz – Simple Python interface for Graphviz
License
Features is distributed under the MIT license.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
File details
Details for the file features-0.5.11.zip
.
File metadata
- Download URL: features-0.5.11.zip
- Upload date:
- Size: 126.4 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/1.13.0 pkginfo/1.5.0.1 requests/2.22.0 setuptools/41.0.1 requests-toolbelt/0.9.1 tqdm/4.32.1 CPython/2.7.16
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | f5b5b507ad0e3384686ebe9f811c685bbb3686f5c58acf6ca61f66cf67e01959 |
|
MD5 | 7122191ae94e64ead6466c4773e2ec0d |
|
BLAKE2b-256 | 3f29b7c73372f3196c67e34b3f4d7992053d89fbcd92b9eee2086add25fccfbe |
File details
Details for the file features-0.5.11-py2.py3-none-any.whl
.
File metadata
- Download URL: features-0.5.11-py2.py3-none-any.whl
- Upload date:
- Size: 15.8 kB
- Tags: Python 2, Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/1.13.0 pkginfo/1.5.0.1 requests/2.22.0 setuptools/41.0.1 requests-toolbelt/0.9.1 tqdm/4.32.1 CPython/2.7.16
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | f27f8a0d91fb37ff0da07b48494860e1ef04e17e7215c71314a0d1c7c9a1be62 |
|
MD5 | da215f468e52c07a664b747913ec76b2 |
|
BLAKE2b-256 | 7ca1263892cd8cd8c15d9132994d334b1e4294850071351bbea702749d631073 |