Giter Site home page Giter Site logo

tomhanika / conexp-clj Goto Github PK

View Code? Open in Web Editor NEW
47.0 5.0 23.0 10.35 MB

A General-Purpose Tool for Formal Concept Analysis

License: Eclipse Public License 1.0

Makefile 0.02% Clojure 57.33% HTML 1.03% Python 0.43% Shell 0.01% C# 16.23% Batchfile 0.01% Emacs Lisp 0.01% Java 23.98% TeX 0.80% GSC 0.02% Nix 0.15%
formal-concept-analysis clojure order-theory order lattice closure-systems

conexp-clj's Introduction

conexp-clj Build Status built with nix

This is conexp-clj, a general purpose software tool for Formal Concept Analysis. Its main purpose is to enable nontrivial examples to be computed easily, but it can be used for much, much more.

Documentation

  1. Getting Started
  2. Don't Bother Me with Theory, I Want to Do Stuff! (aka: Tutorials)
    1. A Gentle Introduction (ICFCA 2013)
    2. Compute the Canonical Base from a Formal Context that is given in CSV Format
  3. A more complete overview over conexp-clj
    1. Notation and Syntax
    2. Creating and Working with Formal Contexts
    3. Concept Lattices
    4. IO for Formal Contexts
    5. Implications
    6. Exploration
    7. Scaling Many-Valued Contexts
  4. Example use cases of conexp-clj
    1. Formal Contexts from Implications
    2. A Formal Context of Functions
    3. Context of All Permutations on a Finite Set
    4. The Tamari Lattice
    5. Preconcept Covers
    6. Number of Elements of the Free Distributive Lattice
    7. Counting Linear Extensions
    8. Computing Traces in Contexts
    9. Counting Quasiorders
    10. Rudolph's Algorithm for Computing Bases
  5. Advanced Topics
    1. pq-cores
    2. REST-API Usage
    3. triadic-exploration
    4. protoconcepts
    5. Incomplete Contexts
  6. API documentation
  7. Development

History

The project has been started by Daniel Borchmann under supervision of Christian Meschke as part of the DFG project GA 216/10-1. It has since been developed further into a general purpose FCA tool by Daniel Borchmann until his departure from academia in 2017. From then on, Tom Hanika took over and is still the principal maintainer of conexp-clj.

Limitations

Note that conexp-clj is not a high-performance tool for Formal Concept Analysis and may sometimes be considerably slower then comparable tools. If you want more performance, check out Uta Priss' website on FCA software.

Contributing Authors

See AUTHORS.md.

How to cite conexp-clj?

If you have used conexp-clj for your scientific work, the developers would appreciate if you use the following reference.

@inproceedings{DBLP:conf/icfca/HanikaH19,
  author    = {Tom Hanika and
               Johannes Hirth},
  editor    = {Diana Cristea and
               Florence Le Ber and
               Rokia Missaoui and
               L{\'{e}}onard Kwuida and
               Baris Sertkaya},
  title     = {Conexp-Clj - {A} Research Tool for {FCA}},
  booktitle = {Supplementary Proceedings of {ICFCA} 2019 Conference and Workshops,
               Frankfurt, Germany, June 25-28, 2019},
  series    = {{CEUR} Workshop Proceedings},
  volume    = {2378},
  pages     = {70--75},
  publisher = {CEUR-WS.org},
  year      = {2019},
  url       = {http://ceur-ws.org/Vol-2378/shortAT8.pdf},
  timestamp = {Wed, 12 Feb 2020 16:44:55 +0100},
  biburl    = {https://dblp.org/rec/conf/icfca/HanikaH19.bib},
  bibsource = {dblp computer science bibliography, https://dblp.org}
}

License

Copyright ⓒ 2009—2018 Daniel Borchmann, 2018–2023 Tom Hanika

Distributed under the Eclipse Public License.

This program uses an adapted version of the G library, a 2D graphics library and rendering engine for Java, ⓒ 2009 GeoSoft, licensed under the GNU Lesser General Public License (LGPL). Modifications to the original version of G are only concerned with exposing internals necessary for conexp-clj to work. The modified version of G is again licensed under LGPL.

This program uses parts of the LatDraw library, ⓒ 2002 Ralph Freese.

conexp-clj's People

Contributors

ansvonwa avatar de-narm avatar exot avatar github-actions[bot] avatar hirthjo avatar immo avatar jana-fischer avatar kanterov avatar maximilian-felde avatar mmarx avatar mstubbemann avatar tomhanika avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar

conexp-clj's Issues

GUI does not close on exit

When exiting the GUI via the menu, the window stays open. Pressing return in the repl closes both the GUI and the repl. It is unclear why the repl still waits for input in this situation.

Problem Running conexp-clj on OS X

Hi,

as the title suggests I have some difficulty running conexp-clj. Running conexp-clj from source with lein repl works fine. However, I'd like to run the GUI. I did not find out how to do it from the source. If you could mention how to do it in the documentation that'd be great.

Running the compiled binary does not work at all. Whenever I run conexp-clj resp. conexp-clj --gui I get the following error message:

readlink: illegal option -- f
usage: readlink [-n] [file ...]
usage: dirname path
Error: Could not find or load main class jline.ConsoleRunner

The problem seems to be that OS X's/BSD's readline command has no f-flag. Maybe you could add special case behaviour such that on OS X readline is called without the f-flag or that somehow the readline solution is replaced with an equivalent but different command.

Common FCA formats for formal contexts are missing

When using conexp-clj as a RESTful service, it is important to explain the standardized communication formats to the user. The communication formats are already specified to a certain extent in the REST API documentation. However, there is no comprehensive documentation. REST API documentation https://github.com/exot/conexp-clj/blob/dev/doc/REST-API-usage.md already refers to an introductory page on formats: https://github.com/exot/conexp-clj/blob/dev/doc/Common-FCA-File-Formats-for-Formal-Contexts. Unfortunately, this page is not available.

It would be helpful to add a page about common formats of formal contexts and provide a clear link to how these formats can be used based on the conexp-clj RESTful API.

Tikz export

Special characters in attribute/object names need to be escaped.

Rest Api and maps/keywords

In conexp.api.handler the read-data function does only evaluate the keys of a map. Values are untouched.
For write-fca we need to evaluate v to the content of a variable.

"map" (if (some? raw)
               (into {} (for [[k v] raw] [(edn/read-string (name k)) v])))

For other I/O methods, we need the API option to convert inputs to keywords.

Add general graph library

More and more functionality is based on advanced graph theory, and conexp-clj should contain a sufficiently advanced graph library for this. A first idea would be to replace the implementation of conexp.util.graph with an interface to some Java graph library. If this fails, the interface of conexp.util.graph could also be changed, as it is used only in the layouts part of conexp-clj.

In any way, conexp should have some functional interface to a graph implementation in conexp.util.graph (or somesuch) and should use this instead of directly using Java classes throughout it's code.

Disable Wiki

The wiki has been superseded by the documentation contained directly in the code repository of conexp-clj. I would propose to either disable it completely, or remove all files but the main Home.md file, containing only a line akin to

This wiki is obsolete, please refere to the [official documentation](https://github.com/tomhanika/conexp-clj/README.md) of `conexp-clj`.

Download Link is Broken

Dear Mr,I am student from an university in china.
For the research reasons,I found your FCA tool here,and it really a great one to fit my research(it can do the FFCA work).But when I try to download the source code,I just met a 404 ERROR.So I have to download the source code to compile it on Linux.
However because the firewall in china is so strong,so I cant get all the dependencies which are needed in the process of compiling.So I thought to visit your homepage,could you please send me the compiled version of the conexp-clj.
Please do me a favor,thank you very much.my mailbox address is [email protected].

Many valued context :data-table input format

The read-mv-context throws an exception for the :data-table input format if an attribute name contains a white spaces.

This method stores attributes as symbols. A conversion to String should fix the issue.

Number of values in lines in file .. does not match given attributes.

Obsolete and Scattered Documentation

Hey,

to me it seems that the documentation is a bit obsolete and scattered at different places. More precisely, there is documentation in the doc/ directory as well as well as in the wiki, and the documentation has mostly not been touched in a while. To remedy this, I would propose the following actions:

  • remove the doc/ directory and incorporate the documentation into the wiki (there is already a high degree of overlap between the wiki and the example files)
  • make clear in the README that documentation can be found in the wiki and that new documentation should go there
  • make sure that all new features are mentioned at least briefly in the wiki
  • document old experiments (currently located in doc/experiments/) or remove them
  • experimental: if possible, convert the wiki format to org-mode, so that we can make use of source code blocks and automatic evaluation, to keep the wiki up to date (future)

The current version of the wiki should always document the current version of dev/, with tags pointing to the versions of the wiki corresponding to official releases.

Any ideas about this? If this is okay, I would start working on this on a separate branch in both the wiki and the main repository of conexp-clj.

Cheers,

  Daniel

json format drops empty attribute columns

The json format drops empty attribute columns:

> (def K (cxt/make-context-from-matrix [1 2] [:a :b] [1 0 0 0]))
> K
  |:a :b 
--+------
1 |x  .  
2 |.  .  

> (json->ctx (:formal_context (ctx->json K)))
  |:a 
--+---
1 |x  
2 |.  

Additionally, I expected (json->ctx (ctx->json K)) to be the correct syntax and not require :formal_context to first unpack the map.

Add contribution guide

There is no contribution guide, but the original developer (me) has some very specific demands on the code quality of conexp-clj. This should be fixed in some document.

`lein uberjar` is broken on current `dev`

#70 has broken lein uberjar on current dev head 3cb86b4:

[…]
Compiling conexp.fca.triadic-exploration
Syntax error macroexpanding at (triadic_exploration.clj:345:14).
Execution error (IllegalArgumentException) at conexp.fca.contexts/fn$G (contexts.clj:16).
No implementation of method: :objects of protocol: #'conexp.fca.contexts/Context found for class: conexp.fca.contexts.Formal-Context
[…]

Reverting 3cb86b4 fixes the build. I am not sure what the problem is; the code works fine in the REPL.

Plan Browser GUI interface

Tom would like to have a browser-based GUI interface (and I would like to have it, too), so this should be planned.

Add functionality to compute proto concepts

There was a request for implementing the capability to compute and visualize proto concepts.
To do this, we have to implement:

  • an efficient algorithm to compute all proto concepts
  • translation of those into an layout

Export tikz from the gui does not include valuations

The tikz export from the GUI does not include the valuations. It does work when using the write-layout function from the REPL. I suspect the value function is lost by calling get-layout-from-scene function.

Ordered contexts

Provide the additional option to work with contexts with ordered objects and attributes.
e.g., keeping the order when reading a context from a file

Thoughts on the task:

  • The Ordered-Context object consists of a set of objects, a set of attributes, the incidence relation (either as set or as function) and the orders on objects and attributes. The orders on objects / attributes are given separately to allow using existing functions from 'fca/contexts.clj'. (In detail, these are all functions in 'fca/contexts.clj' that do not call one of the constructors make-context-nc and make-context.)
  • There are some functions in 'fca/contexts.clj' that use make-context-nc or make-context, e.g., rename-objects. An idea is to wrap these functions such that:
    ordered-context is converted to formal-context -> function is used on formal-context -> result is converted back to ordered-context (changes on order of objects and attributes might be required).
  • Functions for read and write (I/O) needed.
  • What about many-valued-contexts?

(Current status: branch 'ordered-contexts' linked under 'Development'. Constructors, some functions and tests are already written.)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.