We provide a method of compressing a data stream for transmission, including: generating a data sequence representing a received data stream, generating a plurality of data substreams, each comprising a portion of the data sequence, identifying a formal concept defining a dependency between a first one of the data substreams and one or more further ones of the data sub streams that are dependent on the first data substream, removing those dependent data sub streams from the plurality of data sub streams, and transmitting the remaining data sub streams, and a method of reconstructing a data stream at a receiver, including: receiving a received data sequence representing a received data stream, identifying that a substream has been removed from the data stream prior to transmission, identifying a formal concept definition for regenerating the removed substream based on an identified substream of the received data sequence, regenerating a data substream using the formal concept definition and the identified sub stream of the received data sequence, and adding the regenerated data substream to the received data sequence.