Sunday, March 11, 2012

Автоматическое реферирование статей на русском языке http://habrahabr.ru/blogs/startup_ideas/118609/

http://habrahabr.ru/blogs/startup_ideas/118609/

Автоматическое реферирование статей на русском языке

Тема автоматического реферирования/аннотирования текста была поднята давно и было придумано множество способов ее реализации. Так как желание знать главное есть у всех, но это, как правило, связано с просмотром множества материалов.

Готовые библиотеки найти не так легко, а то, что есть, слабо конфигурируется, не доделано и, главное, работает только для английского языка. Я захотел исправить этот недостаток и вот что получилось
За пару дней я написал несколько вариантов алгоритма суммаризации, взяв из интернета русскоязычные компоненты анализа русского текста, главным образом АОТ.

Главная идея этих подходов к реферированию — выбор главных предложений в тексте, тех, которые наилучшим образом передают смысл всего текста. 
Все три алгоритма — это модификации LexRank.

Реферирование в моем случае идет по трем направлениям
1. предложения. (алгоритм бьет на предложения с некоторыми эвристики, так что не все точки это их конец)
2. ключевые слова — существительные (для их извлечения используется POS таггер на основе морфологии АОТ) 
3. действия — Объект-действие-субъект. (тоже с использованием POS таггер на AOT)

Если по вашему мнению какой-то из алгоритмов будет достаточно хорош. 
Я планирую сделать:
1. API, 
2. реферировать RSS, 
3. возможность реферировать по интервалам времени (по дням, неделям).
4. плагины к броузеру для выделения в тексте предложений.

Если есть люди желающие помочь в создании этих вещей, пишите. 

update1:
Добавил формат вывода JSON, если добавить параметр json=true
update2:
Статистика собранная в гугл формах на данный момент (210 проголосовавших):
алгоритм 1-3: 77%(первый 50%)
все плохие: 23%


Ключевые слова оказались полезными для 70% опрошенных.

Как по мне совсем неплохо )
+32
5 мая 2011, 17:03
57

комментарии (21)

+3
not_ice5 мая 2011, 18:25#
Попробовал демку, вроде бы неплохо работает.
Было бы интересно встроить эту систему как плагин к CMS для автоматической генерации аннотации при сохранении страниц.
0
yuk5 мая 2011, 18:42#
Думаю это не сложно.
0
yuk6 мая 2011, 20:38#
сделал JSON API, так что можно попробовать.
0
sHinE5 мая 2011, 18:32#
А можете какую-нибудь литературу по этому вопросу посоветовать из разряд «для чайников»?
+1
yuk5 мая 2011, 18:41#
Можно почитать вот это www.olap.ru/basic/refer.asp пункт «Составление выдержек» — это самое близкое к тому что тут сделано. А вобще описание на русском LexRank я не находил. самое простое описание в википедии по той ссылке что в статье.
+2
maovrn5 мая 2011, 19:20#
>Какой алгоритм дал хороший результат?
Мое мнение. Алгоритм 1 (lexrank2) выдает фразы подлиннее, зато по ним можно понять смысл. Алгоритм 2 (pagerank) расстроил — фразы короткие, но без контекста бессмысленные. Алгоритм 3 где-то посредине.

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

>Как бы вы этим хотели пользоваться?
Помимо поля ввода для текста иметь поле ввода для URL страницы в интернете, чтобы не надо было копипастить текст.

Впечатление вцелом — это просто магия!
0
pixx5 мая 2011, 21:56#
Код AOT — это Си. Как вы делали интеграцию с python, если не секрет?
0
yuk5 мая 2011, 23:22#
Я использую Java SDK. О том как хорошие люди интегрировали словари АОТ с явой написанно здесьhabrahabr.ru/blogs/algorithm/105854/
0
Irokez6 мая 2011, 00:38#
у словарей не особо сложный формат, я когда то писал скрипт на питоне: aot.ru/download/Morphology.zip код правда старый
+3
Irokez5 мая 2011, 22:29#
Добавьте еще для сравнения алгоритм, который случайным образом выбирает предложения из текста.
0
yuk5 мая 2011, 23:45#
Это честно — добавил.
+1
ArtyV6 мая 2011, 10:59#
Иногда этот продвинутый алгоритм работает весьма неплохо :D
+1
ArtyV6 мая 2011, 11:02#
Целые предложения часто бывают информативными только частично, поэтому было бы хорошо показывать не предложения, а части предложений. Хотя не знаю верно ли это когда мы создаём реферат безотносительно какого-то искомого словосочетания (при поиске, например).
+1
yuk6 мая 2011, 11:37#
Ну в качестве попытки вырезать куски предложений там есть «ключевые фразы» и «ключевые действия» — это выделенные в тексте комбинации существительных и глаголов — а затем тот же алгоритм реферирования. А насчет реферирования относительно словосочетания, это несложно сделать — надо в коде сказать что вот эти предложения априори в 2-3 раза важнее других — планирую сделать.
0
yuk6 мая 2011, 21:53#
Кто хотел API — теперь оно есть. Возвращает список выделенных предложений, ключевых слов и действий в виде JSON списков, таким образом их можно выделять в своем GUI.
0
keith8 мая 2011, 01:31#
Результат обработки этой статьи:

Выдержка из текста(предложений: 3/12, время: 0.389 сек)

Алгоритм 1: (69% информации от всего текста): (lexrank2 with central greedy cosine)

За пару дней я написал несколько вариантов алгоритма суммаризации, взяв из интернета русскоязычные компоненты анализа русского текста, главным образом АОТ.
Главная идея этих подходов к реферированию — выбор главных предложений в тексте, тех, которые наилучшим образом передают смысл всего текста.
Я планирую сделать: 1. API, 2. реферировать RSS, 3. возможность реферировать по интервалам времени (по дням, неделям).
Алгоритм 2: (pagerank)

Главная идея этих подходов к реферированию — выбор главных предложений в тексте, тех, которые наилучшим образом передают смысл всего текста.
Если по вашему мнению какой-то из алгоритмов будет достаточно хорош.
Если есть люди желающие помочь в создании этих вещей, пишите.
Алгоритм 3: (lexrank)

Главная идея этих подходов к реферированию — выбор главных предложений в тексте, тех, которые наилучшим образом передают смысл всего текста.
Если по вашему мнению какой-то из алгоритмов будет достаточно хорош.
Если есть люди желающие помочь в создании этих вещей, пишите.
Алгоритм 4: (случайным образом)

Тема автоматического реферирования/аннотирования текста была поднята давно и было придумано множество способов ее реализации.
Если есть люди желающие помочь в создании этих вещей, пишите.
PS Добавил формат вывода JSON, если добавить параметр json=true
0
Nashev11 мая 2011, 17:39#
ИМХО, алгоритм 1 неплохо выдал. Лучше остальных.
0
yuk11 мая 2011, 17:47#
Да еще есть что тюнить, но я сам результатом доволен 80% позитивных отзывов. )
0
luksian11 мая 2011, 06:25#
Я тоже занимаюсь автоматическим анализом текстов. У меня есть кое какие результаты, если интересно можете почитать о них здесь.
0
yuk11 мая 2011, 11:26#
Интересно, ваш подход не похож на что-то стандартное. Хотя мне кажется это классификация по последовательности символов.
0
luksian11 мая 2011, 11:52#
В методе, который я описываю, разница в том, что последовательности перекрываются и выстраивается причинно-следственная связь. Что, кроме всего прочего, позволяет делать предсказания. Как человек, который слушает начало предложения и способен в некоторой степени предугадать, что будет в конце.

No comments:

Post a Comment