Notes utilisant cChardet et python3-chardet dans Python 3.3.1.

Il existe une bibliothèque Python appelée chardet. Si vous entrez la chaîne d'octets, vous pouvez déduire le code de caractère dans lequel la chaîne d'octets a été écrite.

Je voulais utiliser chardet avec Python3, mais l'officiel n'est pas encore compatible avec Python3.

Quand je l'ai cherché, j'ai trouvé une bibliothèque appelée python3-chardet qui a fourchu chardet, j'ai donc décidé de l'utiliser.

Installation

Téléchargez et installez à partir de github.

$ git clone [email protected]:bsidhom/python3-chardet.git 

Dans le répertoire créé dans

$ python setup.py install

Ensuite, l'installation est terminée.

Expérience

ipython3


import chardet

chardet.detect('abc'.encode('utf-8'))
> {'confidence': 1.0, 'encoding': 'ascii'}

chardet.detect('AIUEO'.encode('utf-8'))
> {'confidence': 0.9690625, 'encoding': 'utf-8'}

chardet.detect('AIUEO'.encode('Shift-JIS'))
> {'confidence': 0.5, 'encoding': 'windows-1252'}

Cela a fonctionné correctement. Je suis un peu inquiet que'aiueo '.encode (' Shift-JIS ') ait été jugé être windows-1252, mais comme la confiance est de 0,5, la confiance de Chardet peut être à moitié sûre. La phrase était trop courte, donc ça ne peut pas être aidé.

Nous avons mené d'autres expériences pour voir s'il pouvait être utilisé lors de la création de scripts de pages Web.

Le site Web cible est décidé à être price.com http://kakaku.com/. C'est juste parce qu'il utilise Shift_JIS.

ipython3


import chardet
import requests

r = requests.get('http://kakaku.com')
chardet.detect(r.content)
> {'confidence': 0.99, 'encoding': 'SHIFT_JIS'}

Il a pris une bonne décision. Contrairement à l'exemple de'aiueo'.encode ('Shift-JIS'), il a correctement jugé SHIFT_JIS au lieu de windows-1252 car il ciblait une longue colonne d'octets pour toute la page Web. Sembler. La confiance a également augmenté.

Postscript

J'ai remarqué plus tard qu'il y avait une bibliothèque Python d'extension C appelée cChardet. Peut être utilisé avec Python3. Py Yoshi est incroyable.

Puisqu'il est dans pypi, vous pouvez l'obtenir sur https://pypi.python.org/pypi/cchardet/ pip.

$ pip install cchardet

Comme c'est un gros problème, j'ai utilisé la première page de Price.com pour comparer les vitesses. Le code est comme suit.

compare.py


import chardet
import cchardet
import requests
import time

if __name__ == '__main__':
    r = requests.get('http://kakaku.com')
    begin_time = time.clock()
    guessed_encoding = chardet.detect(r.content)
    end_time = time.clock()
    print('chardet: %f, %s' % (end_time - begin_time, guessed_encoding))

    begin_time_of_cc = time.clock()
    guessed_encoding_by_cc = cchardet.detect(r.content)
    end_time_of_cc = time.clock()
    print('cChardet: %f, %s' % (end_time_of_cc - begin_time_of_cc, guessed_encoding_by_cc))

Et le résultat est le suivant.

chardet: 1.440141, {'confidence': 0.99, 'encoding': 'SHIFT_JIS'}
cChardet: 0.000589, {'confidence': 0.9900000095367432, 'encoding': 'SHIFT_JIS'}

N'est-ce pas accablant?

Conclusion

Utilisez cChardet! !! !!

Recommended Posts

Notes utilisant cChardet et python3-chardet dans Python 3.3.1.
Remarques sur l'utilisation de python (pydev) avec eclipse
Notes sur l'utilisation de sous-processus Python
Remarques sur l'installation de Python3 et l'utilisation de pip sous Windows7
Remarques sur l'utilisation de dict avec python [Competition Pro]
Essayez d'utiliser l'API ChatWork et l'API Qiita en Python
mémo python utilisant l'opérateur perl-ternaire
notes python pour l'utilisation de variables spéciales perl
Pile et file d'attente en Python
Lire et écrire des balises NFC avec python en utilisant PaSoRi
Unittest et CI en Python
Obtenez des notes Evernote en Python
Traduit à l'aide de googletrans en Python
Utilisation du mode Python dans le traitement
Essayez de le faire avec GUI, PyQt en Python
Collectez les tweets en utilisant tweepy en Python et enregistrez-les dans MongoDB
Prédire le sexe à partir du nom à l'aide de l'API Gender et de Pykakasi en Python
Graphique des données de séries chronologiques en Python à l'aide de pandas et matplotlib
Notes sur la lecture et l'écriture d'images TIFF float32 avec python
Programmation GUI en Python avec Appjar
Notes sur Python et les types de dictionnaire
Paquets qui gèrent le MIDI avec Python midi et pretty_midi
Différence entre list () et [] en Python
Précautions lors de l'utilisation de Pit avec Python
Différence entre == et est en python
Afficher les photos en Python et html
Algorithme de tri et implémentation en Python
Authentification à l'aide de l'authentification des utilisateurs tweepy et de l'authentification d'application (Python)
Remarques sur l'utilisation de MeCab depuis Python
Manipuler des fichiers et des dossiers en Python
À propos de Python et Cython dtype
Remarques sur l'utilisation de la post-réception et de la post-fusion
Essayez d'utiliser LevelDB avec Python (plyvel)
Affectations et modifications des objets Python
Vérifiez et déplacez le répertoire en Python
Utilisation de variables globales dans les fonctions python
Chiffrement avec Python: IND-CCA2 et RSA-OAEP
Remarques sur l'installation de Python à l'aide de PyEnv
Hashing de données en R et Python
Clustering et visualisation à l'aide de Python et CytoScape
Voyons voir l'utilisation de l'entrée en python
Puissance totale en Python (en utilisant functools)
Synthèse de fonctions et application en Python
Notes sur l'utilisation de rstrip avec python.
Exporter et exporter des fichiers en Python
(Notes personnelles) Métaclasses et métaprogrammation Python
Inverser le pseudonyme plat et le katakana en Python2.7
Lire et écrire du texte en Python
[GUI en Python] Menu PyQt5 et barre d'outils-
Reconnaissance de caractères manuscrits à l'aide de KNN en Python
Essayez d'utiliser LeapMotion avec Python
Recherche de priorité de profondeur à l'aide de la pile en Python
Lors de l'utilisation d'expressions régulières en Python
Créer et lire des paquets de messages en Python
Création d'interface graphique en python avec tkinter 2
Créez et essayez un environnement OpenCV et Python en quelques minutes à l'aide de Docker
J'ai comparé Node.js et Python lors de la création d'une miniature à l'aide d'AWS Lambda
Chevauchement d'expressions régulières en Python et Java