Concepts is a simple Python implementation of Formal Concept Analysis (FCA).
FCA provides a mathematical model for describing a set of objects (e.g. King Arthur, Sir Robin, and the holy grail) with a set of properties (e.g. human, knight, king, and mysterious) which each of the objects either has or not. A table called formal context defines which objects have a given property and vice versa which properties a given object has.
- GitHub: https://github.com/xflr6/concepts
- PyPI: https://pypi.org/project/concepts/
- Documentation: https://concepts.readthedocs.io
- Changelog: https://concepts.readthedocs.io/en/latest/changelog.html
- Issue Tracker: https://github.com/xflr6/concepts/issues
- Download: https://pypi.org/project/concepts/#files
This package runs under Python 2.7 and 3.4+, use pip to install:
$ pip install concepts
Rendering lattice graphs depends on the Graphviz software. Make sure its
dot executable is on your systems' path.
Create a formal context defining which object has which property, e.g. from a simple ASCII-art style cross-table with object rows and property columns (alternatively load a CXT or CSV file):
>>> from concepts import Context >>> c = Context.fromstring(''' ... |human|knight|king |mysterious| ... King Arthur| X | X | X | | ... Sir Robin | X | X | | | ... holy grail | | | | X | ... ''')
Query common properties of objects or common objects of properties (derivation):
>>> c.intension(['King Arthur', 'Sir Robin']) ('human', 'knight') >>> c.extension(['knight', 'mysterious']) ()
Get the closest matching objects-properties pair of objects or properties (formal concepts):
>>> c['Sir Robin', 'holy grail'] (('King Arthur', 'Sir Robin', 'holy grail'), ()) >>> c['king',] (('King Arthur',), ('human', 'knight', 'king'))
Iterate over the concept lattice of all objects-properties pairs:
>>> for extent, intent in c.lattice: ... print('%r %r' % (extent, intent)) () ('human', 'knight', 'king', 'mysterious') ('King Arthur',) ('human', 'knight', 'king') ('holy grail',) ('mysterious',) ('King Arthur', 'Sir Robin') ('human', 'knight') ('King Arthur', 'Sir Robin', 'holy grail') ()
Make a Graphviz visualization of the lattice (use
directly render it and display the resulting PDF):
>>> c.lattice.graphviz() # doctest: +ELLIPSIS <graphviz.dot.Digraph object at 0x...>
The generation of the concept lattice is based on the algorithm from C. Lindig. Fast Concept Analysis. In Gerhard Stumme, editors, Working with Conceptual Structures - Contributions to ICCS 2000, Shaker Verlag, Aachen, Germany, 2000.
The included example
CXT files are taken from Uta Priss' FCA homepage
The implementation is based on these Python packages:
The following package is build on top of concepts:
- features – Feature set algebra for linguistics
Concepts is distributed under the MIT license.