Что сейчас лучше всего подходит для обработки текста по шаблонам?

durka82

Нужно уметь описывать похожие документы и части документов с тем, чтобы можно было доставать из них нужную информацию.
Основные требования:
1. Полуавтоматизированное создание шаблонов. Например: есть текст и есть части, которые в этом тексте важны (в виде списка текстов, например) - нужно, чтобы можно было создать автоматом такой шаблон, чтобы последующие тексты обрабатывались нужным образом с минимумом корректировок шаблона. Допускается использование произвольной вспомогательной информации. Главное, чтобы весь процесс был максимально автоматизирован.
2. Возможность комбинирования шаблонов, в том числе наследование. Например, мне понадобился шаблон, выделяющий еще какую-то информацию из текста по сравнению с уже существующим. И чтобы в этом случае можно было, создав шаблон только для этой новой части, получить нужный шаблон. И если какой-то из них изменится, то и связанные тоже должны измениться.
3. Желательно наличие визуализатора. Чтобы взаимодействие текста с шаблоном можно было увидеть.
4. Желательна интеграция с .net.
Интересуют обе платформы.
Какие варианты? (очень желательно обоснование)

durka82

Я слишком много хочу (то есть такого просто нет?)?
Или что-то еще смущает?

pilot

XML и XSLT?

evgen5555

>05.02.2006 01:10
>07.02.2006 17:29

Прошло два дня, за которые ты не смог залезть в гугл, набрать Delphi Regexp, скачать класс, подключить его в программу и запустить. Дело трех минут.

durka82

XML и XSLT?
Для того, чтобы их использовать, текст нужно уже обработать до уровня данных.
Вопрос как раз и был, чем лучше это сделать.

durka82

набрать Delphi Regexp, скачать класс, подключить его в программу и запустить. Дело трех минут.
Я читал эту ветку, но я не использую Delphi и пока не собираюсь.
Так что для меня цепочка значительно удлиннилась бы (начиная с поиска дистриба Delphi и ее установки)
И следует ли из твоего утверждения, что мне подойдет какой-нибудь модуль Regexp-а? То есть он удовлетворяет по крайней мере первым двум пунктам?
Как-то я в этом сомниваюсь, иначе мне бы давно ответили что-то типа: бери любой (или какой-то конкретный) Regexp или Perl или Python.

evgen5555

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

durka82

Рекомендую формализовать постановку до предела.

Попробую. Хотя пока что есть только общие идеи. Я как раз и хотел выбрать наиболее подходящую платформу.
Попробую сформулировать примеры задач:
1. Предварительный фильтр для добычи информации (это вроде бы называется data mining).
Например, в инете найдена статья, которая удовлетворяет определенным критериям. Но чтобы ее обрабатывать дальше, ее нужно привести в нормальный вид (нормализовать ): то есть убрать все декоративные составляющие (но при этом не потерять ничего от смысла статьи привести форматирование к некоторому стандарту (а то и вообще убрать его собрать в один документ (зачастую статья мб представлена на нескольких страницах, а то и вообще в древовидной структуре сохранив структуру, если она важна. Наверное результатом этой обработки должен стать некоторый xml-документ (мб fb подойдет). При этом допускается ручная работа, но очень желательно, чтобы одна и та же такая работа не делалась дважды - например, на основании этой работы формировался некоторый шаблон, который впоследствии применялся бы автоматом.
Основная задача здесь - исключить потери информации не злоупотребляя при этом ручной обработкой.
2. Сама обработка добытой информации возможно тоже мб сделана подобным образом, но это можно рассматривать как следующий шаг.
Я предполагаю, что с этой целью может быть использовано следующее:
1. библиотеки для работы с регулярными выражениями (какие из них более гибкие и универсальные? или они все примерно одинаковые?);
2. Perl/Python
3. Lisp/Refal/Hascel/ML/...
p.s.: И как у меня получилось?

rosali

Сомневаюсь что это задача для одного человека. У крупных компаний и то не особенно большие успехи. А задача понятно востребованная, например по отзывам в интернете предсказывать динамику цен акций. Кстати советую отказаться от желания _ничего_ не потерять в _каждой_ статье. Интернет большой, если твоему роботу удастся "осознать" 1% информации это будет большой успех. И не надо переоценивать регулярные выражения, для того чтобы "понимать" тест для начала хотя бы морфология нужна.
PS Hascel

durka82

советую отказаться от желания _ничего_ не потерять в _каждой_ статье
Это не самоцель - просто хочется, чтобы оператор системы мог управлять этим: то есть хочет точнее - тратит больше времени, а хочет тратить меньше времени - повышает шанс потери информации.
если твоему роботу удастся "осознать" 1% информации это будет большой успех
Основная идея в том, чтобы это был не просто робот, а его продвинутый симбиоз с человеком.
И не надо переоценивать регулярные выражения
А какая альтернатива?
PS Hascel
Почему именно он?

Dasar

Удобные технологические кубики:
1. Xml, XPath - может быть xslt (но хороших решений на xslt-е не видел)
2. Регулярные выражения
3. "клей" - одна из универсальных платформ - .net/java.
зы
прогнозирую, что хорошего готового варианта решения твоей задачи нет, тк. она подразумевает работу с вариантами, но сегодняшнее поколение ПО с вариантами работать не умеет, вернее даже - сегодняшнее ЯП не умеют работать с вариантами.

durka82

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

evgen5555

>В голове крутится идея скрестить регэкспы и нейросети

Нейросети скрещиваются со всем, чем угодно.
Только обучивать за&бёшься, это на данном уровне их развития гарантированно.

Dasar

> Ты про стремление к жесткой типизации?
Это не важно - при правильной подходе.
> сегодняшнее ЯП не умеют работать с вариантами
"умеет работать" - это другими словами - "предоставляет удобный способ для быстрого выполнения частовстречающихся задач".
Задачи для вариантов:
1. Выделить общие части
2. Выделить различия
3. Выдать весь список вариантов
4. Выделить незавимисые друг от друга группы вариантов
5. Определить условия выполняемые для данного варианта/группы вариантов
6. Определить какие варианты подпадают под данное условие
7. Определить является ли данный список вариантов формально полным
8. Определить есть ли противоречия в условиях?
и т.д.
это все задачи только для самих вариантов, а ведь варианты еще активно пересекаются со следствиями, выражениями, динамикой и т.д.
текущие ЯП все эти задачи, если и пытаются решать - то очень и очень поверхностно.

durka82

Только обучивать за&бёшься, это на данном уровне их развития гарантированно.
С чем это, кстати, связано?
Разве обученную нейросеть нельзя описать автоматом?

Dasar

> В голове крутится идея скрестить регэкспы и нейросети
нейросети - это тупик, потому что у них слишком много "не":
1. не управляемы
2. не устойчивы
3. не переносимы
4. не расширяемы
5. не повторно-используемы
и т.д.

Dasar

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

ava3443

Попробую. Хотя пока что есть только общие идеи. Я как раз и хотел выбрать наиболее подходящую платформу.
Про news.google.com слышал? Мне кажется, что ребята успешно делают нечто из той же области, в которую ты хочешь внедриться. Ну и http://citeseer.ist.psu.edu/ конечно в помощь.

durka82

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

durka82

"умеет работать" - это другими словами - "предоставляет удобный способ для быстрого выполнения частовстречающихся задач".
Понял, спасибо.
> В голове крутится идея скрестить регэкспы и нейросети
нейросети - это тупик, потому что у них слишком много "не"
Так такой гибрид может и не быть нейросетью.
Ну или по крайней мере потерять часть ее негативных свойств.
И вообще по пунктам:
1. не управляемы
3. не переносимы
5. не повторно-используемые
Что ты в это вкладываешь?
2. не устойчивы
Читал, что, наоборот, они достаточно устойчивы, поэтому их и используют для распознавания образов.
4. не расширяемы
А разве нельзя добавить еще нейронов в работающую нейросеть?

durka82

нейросеть можно использовать скорее только:
1. для выявления каких-то тенденций (формирования гипотез).
2. балансировки (подбор коэффициентов к) имеющейся модели
Не подскажешь, где про это можно подробнее почитать?

durka82

Спасибо, посмотрю.

Dasar

> 1. не управляемы
управляемость - это прогнозируемые изменения (т.е., например, получение ответа на вопрос - что нам надо сделать, чтобы распознавалась не только a маленькая, но и A большая).
чтобы можно было делать прогнозируемые изменения, необходим ответ на вопрос - "а как мы это делаем?"
нейросеть - ответа на данный вопрос дать не может.
> 2. не устойчивы
> 3. не переносимы
> 5. не повторно-используемые
> 4. не расширяемы
в целом, это все следствия п.1.
Допустим у нас уже есть нейросеть - которая умеет распознавать букву A, причем тренировали мы ее на символах A и Б.
что будет, если на вход будут подаваться буквы Д? правильный ответ - ничего заранее определенного сказать нельзя, результат сильно зависит от конкретной нейросети, условий обучения и т.д.
это пример - неустойчивости, т.к. небольшое изменение исходной задачи привело к невозможности дать хоть какой-нибудь прогнозируемые ответ.
уже есть нейросеть, которая умеет выделять буквы A из входного потока содержащего буквы A и Б.
По условиям новой задачи - буквы A надо выделять на фоне букв A, Б и Д.
что надо сделать, чтобы имеющая нейросеть смогла выполнять данную задачу? правильный ответ - нейросеть от-reset-ить, и провести конфигурирование и обучение заново.
это пример - не расширяемости (не переносимости, не повторно-используемости т.к. опять же любое изменение исходной задачи требует начинать все с нуля.

Dasar

> Не подскажешь, где про это можно подробнее почитать?
не знаю, т.к. направление мной классифицировано, как тупиковое - то отслеживаю его - постольку-поскольку.

durka82

это пример - неустойчивости, т.к. небольшое изменение исходной задачи привело к невозможности дать хоть какой-нибудь прогнозируемые ответ.
Если можно выделить эту неустойчивость - можно привлечь человека на помощь нейросети.
правильный ответ - нейросеть от-reset-ить, и провести конфигурирование и обучение заново.
А разве обязательно резетить? Вроде можно просто дотренировать?..

Dasar

> Вроде можно просто дотренировать?..
в итоге - ты скорее всего получить перетренированную нейросеть. что дальше?

rosali

Hascel, Почему именно он?

Я просто имел в виду что пишется "Haskell". По мне если уж что и подходит, то какой-нибудь Пролог. Ну или какой-то функционально-логический ЯП. Уж не ООП полюбому. ФЛ языки, кстати, как раз "умеют работать с вариантами". Из этого направления я знаю только Curry, и то чуть-чуть совсем, но можешь посмотреть...

Dasar

> ФЛ языки, кстати, как раз "умеют работать с вариантами".
не умеют
потому что хотя бы простейшую задачу - когда ответ можно получить через два направление решения, ФЯ тоже не поддерживают (не предлагают никакого удобного способа для решения этой проблемы).
> функционально-логический ЯП
функционально можно писать на любом языке
но вот поддержка в виде community, библиотек, средств разработки, возможность осуществления внутренней автоматизации и т.д. - будет только под универсальной платформой.
ps
имхо, решить отдельную небольшую задачу на ФЯ можно попробовать, но делать ставку на ФЯ при создании целого проекта (при решении целой группы задач) - не стоит.

Varvara2002

что будет, если на вход будут подаваться буквы Д? правильный ответ - ничего заранее определенного сказать нельзя, результат сильно зависит от конкретной нейросети, условий обучения и т.д.
это пример - неустойчивости, т.к. небольшое изменение исходной задачи привело к невозможности дать хоть какой-нибудь прогнозируемые ответ.
Ты знаешь хоть одну систему (алгоритмы которые обучали (настраивали) на одну часть (выборку) данных,
а потом дали данные из другой выборки и все работало?
Что-то ничего в голову не приходит.

Ivan8209

> потому что хотя бы простейшую задачу -
> когда ответ можно получить через два направление решения, ФЯ тоже не поддерживают
> (не предлагают никакого удобного способа для решения этой проблемы).
Наглая ложь.
Следства логического программирования либо есть, либо легко встраиваются.
---
...Я работаю антинаучным аферистом...

durka82

Следства логического программирования либо есть, либо легко встраиваются.

А можно про это подробнее?

Dasar

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

Dasar

> Следства логического программирования либо есть, либо легко встраиваются.
покажи код - которые позволяет средствами языка обрабатывать два варианта одной и той же задачи.

bleyman

В той формулировке, которой ты придерживаешься, работающее решение тянет на нобелевку, имхо. Со всеми вытекающими - чтобы получить результат, тебе придётся лет двадцать работать по теме, внимательно изучая результаты тусовки по теме (и создавая тусовку по теме, бтв).
Если хочется получить что-нибудь прямо сейчас, я бы порекомендовал вот что: написать свой регекс-движок поверх существуюшего (типа дотНет позволяющий кратко и ёмко выражать желания, соответствующие твоей предметной области (плюс, естественно, возможность выражать желания на базовом языке).

durka82

В той формулировке, которой ты придерживаешься, работающее решение тянет на нобелевку, имхо.
Мы простых путей не ищем (с)
написать свой регекс-движок поверх существуюшего (типа дотНет позволяющий кратко и ёмко выражать желания
То есть сейчас таких готовых движков нет? (для примера, хотя бы)
возможность выражать желания на базовом языке
В смысле?

Varvara2002

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

Так будут примеры, когда предсказуемое поведение?
Или ты имеешь ввиду, что НС - черный ящик и что там происходит не понятно, то и спорить не буду.
во-вторых, хорошие программы(алгоритмы) - как раз отличаются тем, что дает адекватный ответ даже на непредвиденные ситуации.

Наверное мне не повезло в жизни, ниразу не встречал такого в жизни.
Вообще в этом случае лично по мне нормально, когда алгоритм (прога) с этим не справится. А что она там ответит мне не важно, все равно
ведь не правильно.

durka82

А что она там ответит мне не важно, все равно ведь не правильно.
Зато очень важно понять, что система не справилась с заданием.
Насколько это реально для нейросетей?

Varvara2002

Не встречал задач, которые бы решались НС, но не решались обычными методами.
(Правда может опыт маловат).
Вообще, мое мнение, что НС для лохов, которые не хотят (не умеют) использовать
что-то другое.
А во-вторых, я так особо и не понял, что ты хочешь делать.
Есть куски текста одного документа. Есть некоторый шаблон:
заголовок, ключевые слова, введение, литература, автор, e-mail и т.д.
И нужно эти куски или их части запихать в этот шаблон?
Если так, то стремная задача, такое в полной мере никто не решил.
Есть примерно два направления: один через анализ статистики (частота слов
шрифт, позиция куска текста.
Есть подход в анализе семантики текста, но там нужны специальные словари,
которые муторно строить, и работает только в узкой области
(например тексты только линейной алгебрехотя это больше чем тебе надо).
Одно скажу, за неделю ты это не сделаешь

Dasar

> Так будут примеры, когда предсказуемое поведение?
вот этот алгоритм имеет предсказуемое поведение, как для чисел (под которые он разрабатывался):
c = a/b;
так и, например, под строки.
Для чисел мы получим ответ число (может быть и такие хитрые, как Nan, Inf и т.д. для строк мы получим ошибку - не получилось преобразовать в число.
Можем даже выделить пограничные случаи, когда и получение результата, и получение ошибки является адекватным поведением:
c = "10"/"3";
Для нейросети мы ничего сказать не можем, даже если она реализует простой алгоритм деления двух чисел.

Ivan8209

.
Про то, как это встраивается в уже существующие, можно прочитать у Хювёнена---Сеппянена.
---
...Я работаю антинаучным аферистом...

durka82

Есть куски текста одного документа. Есть некоторый шаблон:
заголовок, ключевые слова, введение, литература, автор, e-mail и т.д.
И нужно эти куски или их части запихать в этот шаблон?

Скорее нужно уметь делать шаблон (можно в визуальном редакторе который позволял бы описывать определенные классы документов.
То есть:
1. 1 раз делаем шаблон по документу
2. применяем его к классу(множеству) документов
3. получаем оценки, насколько этот шаблон успешно отработал
4. на основании оценок улучшаем шаблон и/или меняем разбиение на классы
5. при необходимости переходим на 2
Основное пожелание - чтобы все пункты, кроме первого, были максимально автоматизированы.

durka82

Не в курсе, для НС нет случайно аналогов модульного программирования/ооп/шаблонов?

Ivan8209

Может, тебе стоит ещё посмотреть на Емакс и спам-фильтры?
---
...Я работаю антинаучным аферистом...

Varvara2002

вот этот алгоритм имеет предсказуемое поведение, как для чисел (под которые он разрабатывался):
c = a/b;
так и, например, под строки.
Для чисел мы получим ответ число (может быть и такие хитрые, как Nan, Inf и т.д. для строк мы получим ошибку - не получилось преобразовать в число.

То, что программа выдет ошибку, не является ответом программы. Это только говорит о том,
что с такими входными данными программа работать не может. Так что плохой пример, простой, в более сложных
ситуациях (я подразумевал пример из анализа данных) становится совсем не понятно (не хочу больше по этому
поводу спорить).
Для нейросети мы ничего сказать не можем, даже если она реализует простой алгоритм деления двух чисел.
Често говоря, хотелось бы на такую сеть посмотреть. Хотел как-то научить сеть определять четность числа.
Если просто подать на вход числа (обучение то она не обучится (все претензии к Statistica, на ней пробовал). Да и вроде понятно,
что это бы не получилось.
Оставить комментарий
Имя или ник:
Комментарий: