[PYTHON] Générer un code de correction d'erreur pour restaurer la corruption des données avec la bibliothèque zfec

En utilisant la bibliothèque zfec, j'ai essayé de générer un code de correction d'erreur qui peut être restauré même si certaines données sont endommagées.

Diagramme d'image pour restaurer la corruption des données

La bibliothèque zfec utilise l'algorithme RAID-5 pour restaurer la corruption des données. L'algorithme Raid-5 peut être facilement compris en lisant ici. C'est un mécanisme simple qui utilise XOR, donc vous pouvez facilement le comprendre.

スクリーンショット 2016-02-25 16.33.13.png

スクリーンショット 2016-02-25 16.33.19.png

スクリーンショット 2016-02-25 16.33.36.png

Caractéristiques de la bibliothèque zfec

·de bonne heure ・ Il existe des API pour python, c, Haskel ・ Peut gérer des tableaux de caractères

https://pypi.python.org/pypi/zfec

Installation

pip install zfec

Générez un code de correction d'erreur à partir de 2 blocs et vérifiez

スクリーンショット 2016-02-25 16.33.13.png

2DataBlock


# -*- coding: utf-8 -*-
from __future__ import absolute_import, unicode_literals
import zfec

#Correction de la détection d'erreur
data_block1 = str('aiueo')
data_block2 = str('kakik')

#Code de détection d'erreur des blocs de données 1 et 2:Générer 3
_, _, data_block3 = zfec.Encoder(2, 3).encode([data_block1, data_block2])
print 'data block 3 is... {}'.format(data_block3)
# >>> data block 3 is... uyI}g

#Bloc de données 1 et code de détection d'erreur:Restaurer 3 à 2
_, repaired_data_block2 = zfec.Decoder(2, 3).decode([data_block1, data_block3, ], [0, 2])
assert data_block2 == repaired_data_block2

#Bloc de données 2 et code de détection d'erreur:Restaurer 3 à 1
repaired_data_block1, _ = zfec.Decoder(2, 3).decode([data_block2, data_block3, ], [1, 2])
assert data_block1 == repaired_data_block1


Générez un code de correction d'erreur à partir de 5 blocs et vérifiez

5DataBlock


# -*- coding: utf-8 -*-
from __future__ import absolute_import, unicode_literals
import zfec

#Correction de la détection d'erreur
data_block1 = str('aiueo')
data_block2 = str('kakik')
data_block3 = str('ukeko')
data_block4 = str('sasis')
data_block5 = str('useso')

#Code de détection d'erreur des blocs de données 1 et 2:Générer 3
blocks = zfec.Encoder(5, 6).encode([data_block1,
                                    data_block2,
                                    data_block3,
                                    data_block4,
                                    data_block5])

ecc_block = blocks[-1]
print str('ecc block is... {}').format(ecc_block)
# >>> ecc block is... J?\j

#Bloc de données 1-Restaurer 5 à partir de 4 et blocs ECC
repaired_blocks = zfec.Decoder(5, 6).decode([data_block1,
                                             data_block2,
                                             data_block3,
                                             data_block4,
                                             ecc_block], [0, 1, 2, 3, 5])
assert data_block5 == repaired_blocks[4]

#Bloc de données 1,2,4,Restaurer 3 à partir de 5 et bloc ECC
repaired_blocks = zfec.Decoder(5, 6).decode([data_block1,
                                             data_block2,
                                             data_block4,
                                             data_block5,
                                             ecc_block], [0, 1, 3, 4, 5])
assert data_block3 == repaired_blocks[2]

Recommended Posts

Générer un code de correction d'erreur pour restaurer la corruption des données avec la bibliothèque zfec
Résumé de la comparaison des bibliothèques pour générer des PDF avec Python
Paramètres pour entrer et déboguer le contenu de la bibliothèque avec VS Code
Essayez de traiter les données Titanic avec la bibliothèque de prétraitement DataLiner (Append)
Essayez de traiter les données Titanic avec la bibliothèque de prétraitement DataLiner (encodage)
Essayez de traiter les données Titanic avec la bibliothèque de prétraitement DataLiner (conversion)
Commande pour générer un code QR
À utiliser avec Cabocha pour générer automatiquement des données d'apprentissage "IOB2 tag corpus"
Accro au code de caractère en insérant et en extrayant des données avec SQL Alchemy
Essayez de traiter les données Titanic avec la bibliothèque de prétraitement DataLiner (Drop)
Code qui génère un score au hasard
Comment gérer les données déséquilibrées
Comment augmenter les données avec PyTorch
Générer de fausses données de table avec GAN
J'ai installé la bibliothèque avec Visual Studio Code, mais impossible d'importer