Python: обнаружение фактических текстовых абзацев в строке - PullRequest
2 голосов
/ 24 июля 2010

Большая миссия: я пытаюсь получить несколько строк резюме веб-страницы.т.е. я хочу иметь функцию, которая берет URL и возвращает наиболее информативный абзац с этой страницы.(Как правило, это первый абзац текста фактического содержимого, в отличие от «нежелательного текста», такого как панель навигации.)

Поэтому мне удалось сократить страницу HTML до части текста, вырезавтеги, выбрасывая <HEAD> и все скрипты.Но часть текста по-прежнему "мусорный текст".Я хочу знать, где начинаются текстовые абзацы.(В идеале это должно быть не зависит от человеческого языка, но если у вас есть решение только для английского, это тоже может помочь.)

Как я могу выяснить, какой из текстов является "нежелательным текстом", а какойфактический контент?

ОБНОВЛЕНИЕ: Я вижу, что некоторые люди указали мне использовать HTML-библиотеку разбора.Я использую Beautiful Soup.Моя проблема не в разборе HTML;Я уже избавился от всех тегов HTML, у меня просто есть куча текста, и я хочу отделить текст контекста от ненужного текста.

Ответы [ 4 ]

2 голосов
/ 24 июля 2010

Вы можете использовать подход, описанный в блоге AI Depot, вместе с кодом Python:

2 голосов
/ 24 июля 2010

Общее решение этой проблемы - нетривиальная задача для решения.

Чтобы выразить это в контексте, большая часть успеха Google в области поиска связана с их способностью автоматически распознавать некое семантическое значение из произвольных веб-страниц, а именно выяснять, где находится "контент".

Одна идея, которая приходит на ум, заключается в том, что если вы можете сканировать много страниц с одного сайта, вы сможете определить шаблоны. Разметка меню будет практически одинаковой на всех страницах. Если вы как-то обнуляете это (и это нужно будет довольно «нечетко»), то останется контент.

Следующим шагом будет определение текста и границ. В идеале это были бы некоторые абзацы HTML, но большую часть времени вам не повезет.

Лучшим подходом может быть поиск RSS-каналов для сайта и получение контента таким образом, поскольку он будет урезан как есть. Игнорируйте любой контент AdSense (или аналогичный), и вы сможете получить текст.

Да, и просто выкиньте для этого свой код регулярного выражения. Для этого требуется HTML-парсер абсолютно без вопросов.

1 голос
/ 24 июля 2010

Возможно, это немного излишне, но вы можете попробовать nltk , набор инструментов для естественного языка. Эта библиотека используется для анализа естественных языков. Это довольно хорошая библиотека и интересная тема. Если вы хотите просто получить предложения из текста, вы должны сделать что-то вроде:

>>> import nltk
>>> nltk.sent_tokenize("Hi this is a sentence. And isn't this a second one, a sentence with a url http://www.google.com in it?")
['Hi this is a sentence.', "And isn't this a second one, a sentence with a url http://www.google.com in it?"]

Или вы можете использовать метод предложений_from_text из класса PunktSentenceTokenizer. Вы должны сделать nltk.download(), прежде чем начать.

0 голосов
/ 24 июля 2010

Я бы рекомендовал взглянуть на то, что делает Читаемость . Читаемость удаляет все, кроме фактического содержимого страницы, и создает новый стиль для легкого чтения. Похоже, он очень хорошо работает с точки зрения обнаружения контента по моему опыту.

Взгляните на его исходный код (в частности, на функцию grabArticle), и, возможно, вы сможете получить некоторые идеи.

...