понедельник, 30 апреля 2012 г.

Справочник лекарственных средств 2012 (Довідник Лікарських засобів) в мобильном телефоне

Здесь выложили справочник лекарственных средств Украины по состоянию на 01.03.2012.
Справочник сделан в программе Microsoft Visual FoxPro.
Приемы переделки для мобильного:
  1. Распаковал архив. Часть файлов в формате .mht. Это архив с html картинками и дополнительными файлам внутри. Проблема в том, что имя файла mht не равно имени файла htm внутри. Но это не страшно. Зашел в папку с mht из Total Commander и нажав Alt-F9 (добавил галочку для создания  папок соответствующих имени архива). После этого ctrl-b (показ файлов без учета папок). Удалил по привычке картинке и дополнительные файлы. После этого групповое переименование. Выделяем все (Ctrl-A) и нажимаем Ctrl-M. В поле "Маска имени файла" надо написать [P] и нажимаем "Выполнить". Теперь есть более 11000 файлов htm с правильными именами файлов (обьем 1.7 Гб)
  2. Внутри бывших mht используется html encode (буквы русского языка закодированы в виде &#и четырех цифр). Попросил родственника написать скрипт перекодирования html encode в utf-8. Скрипт вот
    import os
    import re
    import string
    
    def _callback(matches):
        id = matches.group(1)
        try:
            return unichr(int(id))
        except:
            return id
    
    def decode_unicode_references(data):
        return re.sub("&#(\d+)(;|(?=\s))", _callback, data)
    
    def dir_list2(dir_name, *args):
        fileList = []
        for file in os.listdir(dir_name):
            dirfile = os.path.join(dir_name, file)
            if os.path.isfile(dirfile):
                if len(args) == 0:
                    fileList.append(dirfile)
                else:
                    if os.path.splitext(dirfile)[1][1:] in args:
                        fileList.append(dirfile)
        return fileList
     
    if __name__ == '__main__':
        logs = ""
        try:
            os.makedirs('_utf8')
            logs += "_utf8/ CREATED" + "\n"
        except OSError:
            pass
    
        fileList = dir_list2('')
    
        print "in progress",
        for f in fileList:
            if f.endswith(".htm"):
                f1 = open (f, "r")
                _text = f1.read()
                f1.close()
                try:
                    text = _text.decode("utf-8")
                    text = string.replace(text, "charset=us-ascii", "charset=utf-8")
                    text = decode_unicode_references(text)
                    text = text.encode("utf-8")
                    open("_utf8/"+f, "w").write(text)
                    #print f + " OK"
                    logs += f + " OK"
                except Exception as inst:
                    try:
                        text = _text.decode("cp1251")
                        text = string.replace(text, "charset=windows-1251", "charset=utf-8")
                        text = decode_unicode_references(text)
                        text = text.encode("utf-8")
                        open("_utf8/"+f, "w").write(text)
                        #print f + " OK"
                        logs += f + " OK"
                    except Exception as inst:
                        #print f + " FAILD"
                        logs += f + " FAILD"
                logs += "\n"
                print '.',
        try:
            open("test2.log", "w").write(logs)
        except:
            pass
    
        raw_input("\nPress the enter key to exit.") 
  3. Скрипт работает в python 2.6.5 (возможно и выше)
  4. Индексы в формате dbf переделал в html с помощью openoffice (открыл и сохранил).
  5. Дальше банальная чистка с помощью словогрыза.
  6. В бывших dbf убирал таблицы и с помощью словогрыза и текстового редактора (замена элементов таблицы на простое оформление. Не забываем переделать ссылки на mht
  7. Последний шаг конвертации с помощью isilox.
  8. Результат здесь 

Комментариев нет: