Я пытаюсь разобрать имена доменов из поля Message-ID электронного письма, загруженного из файла, и сравнить его с доменом поля from, чтобы узнать, насколько он соответствует. Затем я сравниваю расстояние, используя nltk.edit_distance()
.
Я использую
re.search('@[\[\]\w+\.]+',mail['Message-ID']).group()[1:]
но одно спам-сообщение имеет следующее
mail2['Message-ID']
'<2011315123.04C6DACE618A7C2763810@\x82\xb1\x82\xea\x82\xa9\x82\xe7\x8c\xa9\x82\xa6\x82\xe9\x82\xbe\x82\xeb\x82\xa4>'
Поэтому, когда я пытаюсь совместить это, он не возвращает совпадение в group()
Я могу расшифровать его в Shift_JIS, но не знаю, что с ним делать.
<2011315123.04C6DACE618A7C2763810@これから見えるだろう>
Я не хочу пытаться проверять все возможные кодировки символов.
Любые идеи о том, что мне с этим делать?
Вы можете попробовать проект chardet, в котором используется алгоритм для угадывания кодировки символов:
import chardet
text = '<2011315123.04C6DACE618A7C2763810@\x82\xb1\x82\xea\x82\xa9\x82\xe7' + \
'\x8c\xa9\x82\xa6\x82\xe9\x82\xbe\x82\xeb\x82\xa4>'
cset = chardet.detect(text)
print cset
encoding = cset['encoding']
print encoding, text.decode(encoding)
Вывод:
{'confidence': 1, 'encoding': 'SHIFT_JIS'}
SHIFT_JIS <2011315123.04C6DACE618A7C2763810@これから見えるだろう>