Скрипт обработки html на python 2

Цена договорная • электронные деньги
18 ноября 2016, 16:20 • 1 отклик • 21 просмотр
Есть html страница,
полученная из pdf, и
список глав в txt из
этого же pdf. Нужно
написать скрипт, который находит главы в html и выделяет их тегами h1 и h2. Тестовые
html и txt файлы во вложении.
Питон нужен обязательно версии 2, а не 3. Это связано с дальнейшей разработкой.



Как искать
заголовки.
В приложенных
txt файлах
содержатся

  • названия
    глав
  • страница
    на которой начинается глава
  • уровень
    вложенности главы.


Нужно найти эти
главы в соответствующих html файлах. Для этого на соответствующей странице html файла нужно найти текст названия главы и обрамить его тегами
h1 или h2. Но тут возможны
сложности:

  • текст
    главы может встречаться несколько раз на странице (нужно постараться определить
    более релевантный)
  • текст
    главы может быть разбит html разметкой
  • текст
    главы может содержать лишние пробелы
  • и другие
    проблемы
Не
обязательно находить 100% глав, но чем больше глав в тестовых файлах сможет
найти скрипт тем лучше.



Как
определить какой тег ставить, h1
или h2.

1) Берем все
заголовки из txt и помечаем заголовки с повышением уровня и с дочерними
элементами. Назовем такие заголовки "ГЛАВНЫЕ" Пример



1.
- 1.1
- 1.2
- - 1.2.1
2.
- 2.1
- 2.2
- - 2.2.1
- 2.3



Тут должны
быть помечены заголовки "2." и "2.3" так как перед ними
стоит заголовок меньшего уровня.
И помечены
заголовки "1." "1.2" "2." "2.2", так
как они имеют дочерние заголовки.



2) Дальше
помечаем главы h1 и h2 в html.
1. Первый
найденный заголовок помечаем h1 и переходим к следующему.
2. В цикле
делаем проверки для очередного найденного заголовка:
- Если
заголовок помечен как ГЛАВНЫЙ и он находится на той же странице, что и
предыдущий h1, то помечаем его как h2
- Если
заголовок помечен как ГЛАВНЫЙ и на странице нет других h1, то помечаем его h1
- Если
заголовок не помечен как ГЛАВНЫЙ и до предыдущего h1 меньше 3 страниц, то
помечаем его как h2
- Если
заголовок не помечен как ГЛАВНЫЙ и до предыдущего h1 больше или равно 3 страниц,
то помечаем его как h1

Файлы