Подтвердить что ты не робот

Как узнать обобщенный текст заданного URL-адреса в python/Django?

Как найти обобщенный текст для заданного URL?

Что я подразумеваю под обобщенным текстом?

Merck $41.1 Billion Schering-Plough Bid ищет науку

Ссылка Descrption

Merck and Co.s $41,1 млрд. приобретение Schering-Plough Corp. добавляет экспериментальные препараты для сгустков крови, инфекций и шизофрении и позволяет компаниям ускорять исследования в области биотехнологических препаратов.

В приведенном выше URL-адресе ниже представлены три строки.
Краткое двухточечное описание URL-адреса, которое мы обычно получаем, извлекая эту страницу, исследуя содержимое после этого, выясняя краткое описание этой разметки html.

Есть ли хороший алгоритм, который делает это? (или)
Есть ли хорошие библиотеки в python/django, которые это делают?

4b9b3361

Ответ 1

У меня была такая же потребность, и lemur, хотя у меня были возможности суммирования, я обнаружил, что это ошибка в том, что она непригодна для использования. В минувшие выходные я использовал nltk для кода модуля суммирования в python: https://github.com/thavelick/summarize

Я взял алгоритм из библиотеки Java Classifier4J здесь: http://classifier4j.sourceforge.net/, но использовал nltk и питон, где это было возможно.

Вот базовое использование:

>>> import summarize

SimpleSummarizer (в настоящее время единственный сумматор) делает сводку, используя предложения с наиболее частыми словами:

>>> ss = summarize.SimpleSummarizer()
>>> input = "NLTK is a python library for working human-written text. Summarize is a package that uses NLTK to create summaries."
>>> ss.summarize(input, 1)
'NLTK is a python library for working human-written text.'

Вы можете указать любое количество отправленных в сводке, как вам нравится.

>>> input = "NLTK is a python library for working human-written text. Summarize is a package that uses NLTK to create summaries. A Summariser is really cool. I don't think there are any other python summarisers."
>>> ss.summarize(input, 2)
"NLTK is a python library for working human-written text.  I don't think there are any other python summarisers."

В отличие от исходного алгоритма от Classifier4J, этот компилятор работает правильно с пунктуацией, кроме периодов:

>>> input = "NLTK is a python library for working human-written text! Summarize is a package that uses NLTK to create summaries."
>>> ss.summarize(input, 1)
'NLTK is a python library for working human-written text!'

UPDATE

Я теперь (наконец!) выпустил это под лицензией Apache 2.0, ту же лицензию, что и nltk, и поместил модуль на github (см. выше). Любые вклады или предложения приветствуются.

Ответ 2

Сводка текста - довольно сложная тема. Если вам нужно сделать это серьезно, вы можете посмотреть проекты, такие как Lemur (http://www.lemurproject.org/).

Однако то, что я подозреваю, что вы действительно хотите, - это абстрактный текст здесь. Если вы знаете, какая часть документа содержит основной текст, найдите его с помощью библиотеки разбора HTML, например BeautifulSoup, а затем вычеркните HTML; возьмите первое предложение или первые N символов (которые когда-либо подходят лучше всего), и используйте это. Сортировка абстрактного генератора бедных кузенов: -)

Ответ 3

Ознакомьтесь с Инструментом Natural Language Toolkit. Это очень полезная библиотека python, если вы выполняете любую текстовую обработку.

Затем просмотрите эту статью от HP Luhn (1958). Он описывает наивный, но эффективный метод генерации сводок текста.

Используйте объект nltk.probability.FreqDist, чтобы отслеживать, как часто слова появляются в тексте, а затем оценивают предложения в зависимости от того, сколько из них наиболее часто встречающихся слов. Затем выберите предложения с лучшими оценками и вуалой, у вас есть сводка документа.

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

Ответ 4

Лучше всего в этом случае использовать библиотеку разбора HTML, такую ​​как BeautifulSoup (http://www.crummy.com/software/BeautifulSoup/)

Оттуда вы можете получить, например, все теги p:

import urllib2

от BeautifulSoup import BeautifulSoup

page = urllib2.urlopen( " http://www.bloomberg.com/apps/newspid=20601103&sid=a8p0FQHnw.Yo&refer=us" )

soup = BeautifulSoup (страница)

soup.findAll( 'р')

И затем, немного разбор. Это полностью зависит от страницы, так как каждый сайт структурирован по-разному. Вам может повезти на некоторых сайтах, как они могут это сделать, и вы просто ищете тег p с суммой ID # в нем, в то время как другим (например, Blooberg) может потребоваться немного больше играть с.