add "cchardet.detect_with_confidence" method.

This commit is contained in:
PyYoshi 2012-07-05 12:05:11 +09:00
parent 400e26641d
commit 27f61923be
10 changed files with 235 additions and 99 deletions

View file

@ -61,6 +61,8 @@ import cchardet
msg = file(r"test/testdata/wikipediaJa_One_Thousand_and_One_Nights_SJIS.txt").read() msg = file(r"test/testdata/wikipediaJa_One_Thousand_and_One_Nights_SJIS.txt").read()
result = cchardet.detect(msg) result = cchardet.detect(msg)
print(result) print(result)
result2 = cchardet.detect_with_confidence(msg)
print(result2)
``` ```
# Test # Test

View file

@ -82,7 +82,8 @@ setup(
long_description= """This library is high speed universal character encoding detector. - binding to charsetdetect. long_description= """This library is high speed universal character encoding detector. - binding to charsetdetect.
This library is faster than chardet. This library is faster than chardet.
""", """,
version = '0.1', version = '0.2',
license = 'MIT License',
classifiers = [ # http://pypi.python.org/pypi?:action=list_classifiers classifiers = [ # http://pypi.python.org/pypi?:action=list_classifiers
'Development Status :: 1 - Planning', 'Development Status :: 1 - Planning',
'License :: OSI Approved :: MIT License', 'License :: OSI Approved :: MIT License',

View file

@ -4,4 +4,26 @@
from cchardet import _cchardet from cchardet import _cchardet
def detect(msg): def detect(msg):
"""
Args:
msg: str
Returns:
charset: str
Warnings:
UserWarning
"""
return _cchardet.detect(msg) return _cchardet.detect(msg)
def detect_with_confidence(msg):
"""
Args:
msg: str
Returns:
{
"encoding": str,
"confidence": float
}
Warnings:
UserWarning
"""
return _cchardet.detect_with_confidence(msg)

View file

@ -17,6 +17,7 @@ cdef extern from "charsetdetect.h":
cdef csd_t csd_open() cdef csd_t csd_open()
cdef int csd_consider(csd_t csd, char* data, int length) cdef int csd_consider(csd_t csd, char* data, int length)
cdef const_char_ptr csd_close(csd_t csd) cdef const_char_ptr csd_close(csd_t csd)
cdef const_char_ptr csd_close2(csd_t csd, float *confidence)
def detect(char *msg): def detect(char *msg):
cdef csd_t csd = csd_open() cdef csd_t csd = csd_open()
@ -30,3 +31,29 @@ def detect(char *msg):
return csd_close(csd) return csd_close(csd)
elif result == 0: # Detected early elif result == 0: # Detected early
return csd_close(csd) return csd_close(csd)
def detect_with_confidence(char *msg):
cdef csd_t csd = csd_open()
cdef int length = strlen(msg)
cdef int result = csd_consider(csd, msg, length)
cdef float confidence
cdef const_char_ptr detected_charset
# ref: charsetdetect.cpp
if result == -1: # Error, signal with a negative number
raise Exception("Error, signal with a negative number")
elif result == 1: # Need more data
warnings.warn("Need more data",UserWarning)
detected_charset = csd_close2(csd, &confidence)
ret = {
"encoding":detected_charset,
"confidence":confidence
}
return ret
elif result == 0: # Detected early
detected_charset = csd_close2(csd, &confidence)
ret = {
"encoding":detected_charset,
"confidence":confidence
}
return ret

View file

@ -48,7 +48,6 @@ const char *Detector::Close(void) {
return mDetectedCharset; return mDetectedCharset;
} }
// //
// C API to the character set detector (we actually export this) // C API to the character set detector (we actually export this)
// //
@ -68,3 +67,28 @@ const char *csd_close(csd_t csd) {
delete ((Detector*)csd); delete ((Detector*)csd);
return result; return result;
} }
///*
const char *Detector::Close2(float *confidence) {
DataEnd2(confidence);
if (!mDone) {
if (mInputState == eEscAscii) {
return "ibm850";
}
else if (mInputState == ePureAscii) {
return "ASCII";
}
return NULL;
}
return mDetectedCharset;
}
const char *csd_close2(csd_t csd,float *confidence) {
const char *result = ((Detector*)csd)->Close2(confidence);
delete ((Detector*)csd);
return result;
}
//*/

View file

@ -22,6 +22,8 @@ int csd_consider(csd_t csd, const char *data, int length);
// Returns NULL if detection failed. // Returns NULL if detection failed.
const char *csd_close(csd_t csd); const char *csd_close(csd_t csd);
const char *csd_close2(csd_t csd,float *confidence);
#ifdef __cplusplus #ifdef __cplusplus
} }
#endif #endif

View file

@ -11,6 +11,8 @@ public:
Detector(PRUint32 aLanguageFilter) : nsUniversalDetector(aLanguageFilter) {}; Detector(PRUint32 aLanguageFilter) : nsUniversalDetector(aLanguageFilter) {};
int Consider(const char *data, int length); int Consider(const char *data, int length);
const char *Close(void); const char *Close(void);
const char *Close2(float *confidence);
protected: protected:
void Report(const char* aCharset); void Report(const char* aCharset);
const char *mDetectedCharset; const char *mDetectedCharset;

View file

@ -228,7 +228,6 @@ nsresult nsUniversalDetector::HandleData(const char* aBuf, PRUint32 aLen)
return NS_OK; return NS_OK;
} }
//--------------------------------------------------------------------- //---------------------------------------------------------------------
void nsUniversalDetector::DataEnd() void nsUniversalDetector::DataEnd()
{ {
@ -278,3 +277,55 @@ void nsUniversalDetector::DataEnd()
} }
return; return;
} }
///*
void nsUniversalDetector::DataEnd2(float *confidence)
{
if (!mGotData)
{
// we haven't got any data yet, return immediately
// caller program sometimes call DataEnd before anything has been sent to detector
return;
}
if (mDetectedCharset)
{
mDone = PR_TRUE;
Report(mDetectedCharset);
return;
}
switch (mInputState)
{
case eHighbyte:
{
float proberConfidence;
float maxProberConfidence = (float)0.0;
PRInt32 maxProber = 0;
for (PRInt32 i = 0; i < NUM_OF_CHARSET_PROBERS; i++)
{
if (mCharSetProbers[i])
{
proberConfidence = mCharSetProbers[i]->GetConfidence();
if (proberConfidence > maxProberConfidence)
{
maxProberConfidence = proberConfidence;
maxProber = i;
}
}
}
//do not report anything because we are not confident of it, that's in fact a negative answer
if (maxProberConfidence > MINIMUM_THRESHOLD)
Report(mCharSetProbers[maxProber]->GetCharSetName());
*confidence = maxProberConfidence;
}
break;
case eEscAscii:
break;
default:
;
}
return;
}
//*/

View file

@ -68,6 +68,8 @@ public:
virtual nsresult HandleData(const char* aBuf, PRUint32 aLen); virtual nsresult HandleData(const char* aBuf, PRUint32 aLen);
virtual void DataEnd(void); virtual void DataEnd(void);
virtual void DataEnd2(float *confidence);
protected: protected:
virtual void Report(const char* aCharset) = 0; virtual void Report(const char* aCharset) = 0;
virtual void Reset(); virtual void Reset();

View file

@ -48,369 +48,369 @@ class TestCchardet():
encoding = "ISO-8859-5" encoding = "ISO-8859-5"
path = r"testdata/bg/ISO-8859-5/wikitop_bg_ISO-8859-5.txt" path = r"testdata/bg/ISO-8859-5/wikitop_bg_ISO-8859-5.txt"
msg =file(path).read() msg =file(path).read()
detected_encoding = cchardet.detect(msg) detected_encoding = cchardet.detect_with_confidence(msg)
print(detected_encoding) print(detected_encoding)
eq_(encoding.lower(),detected_encoding.lower()) eq_(encoding.lower(),detected_encoding['encoding'].lower())
def test_detect_bg_utf8(self): def test_detect_bg_utf8(self):
encoding = "UTF-8" encoding = "UTF-8"
path = r"testdata/bg/UTF-8/wikitop_bg_UTF-8.txt" path = r"testdata/bg/UTF-8/wikitop_bg_UTF-8.txt"
msg =file(path).read() msg =file(path).read()
detected_encoding = cchardet.detect(msg) detected_encoding = cchardet.detect_with_confidence(msg)
print(detected_encoding) print(detected_encoding)
eq_(encoding.lower(),detected_encoding.lower()) eq_(encoding.lower(),detected_encoding['encoding'].lower())
def test_detect_bg_windows1251(self): def test_detect_bg_windows1251(self):
encoding = "WINDOWS-1251" encoding = "WINDOWS-1251"
path = r"testdata/bg/WINDOWS-1251/wikitop_bg_WINDOWS-1251.txt" path = r"testdata/bg/WINDOWS-1251/wikitop_bg_WINDOWS-1251.txt"
msg =file(path).read() msg =file(path).read()
detected_encoding = cchardet.detect(msg) detected_encoding = cchardet.detect_with_confidence(msg)
print(detected_encoding) print(detected_encoding)
eq_(encoding.lower(),detected_encoding.lower()) eq_(encoding.lower(),detected_encoding['encoding'].lower())
def test_detect_cz_iso88592(self): def test_detect_cz_iso88592(self):
encoding = "ISO-8859-2" encoding = "ISO-8859-2"
path = r"testdata/cz/ISO-8859-2/wikitop_cz_ISO-8859-2.txt" path = r"testdata/cz/ISO-8859-2/wikitop_cz_ISO-8859-2.txt"
msg =file(path).read() msg =file(path).read()
detected_encoding = cchardet.detect(msg) detected_encoding = cchardet.detect_with_confidence(msg)
print(detected_encoding) print(detected_encoding)
eq_(encoding.lower(),detected_encoding.lower()) eq_(encoding.lower(),detected_encoding['encoding'].lower())
def test_detect_cz_utf8(self): def test_detect_cz_utf8(self):
encoding = "UTF-8" encoding = "UTF-8"
path = r"testdata/cz/UTF-8/wikitop_cz_UTF-8.txt" path = r"testdata/cz/UTF-8/wikitop_cz_UTF-8.txt"
msg =file(path).read() msg =file(path).read()
detected_encoding = cchardet.detect(msg) detected_encoding = cchardet.detect_with_confidence(msg)
print(detected_encoding) print(detected_encoding)
eq_(encoding.lower(),detected_encoding.lower()) eq_(encoding.lower(),detected_encoding['encoding'].lower())
def test_detect_de_utf8(self): def test_detect_de_utf8(self):
encoding = "UTF-8" encoding = "UTF-8"
path = r"testdata/de/UTF-8/wikitop_de_UTF-8.txt" path = r"testdata/de/UTF-8/wikitop_de_UTF-8.txt"
msg =file(path).read() msg =file(path).read()
detected_encoding = cchardet.detect(msg) detected_encoding = cchardet.detect_with_confidence(msg)
print(detected_encoding) print(detected_encoding)
eq_(encoding.lower(),detected_encoding.lower()) eq_(encoding.lower(),detected_encoding['encoding'].lower())
def test_detect_de_windows1252(self): def test_detect_de_windows1252(self):
encoding = "WINDOWS-1252" encoding = "WINDOWS-1252"
path = r"testdata/de/WINDOWS-1252/wikitop_de_WINDOWS-1252.txt" path = r"testdata/de/WINDOWS-1252/wikitop_de_WINDOWS-1252.txt"
msg =file(path).read() msg =file(path).read()
detected_encoding = cchardet.detect(msg) detected_encoding = cchardet.detect_with_confidence(msg)
print(detected_encoding) print(detected_encoding)
eq_(encoding.lower(),detected_encoding.lower()) eq_(encoding.lower(),detected_encoding['encoding'].lower())
def test_detect_dk_utf8(self): def test_detect_dk_utf8(self):
encoding = "UTF-8" encoding = "UTF-8"
path = r"testdata/dk/UTF-8/wikitop_dk_UTF-8.txt" path = r"testdata/dk/UTF-8/wikitop_dk_UTF-8.txt"
msg =file(path).read() msg =file(path).read()
detected_encoding = cchardet.detect(msg) detected_encoding = cchardet.detect_with_confidence(msg)
print(detected_encoding) print(detected_encoding)
eq_(encoding.lower(),detected_encoding.lower()) eq_(encoding.lower(),detected_encoding['encoding'].lower())
def test_detect_dk_windows1252(self): def test_detect_dk_windows1252(self):
encoding = "WINDOWS-1252" encoding = "WINDOWS-1252"
path = r"testdata/dk/WINDOWS-1252/wikitop_dk_WINDOWS-1252.txt" path = r"testdata/dk/WINDOWS-1252/wikitop_dk_WINDOWS-1252.txt"
msg =file(path).read() msg =file(path).read()
detected_encoding = cchardet.detect(msg) detected_encoding = cchardet.detect_with_confidence(msg)
print(detected_encoding) print(detected_encoding)
eq_(encoding.lower(),detected_encoding.lower()) eq_(encoding.lower(),detected_encoding['encoding'].lower())
def test_detect_el_iso88597(self): def test_detect_el_iso88597(self):
encoding = "ISO-8859-7" encoding = "ISO-8859-7"
path = r"testdata/el/ISO-8859-7/wikitop_el_ISO-8859-7.txt" path = r"testdata/el/ISO-8859-7/wikitop_el_ISO-8859-7.txt"
msg =file(path).read() msg =file(path).read()
detected_encoding = cchardet.detect(msg) detected_encoding = cchardet.detect_with_confidence(msg)
print(detected_encoding) print(detected_encoding)
eq_(encoding.lower(),detected_encoding.lower()) eq_(encoding.lower(),detected_encoding['encoding'].lower())
def test_detect_el_utf8(self): def test_detect_el_utf8(self):
encoding = "UTF-8" encoding = "UTF-8"
path = r"testdata/el/UTF-8/wikitop_el_UTF-8.txt" path = r"testdata/el/UTF-8/wikitop_el_UTF-8.txt"
msg =file(path).read() msg =file(path).read()
detected_encoding = cchardet.detect(msg) detected_encoding = cchardet.detect_with_confidence(msg)
print(detected_encoding) print(detected_encoding)
eq_(encoding.lower(),detected_encoding.lower()) eq_(encoding.lower(),detected_encoding['encoding'].lower())
def test_detect_en_utf8(self): def test_detect_en_utf8(self):
encoding = "UTF-8" encoding = "UTF-8"
path = r"testdata/en/UTF-8/wikitop_en_UTF-8.txt" path = r"testdata/en/UTF-8/wikitop_en_UTF-8.txt"
msg =file(path).read() msg =file(path).read()
detected_encoding = cchardet.detect(msg) detected_encoding = cchardet.detect_with_confidence(msg)
print(detected_encoding) print(detected_encoding)
eq_(encoding.lower(),detected_encoding.lower()) eq_(encoding.lower(),detected_encoding['encoding'].lower())
def test_detect_en_windows1252(self): def test_detect_en_windows1252(self):
encoding = "WINDOWS-1252" encoding = "WINDOWS-1252"
path = r"testdata/en/WINDOWS-1252/wikitop_en_WINDOWS-1252.txt" path = r"testdata/en/WINDOWS-1252/wikitop_en_WINDOWS-1252.txt"
msg =file(path).read() msg =file(path).read()
detected_encoding = cchardet.detect(msg) detected_encoding = cchardet.detect_with_confidence(msg)
print(detected_encoding) print(detected_encoding)
eq_(encoding.lower(),detected_encoding.lower()) eq_(encoding.lower(),detected_encoding['encoding'].lower())
def test_detect_es_utf8(self): def test_detect_es_utf8(self):
encoding = "UTF-8" encoding = "UTF-8"
path = r"testdata/es/UTF-8/wikitop_es_UTF-8.txt" path = r"testdata/es/UTF-8/wikitop_es_UTF-8.txt"
msg =file(path).read() msg =file(path).read()
detected_encoding = cchardet.detect(msg) detected_encoding = cchardet.detect_with_confidence(msg)
print(detected_encoding) print(detected_encoding)
eq_(encoding.lower(),detected_encoding.lower()) eq_(encoding.lower(),detected_encoding['encoding'].lower())
def test_detect_es_windows1252(self): def test_detect_es_windows1252(self):
encoding = "WINDOWS-1252" encoding = "WINDOWS-1252"
path = r"testdata/es/WINDOWS-1252/wikitop_es_WINDOWS-1252.txt" path = r"testdata/es/WINDOWS-1252/wikitop_es_WINDOWS-1252.txt"
msg =file(path).read() msg =file(path).read()
detected_encoding = cchardet.detect(msg) detected_encoding = cchardet.detect_with_confidence(msg)
print(detected_encoding) print(detected_encoding)
eq_(encoding.lower(),detected_encoding.lower()) eq_(encoding.lower(),detected_encoding['encoding'].lower())
def test_detect_fi_utf8(self): def test_detect_fi_utf8(self):
encoding = "UTF-8" encoding = "UTF-8"
path = r"testdata/fi/UTF-8/wikitop_fi_UTF-8.txt" path = r"testdata/fi/UTF-8/wikitop_fi_UTF-8.txt"
msg =file(path).read() msg =file(path).read()
detected_encoding = cchardet.detect(msg) detected_encoding = cchardet.detect_with_confidence(msg)
print(detected_encoding) print(detected_encoding)
eq_(encoding.lower(),detected_encoding.lower()) eq_(encoding.lower(),detected_encoding['encoding'].lower())
def test_detect_fi_windows1252(self): def test_detect_fi_windows1252(self):
encoding = "WINDOWS-1252" encoding = "WINDOWS-1252"
path = r"testdata/fi/WINDOWS-1252/wikitop_fi_WINDOWS-1252.txt" path = r"testdata/fi/WINDOWS-1252/wikitop_fi_WINDOWS-1252.txt"
msg =file(path).read() msg =file(path).read()
detected_encoding = cchardet.detect(msg) detected_encoding = cchardet.detect_with_confidence(msg)
print(detected_encoding) print(detected_encoding)
eq_(encoding.lower(),detected_encoding.lower()) eq_(encoding.lower(),detected_encoding['encoding'].lower())
def test_detect_fr_utf8(self): def test_detect_fr_utf8(self):
encoding = "UTF-8" encoding = "UTF-8"
path = r"testdata/fr/UTF-8/wikitop_fr_UTF-8.txt" path = r"testdata/fr/UTF-8/wikitop_fr_UTF-8.txt"
msg =file(path).read() msg =file(path).read()
detected_encoding = cchardet.detect(msg) detected_encoding = cchardet.detect_with_confidence(msg)
print(detected_encoding) print(detected_encoding)
eq_(encoding.lower(),detected_encoding.lower()) eq_(encoding.lower(),detected_encoding['encoding'].lower())
def test_detect_fr_windows1252(self): def test_detect_fr_windows1252(self):
encoding = "WINDOWS-1252" encoding = "WINDOWS-1252"
path = r"testdata/fr/WINDOWS-1252/wikitop_fr_WINDOWS-1252.txt" path = r"testdata/fr/WINDOWS-1252/wikitop_fr_WINDOWS-1252.txt"
msg =file(path).read() msg =file(path).read()
detected_encoding = cchardet.detect(msg) detected_encoding = cchardet.detect_with_confidence(msg)
print(detected_encoding) print(detected_encoding)
eq_(encoding.lower(),detected_encoding.lower()) eq_(encoding.lower(),detected_encoding['encoding'].lower())
def test_detect_he_utf8(self): def test_detect_he_utf8(self):
encoding = "UTF-8" encoding = "UTF-8"
path = r"testdata/he/UTF-8/wikitop_he_UTF-8.txt" path = r"testdata/he/UTF-8/wikitop_he_UTF-8.txt"
msg =file(path).read() msg =file(path).read()
detected_encoding = cchardet.detect(msg) detected_encoding = cchardet.detect_with_confidence(msg)
print(detected_encoding) print(detected_encoding)
eq_(encoding.lower(),detected_encoding.lower()) eq_(encoding.lower(),detected_encoding['encoding'].lower())
def test_detect_he_windows1255(self): def test_detect_he_windows1255(self):
encoding = "WINDOWS-1255" encoding = "WINDOWS-1255"
path = r"testdata/he/WINDOWS-1255/wikitop_he_WINDOWS-1255.txt" path = r"testdata/he/WINDOWS-1255/wikitop_he_WINDOWS-1255.txt"
msg =file(path).read() msg =file(path).read()
detected_encoding = cchardet.detect(msg) detected_encoding = cchardet.detect_with_confidence(msg)
print(detected_encoding) print(detected_encoding)
eq_(encoding.lower(),detected_encoding.lower()) eq_(encoding.lower(),detected_encoding['encoding'].lower())
def test_detect_hu_utf8(self): def test_detect_hu_utf8(self):
encoding = "UTF-8" encoding = "UTF-8"
path = r"testdata/hu/UTF-8/wikitop_hu_UTF-8.txt" path = r"testdata/hu/UTF-8/wikitop_hu_UTF-8.txt"
msg =file(path).read() msg =file(path).read()
detected_encoding = cchardet.detect(msg) detected_encoding = cchardet.detect_with_confidence(msg)
print(detected_encoding) print(detected_encoding)
eq_(encoding.lower(),detected_encoding.lower()) eq_(encoding.lower(),detected_encoding['encoding'].lower())
def test_detect_hu_iso55892(self): def test_detect_hu_iso55892(self):
encoding = "ISO-8859-2" encoding = "ISO-8859-2"
path = r"testdata/hu/ISO-8859-2/wikitop_hu_ISO-8859-2.txt" path = r"testdata/hu/ISO-8859-2/wikitop_hu_ISO-8859-2.txt"
msg =file(path).read() msg =file(path).read()
detected_encoding = cchardet.detect(msg) detected_encoding = cchardet.detect_with_confidence(msg)
print(detected_encoding) print(detected_encoding)
eq_(encoding.lower(),detected_encoding.lower()) eq_(encoding.lower(),detected_encoding['encoding'].lower())
def test_detect_it_utf8(self): def test_detect_it_utf8(self):
encoding = "UTF-8" encoding = "UTF-8"
path = r"testdata/it/UTF-8/wikitop_it_UTF-8.txt" path = r"testdata/it/UTF-8/wikitop_it_UTF-8.txt"
msg =file(path).read() msg =file(path).read()
detected_encoding = cchardet.detect(msg) detected_encoding = cchardet.detect_with_confidence(msg)
print(detected_encoding) print(detected_encoding)
eq_(encoding.lower(),detected_encoding.lower()) eq_(encoding.lower(),detected_encoding['encoding'].lower())
def test_detect_it_windows1252(self): def test_detect_it_windows1252(self):
encoding = "WINDOWS-1252" encoding = "WINDOWS-1252"
path = r"testdata/it/WINDOWS-1252/wikitop_it_WINDOWS-1252.txt" path = r"testdata/it/WINDOWS-1252/wikitop_it_WINDOWS-1252.txt"
msg =file(path).read() msg =file(path).read()
detected_encoding = cchardet.detect(msg) detected_encoding = cchardet.detect_with_confidence(msg)
print(detected_encoding) print(detected_encoding)
eq_(encoding.lower(),detected_encoding.lower()) eq_(encoding.lower(),detected_encoding['encoding'].lower())
def test_detect_nl_utf8(self): def test_detect_nl_utf8(self):
encoding = "UTF-8" encoding = "UTF-8"
path = r"testdata/nl/UTF-8/wikitop_nl_UTF-8.txt" path = r"testdata/nl/UTF-8/wikitop_nl_UTF-8.txt"
msg =file(path).read() msg =file(path).read()
detected_encoding = cchardet.detect(msg) detected_encoding = cchardet.detect_with_confidence(msg)
print(detected_encoding) print(detected_encoding)
eq_(encoding.lower(),detected_encoding.lower()) eq_(encoding.lower(),detected_encoding['encoding'].lower())
def test_detect_nl_windows1252(self): def test_detect_nl_windows1252(self):
encoding = "WINDOWS-1252" encoding = "WINDOWS-1252"
path = r"testdata/nl/WINDOWS-1252/wikitop_nl_WINDOWS-1252.txt" path = r"testdata/nl/WINDOWS-1252/wikitop_nl_WINDOWS-1252.txt"
msg =file(path).read() msg =file(path).read()
detected_encoding = cchardet.detect(msg) detected_encoding = cchardet.detect_with_confidence(msg)
print(detected_encoding) print(detected_encoding)
eq_(encoding.lower(),detected_encoding.lower()) eq_(encoding.lower(),detected_encoding['encoding'].lower())
def test_detect_no_utf8(self): def test_detect_no_utf8(self):
encoding = "UTF-8" encoding = "UTF-8"
path = r"testdata/no/UTF-8/wikitop_no_UTF-8.txt" path = r"testdata/no/UTF-8/wikitop_no_UTF-8.txt"
msg =file(path).read() msg =file(path).read()
detected_encoding = cchardet.detect(msg) detected_encoding = cchardet.detect_with_confidence(msg)
print(detected_encoding) print(detected_encoding)
eq_(encoding.lower(),detected_encoding.lower()) eq_(encoding.lower(),detected_encoding['encoding'].lower())
def test_detect_no_windows1252(self): def test_detect_no_windows1252(self):
encoding = "WINDOWS-1252" encoding = "WINDOWS-1252"
path = r"testdata/no/WINDOWS-1252/wikitop_no_WINDOWS-1252.txt" path = r"testdata/no/WINDOWS-1252/wikitop_no_WINDOWS-1252.txt"
msg =file(path).read() msg =file(path).read()
detected_encoding = cchardet.detect(msg) detected_encoding = cchardet.detect_with_confidence(msg)
print(detected_encoding) print(detected_encoding)
eq_(encoding.lower(),detected_encoding.lower()) eq_(encoding.lower(),detected_encoding['encoding'].lower())
def test_detect_pl_utf8(self): def test_detect_pl_utf8(self):
encoding = "UTF-8" encoding = "UTF-8"
path = r"testdata/pl/UTF-8/wikitop_pl_UTF-8.txt" path = r"testdata/pl/UTF-8/wikitop_pl_UTF-8.txt"
msg =file(path).read() msg =file(path).read()
detected_encoding = cchardet.detect(msg) detected_encoding = cchardet.detect_with_confidence(msg)
print(detected_encoding) print(detected_encoding)
eq_(encoding.lower(),detected_encoding.lower()) eq_(encoding.lower(),detected_encoding['encoding'].lower())
def test_detect_pl_iso88592(self): def test_detect_pl_iso88592(self):
encoding = "ISO-8859-2" encoding = "ISO-8859-2"
path = r"testdata/pl/ISO-8859-2/wikitop_pl_ISO-8859-2.txt" path = r"testdata/pl/ISO-8859-2/wikitop_pl_ISO-8859-2.txt"
msg =file(path).read() msg =file(path).read()
detected_encoding = cchardet.detect(msg) detected_encoding = cchardet.detect_with_confidence(msg)
print(detected_encoding) print(detected_encoding)
eq_(encoding.lower(),detected_encoding.lower()) eq_(encoding.lower(),detected_encoding['encoding'].lower())
def test_detect_pt_utf8(self): def test_detect_pt_utf8(self):
encoding = "UTF-8" encoding = "UTF-8"
path = r"testdata/pt/UTF-8/wikitop_pt_UTF-8.txt" path = r"testdata/pt/UTF-8/wikitop_pt_UTF-8.txt"
msg =file(path).read() msg =file(path).read()
detected_encoding = cchardet.detect(msg) detected_encoding = cchardet.detect_with_confidence(msg)
print(detected_encoding) print(detected_encoding)
eq_(encoding.lower(),detected_encoding.lower()) eq_(encoding.lower(),detected_encoding['encoding'].lower())
def test_detect_pt_windows1252(self): def test_detect_pt_windows1252(self):
encoding = "WINDOWS-1252" encoding = "WINDOWS-1252"
path = r"testdata/pt/WINDOWS-1252/wikitop_pt_WINDOWS-1252.txt" path = r"testdata/pt/WINDOWS-1252/wikitop_pt_WINDOWS-1252.txt"
msg =file(path).read() msg =file(path).read()
detected_encoding = cchardet.detect(msg) detected_encoding = cchardet.detect_with_confidence(msg)
print(detected_encoding) print(detected_encoding)
eq_(encoding.lower(),detected_encoding.lower()) eq_(encoding.lower(),detected_encoding['encoding'].lower())
def test_detect_ru_utf8(self): def test_detect_ru_utf8(self):
encoding = "UTF-8" encoding = "UTF-8"
path = r"testdata/ru/UTF-8/wikitop_ru_UTF-8.txt" path = r"testdata/ru/UTF-8/wikitop_ru_UTF-8.txt"
msg =file(path).read() msg =file(path).read()
detected_encoding = cchardet.detect(msg) detected_encoding = cchardet.detect_with_confidence(msg)
print(detected_encoding) print(detected_encoding)
eq_(encoding.lower(),detected_encoding.lower()) eq_(encoding.lower(),detected_encoding['encoding'].lower())
def test_detect_ru_windows1251(self): def test_detect_ru_windows1251(self):
encoding = "WINDOWS-1251" encoding = "WINDOWS-1251"
path = r"testdata/ru/WINDOWS-1251/wikitop_ru_WINDOWS-1251.txt" path = r"testdata/ru/WINDOWS-1251/wikitop_ru_WINDOWS-1251.txt"
msg =file(path).read() msg =file(path).read()
detected_encoding = cchardet.detect(msg) detected_encoding = cchardet.detect_with_confidence(msg)
print(detected_encoding) print(detected_encoding)
eq_(encoding.lower(),detected_encoding.lower()) eq_(encoding.lower(),detected_encoding['encoding'].lower())
def test_detect_ru_ibm855(self): def test_detect_ru_ibm855(self):
encoding = "IBM855" encoding = "IBM855"
path = r"testdata/ru/IBM855/wikitop_ru_IBM855.txt" path = r"testdata/ru/IBM855/wikitop_ru_IBM855.txt"
msg =file(path).read() msg =file(path).read()
detected_encoding = cchardet.detect(msg) detected_encoding = cchardet.detect_with_confidence(msg)
print(detected_encoding) print(detected_encoding)
eq_(encoding.lower(),detected_encoding.lower()) eq_(encoding.lower(),detected_encoding['encoding'].lower())
def test_detect_ru_koi8r(self): def test_detect_ru_koi8r(self):
encoding = "KOI8-R" encoding = "KOI8-R"
path = r"testdata/ru/KOI8-R/wikitop_ru_KOI8-R.txt" path = r"testdata/ru/KOI8-R/wikitop_ru_KOI8-R.txt"
msg =file(path).read() msg =file(path).read()
detected_encoding = cchardet.detect(msg) detected_encoding = cchardet.detect_with_confidence(msg)
print(detected_encoding) print(detected_encoding)
eq_(encoding.lower(),detected_encoding.lower()) eq_(encoding.lower(),detected_encoding['encoding'].lower())
def test_detect_se_utf8(self): def test_detect_se_utf8(self):
encoding = "UTF-8" encoding = "UTF-8"
path = r"testdata/se/UTF-8/wikitop_se_UTF-8.txt" path = r"testdata/se/UTF-8/wikitop_se_UTF-8.txt"
msg =file(path).read() msg =file(path).read()
detected_encoding = cchardet.detect(msg) detected_encoding = cchardet.detect_with_confidence(msg)
print(detected_encoding) print(detected_encoding)
eq_(encoding.lower(),detected_encoding.lower()) eq_(encoding.lower(),detected_encoding['encoding'].lower())
def test_detect_se_windows1252(self): def test_detect_se_windows1252(self):
encoding = "WINDOWS-1252" encoding = "WINDOWS-1252"
path = r"testdata/se/WINDOWS-1252/wikitop_se_WINDOWS-1252.txt" path = r"testdata/se/WINDOWS-1252/wikitop_se_WINDOWS-1252.txt"
msg =file(path).read() msg =file(path).read()
detected_encoding = cchardet.detect(msg) detected_encoding = cchardet.detect_with_confidence(msg)
print(detected_encoding) print(detected_encoding)
eq_(encoding.lower(),detected_encoding.lower()) eq_(encoding.lower(),detected_encoding['encoding'].lower())
def test_detect_th_utf8(self): def test_detect_th_utf8(self):
encoding = "UTF-8" encoding = "UTF-8"
path = r"testdata/th/UTF-8/wikitop_th_UTF-8.txt" path = r"testdata/th/UTF-8/wikitop_th_UTF-8.txt"
msg =file(path).read() msg =file(path).read()
detected_encoding = cchardet.detect(msg) detected_encoding = cchardet.detect_with_confidence(msg)
print(detected_encoding) print(detected_encoding)
eq_(encoding.lower(),detected_encoding.lower()) eq_(encoding.lower(),detected_encoding['encoding'].lower())
def test_detect_th_tis620_1(self): def test_detect_th_tis620_1(self):
encoding = "TIS-620" encoding = "TIS-620"
path = r"testdata/th/TIS-620/utffool_th_TIS-620.txt" path = r"testdata/th/TIS-620/utffool_th_TIS-620.txt"
msg =file(path).read() msg =file(path).read()
detected_encoding = cchardet.detect(msg) detected_encoding = cchardet.detect_with_confidence(msg)
print(detected_encoding) print(detected_encoding)
eq_(encoding.lower(),detected_encoding.lower()) eq_(encoding.lower(),detected_encoding['encoding'].lower())
def test_detect_th_tis620_2(self): def test_detect_th_tis620_2(self):
encoding = "TIS-620" encoding = "TIS-620"
path = r"testdata/th/TIS-620/wikitop_th_TIS-620.txt" path = r"testdata/th/TIS-620/wikitop_th_TIS-620.txt"
msg =file(path).read() msg =file(path).read()
detected_encoding = cchardet.detect(msg) detected_encoding = cchardet.detect_with_confidence(msg)
print(detected_encoding) print(detected_encoding)
eq_(encoding.lower(),detected_encoding.lower()) eq_(encoding.lower(),detected_encoding['encoding'].lower())
def test_detect_tr_utf8(self): def test_detect_tr_utf8(self):
encoding = "UTF-8" encoding = "UTF-8"
path = r"testdata/tr/UTF-8/wikitop_tr_UTF-8.txt" path = r"testdata/tr/UTF-8/wikitop_tr_UTF-8.txt"
msg =file(path).read() msg =file(path).read()
detected_encoding = cchardet.detect(msg) detected_encoding = cchardet.detect_with_confidence(msg)
print(detected_encoding) print(detected_encoding)
eq_(encoding.lower(),detected_encoding.lower()) eq_(encoding.lower(),detected_encoding['encoding'].lower())
def test_detect_tr_iso88599(self): def test_detect_tr_iso88599(self):
encoding = "ISO-8859-9" encoding = "ISO-8859-9"
path = r"testdata/tr/ISO-8859-9/wikitop_tr_ISO-8859-9.txt" path = r"testdata/tr/ISO-8859-9/wikitop_tr_ISO-8859-9.txt"
msg =file(path).read() msg =file(path).read()
detected_encoding = cchardet.detect(msg) detected_encoding = cchardet.detect_with_confidence(msg)
print(detected_encoding) print(detected_encoding)
eq_(encoding.lower(),detected_encoding.lower()) eq_(encoding.lower(),detected_encoding['encoding'].lower())
def test_detect_zh_utf8(self): def test_detect_zh_utf8(self):
encoding = "UTF-8" encoding = "UTF-8"
path = r"testdata/zh/UTF-8/wikitop_zh_UTF-8.txt" path = r"testdata/zh/UTF-8/wikitop_zh_UTF-8.txt"
msg =file(path).read() msg =file(path).read()
detected_encoding = cchardet.detect(msg) detected_encoding = cchardet.detect_with_confidence(msg)
print(detected_encoding) print(detected_encoding)
eq_(encoding.lower(),detected_encoding.lower()) eq_(encoding.lower(),detected_encoding['encoding'].lower())
def test_detect_zh_gb18030(self): def test_detect_zh_gb18030(self):
encoding = "GB18030" encoding = "GB18030"
path = r"testdata/zh/GB18030/wikitop_zh_GB18030.txt" path = r"testdata/zh/GB18030/wikitop_zh_GB18030.txt"
msg =file(path).read() msg =file(path).read()
detected_encoding = cchardet.detect(msg) detected_encoding = cchardet.detect_with_confidence(msg)
print(detected_encoding) print(detected_encoding)
eq_(encoding.lower(),detected_encoding.lower()) eq_(encoding.lower(),detected_encoding['encoding'].lower())
class TestCchardetSpeed(): class TestCchardetSpeed():
def test_speed(self): def test_speed(self):
@ -424,10 +424,13 @@ class TestCchardetSpeed():
end_chardet = time.time() end_chardet = time.time()
# Test cchardet # Test cchardet
start_cchardet = time.time() start_cchardet = time.time()
detected_encoding_cchardet = cchardet.detect(msg) detected_encoding_cchardet = cchardet.detect_with_confidence(msg)
end_cchardet = time.time() end_cchardet = time.time()
# print result # print result
result_chardet = end_chardet - start_chardet result_chardet = end_chardet - start_chardet
result_cchardet = end_cchardet - start_cchardet result_cchardet = end_cchardet - start_cchardet
print("chardet:",result_chardet,"detected charset:", detected_encoding_chardet['encoding'].lower()) print()
print("cchardet:",result_cchardet,"detected charset:",detected_encoding_cchardet.lower()) print(detected_encoding_cchardet)
print()
print("chardet:",result_chardet,"detected charset:", detected_encoding_chardet['encoding'].lower(), "confidence:", detected_encoding_chardet['confidence'])
print("cchardet:",result_cchardet,"detected charset:",detected_encoding_cchardet['encoding'].lower(), "confidence:", detected_encoding_cchardet['confidence'])