Операция Instapaper выполняется в два этапа:
- Поиск основного блока содержимого на странице (исключая верхние и нижние колонтитулы, меню и т. Д.)
- Изэтот блок контента извлекает и форматирует текст
Чтобы найти блок контента (обычно это какой-то элемент блока html, например, div, содержащий текстовое содержимое ключевой страницы)) Instapaper использует алгоритм, очень похожий на тот, который используется readability .Вы можете посмотреть на источник readability.js , чтобы увидеть, что происходит, но по своей сути он пытается найти область на странице с самым высоким отношением текста / ссылок, хотя у него есть и некоторые другие простые оценки.метрики (например, в голове), такие как отношение текста к запятым, параэлементы и т. д.), которые входят в эвристику.
Как только вы определили элемент корневого узла с соответствующим контентом, выВам нужно будет отформатировать его, если вы хотите, вы можете просто извлечь элемент узла, содержащий текст, из исходного документа и вставить его в свой, но на самом деле вы, вероятно, захотите удалить существующие стили и применить свой собственный, длястандартный внешний вид.Если вы хотите выводить только хороший текст, вы можете использовать Jericho's Renderer .
update1 : я должен также упомянуть кое-что еще, что делает Instapaper - что следует за 'ссылки на страницы ( «следующие» или «1», «2», «3» ссылки ) статьи к их заключению, так что фрагмент, который может занимать много страниц в оригинале, будет представленВам как единый документ.
update2 Недавно я наткнулся на это сравнение алгоритмов извлечения текста