Что сейчас лучше всего подходит для обработки текста по шаблонам?
Или что-то еще смущает?
XML и XSLT?
>07.02.2006 17:29
Прошло два дня, за которые ты не смог залезть в гугл, набрать Delphi Regexp, скачать класс, подключить его в программу и запустить. Дело трех минут.
XML и XSLT?Для того, чтобы их использовать, текст нужно уже обработать до уровня данных.
Вопрос как раз и был, чем лучше это сделать.
набрать Delphi Regexp, скачать класс, подключить его в программу и запустить. Дело трех минут.Я читал эту ветку, но я не использую Delphi и пока не собираюсь.
Так что для меня цепочка значительно удлиннилась бы (начиная с поиска дистриба Delphi и ее установки)
![](/images/graemlins/frown.gif)
И следует ли из твоего утверждения, что мне подойдет какой-нибудь модуль Regexp-а? То есть он удовлетворяет по крайней мере первым двум пунктам?
Как-то я в этом сомниваюсь, иначе мне бы давно ответили что-то типа: бери любой (или какой-то конкретный) Regexp или Perl или Python.
Рекомендую формализовать постановку до предела.
Рекомендую формализовать постановку до предела.
Попробую. Хотя пока что есть только общие идеи. Я как раз и хотел выбрать наиболее подходящую платформу.
Попробую сформулировать примеры задач:
1. Предварительный фильтр для добычи информации (это вроде бы называется data mining).
Например, в инете найдена статья, которая удовлетворяет определенным критериям. Но чтобы ее обрабатывать дальше, ее нужно привести в нормальный вид (нормализовать
![](/images/graemlins/smile.gif)
Основная задача здесь - исключить потери информации не злоупотребляя при этом ручной обработкой.
2. Сама обработка добытой информации возможно тоже мб сделана подобным образом, но это можно рассматривать как следующий шаг.
Я предполагаю, что с этой целью может быть использовано следующее:
1. библиотеки для работы с регулярными выражениями (какие из них более гибкие и универсальные? или они все примерно одинаковые?);
2. Perl/Python
3. Lisp/Refal/Hascel/ML/...
p.s.: И как у меня получилось?
PS Hascel
![](/images/graemlins/lol.gif)
советую отказаться от желания _ничего_ не потерять в _каждой_ статьеЭто не самоцель - просто хочется, чтобы оператор системы мог управлять этим: то есть хочет точнее - тратит больше времени, а хочет тратить меньше времени - повышает шанс потери информации.
если твоему роботу удастся "осознать" 1% информации это будет большой успехОсновная идея в том, чтобы это был не просто робот, а его продвинутый симбиоз с человеком.
И не надо переоценивать регулярные выраженияА какая альтернатива?
PS HascelПочему именно он?
1. Xml, XPath - может быть xslt (но хороших решений на xslt-е не видел)
2. Регулярные выражения
3. "клей" - одна из универсальных платформ - .net/java.
зы
прогнозирую, что хорошего готового варианта решения твоей задачи нет, тк. она подразумевает работу с вариантами, но сегодняшнее поколение ПО с вариантами работать не умеет, вернее даже - сегодняшнее ЯП не умеют работать с вариантами.
сегодняшнее ЯП не умеют работать с вариантамиТы про стремление к жесткой типизации?
прогнозирую, что хорошего готового варианта решения твоей задачи нет, тк. она подразумевает работу с вариантамиВ голове крутится идея скрестить регэкспы и нейросети
![](/images/graemlins/wink.gif)
Нейросети скрещиваются со всем, чем угодно.
Только обучивать за&бёшься, это на данном уровне их развития гарантированно.
Это не важно - при правильной подходе.
> сегодняшнее ЯП не умеют работать с вариантами
"умеет работать" - это другими словами - "предоставляет удобный способ для быстрого выполнения частовстречающихся задач".
Задачи для вариантов:
1. Выделить общие части
2. Выделить различия
3. Выдать весь список вариантов
4. Выделить незавимисые друг от друга группы вариантов
5. Определить условия выполняемые для данного варианта/группы вариантов
6. Определить какие варианты подпадают под данное условие
7. Определить является ли данный список вариантов формально полным
8. Определить есть ли противоречия в условиях?
и т.д.
это все задачи только для самих вариантов, а ведь варианты еще активно пересекаются со следствиями, выражениями, динамикой и т.д.
текущие ЯП все эти задачи, если и пытаются решать - то очень и очень поверхностно.
Только обучивать за&бёшься, это на данном уровне их развития гарантированно.С чем это, кстати, связано?
Разве обученную нейросеть нельзя описать автоматом?
нейросети - это тупик, потому что у них слишком много "не":
1. не управляемы
2. не устойчивы
3. не переносимы
4. не расширяемы
5. не повторно-используемы
и т.д.
1. для выявления каких-то тенденций (формирования гипотез).
2. балансировки (подбор коэффициентов к) имеющейся модели
для формулировки гипотезы, ее проверки, и вписывании этой гипотезы в общую модель - уже необходимы логические построения.
Попробую. Хотя пока что есть только общие идеи. Я как раз и хотел выбрать наиболее подходящую платформу.Про news.google.com слышал? Мне кажется, что ребята успешно делают нечто из той же области, в которую ты хочешь внедриться. Ну и http://citeseer.ist.psu.edu/ конечно в помощь.
"умеет работать" - это другими словами - "предоставляет удобный способ для быстрого выполнения частовстречающихся задач".Понял, спасибо.
> В голове крутится идея скрестить регэкспы и нейросетиТак такой гибрид может и не быть нейросетью.
нейросети - это тупик, потому что у них слишком много "не"
Ну или по крайней мере потерять часть ее негативных сво
"умеет работать" - это другими словами - "предоставляет удобный способ для быстрого выполнения частовстречающихся задач".Понял, спасибо.
> В голове крутится идея скрестить регэкспы и нейросетиТак такой гибрид может и не быть нейросетью.
нейросети - это тупик, потому что у них слишком много "не"
Ну или по крайней мере потерять часть ее негативных свойств.
И вообще по пунктам:
1. не управляемыЧто ты в это вкладываешь?
3. не переносимы
5. не повторно-используемые
2. не устойчивыЧитал, что, наоборот, они достаточно устойчивы, поэтому их и используют для распознавания образов.
4. не расширяемыА разве нельзя добавить еще нейронов в работающую нейросеть?
нейросеть можно использовать скорее только:Не подскажешь, где про это можно подробнее почитать?
1. для выявления каких-то тенденций (формирования гипотез).
2. балансировки (подбор коэффициентов к) имеющейся модели
Спасибо, посмотрю.
управляемость - это прогнозируемые изменения (т.е., например, получение ответа на вопрос - что нам надо сделать, чтобы распознавалась не только a маленькая, но и A большая).
чтобы можно было делать прогнозируемые изменения, необходим ответ на вопрос - "а как мы это делаем?"
нейросеть - ответа на данный вопрос дать не может.
> 2. не устойчивы
> 3. не переносимы
> 5. не повторно-используемые
> 4. не расширяемы
в целом, это все следствия п.1.
Допустим у нас уже есть нейросеть - которая умеет распознавать букву A, причем тренировали мы ее на символах A и Б.
что будет, если на вход будут подаваться буквы Д? правильный ответ - ничего заранее определенного сказать нельзя, результат сильно зависит от конкретной нейросети, условий обучения и т.д.
это пример - неустойчивости, т.к. небольшое изменение исходной задачи привело к невозможности дать хоть какой-нибудь прогнозируемые ответ.
уже есть нейросеть, которая умеет выделять буквы A из входного потока содержащего буквы A и Б.
По условиям новой задачи - буквы A надо выделять на фоне букв A, Б и Д.
что надо сделать, чтобы имеющая нейросеть смогла выполнять данную задачу? правильный ответ - нейросеть от-reset-ить, и провести конфигурирование и обучение заново.
это пример - не расширяемости (не переносимости, не повторно-используемости т.к. опять же любое изменение исходной задачи требует начинать все с нуля.
не знаю, т.к. направление мной классифицировано, как тупиковое - то отслеживаю его - постольку-поскольку.
это пример - неустойчивости, т.к. небольшое изменение исходной задачи привело к невозможности дать хоть какой-нибудь прогнозируемые ответ.Если можно выделить эту неустойчивость - можно привлечь человека на помощь нейросети.
правильный ответ - нейросеть от-reset-ить, и провести конфигурирование и обучение заново.А разве обязательно резетить? Вроде можно просто дотренировать?..
в итоге - ты скорее всего получить перетренированную нейросеть. что дальше?
Hascel, Почему именно он?
Я просто имел в виду что пишется "Haskell". По мне если уж что и подходит, то какой-нибудь Пролог. Ну или какой-то функционально-логический ЯП. Уж не ООП полюбому. ФЛ языки, кстати, как раз "умеют работать с вариантами". Из этого направления я знаю только Curry, и то чуть-чуть совсем, но можешь посмотреть...
не умеют
потому что хотя бы простейшую задачу - когда ответ можно получить через два направление решения, ФЯ тоже не поддерживают (не предлагают никакого удобного способа для решения этой проблемы).
> функционально-логический ЯП
функционально можно писать на любом языке
но вот поддержка в виде community, библиотек, средств разработки, возможность осуществления внутренней автоматизации и т.д. - будет только под универсальной платформой.
ps
имхо, решить отдельную небольшую задачу на ФЯ можно попробовать, но делать ставку на ФЯ при создании целого проекта (при решении целой группы задач) - не стоит.
что будет, если на вход будут подаваться буквы Д? правильный ответ - ничего заранее определенного сказать нельзя, результат сильно зависит от конкретной нейросети, условий обучения и т.д.Ты знаешь хоть одну систему (алгоритмы которые обучали (настраивали) на одну часть (выборку) данных,
это пример - неустойчивости, т.к. небольшое изменение исходной задачи привело к невозможности дать хоть какой-нибудь прогнозируемые ответ.
а потом дали данные из другой выборки и все работало?
Что-то ничего в голову не приходит.
> когда ответ можно получить через два направление решения, ФЯ тоже не поддерживают
> (не предлагают никакого удобного способа для решения этой проблемы).
Наглая ложь.
Следства логического программирования либо есть, либо легко встраиваются.
---
...Я работаю антинаучным аферистом...
Следства логического программирования либо есть, либо легко встраиваются.
А можно про это подробнее?
а потом дали данные из другой выборки и все работало?
во-первых, в первую очередь шел разговор о предсказуемости поведения.
во-вторых, хорошие программы(алгоритмы) - как раз отличаются тем, что дает адекватный ответ даже на непредвиденные ситуации.
> а потом дали данные из другой выборки и все работало?
в-третьих, ты не внимательно читаешь условия задачи.
по условию задачу - входная выборка лишь была расширена (в практической задачи - таким расширением может являться шум и не была другой выборкой.
покажи код - которые позволяет средствами языка обрабатывать два варианта одной и той же задачи.
Если хочется получить что-нибудь прямо сейчас, я бы порекомендовал вот что: написать свой регекс-движок поверх существуюшего (типа дотНет позволяющий кратко и ёмко выражать желания, соответствующие твоей предметной области (плюс, естественно, возможность выражать желания на базовом языке).
В той формулировке, которой ты придерживаешься, работающее решение тянет на нобелевку, имхо.Мы простых путей не ищем (с)
![](/images/graemlins/grin.gif)
написать свой регекс-движок поверх существуюшего (типа дотНет позволяющий кратко и ёмко выражать желанияТо есть сейчас таких готовых движков нет? (для примера, хотя бы)
возможность выражать желания на базовом языкеВ смысле?
в-третьих, ты не внимательно читаешь условия задачи.
по условию задачу - входная выборка лишь была расширена (в практической задачи - таким расширением может являться шум и не была другой выборкой.
Так будут примеры, когда предсказуемое поведение?
Или ты имеешь ввиду, что НС - черный ящик и что там происходит не понятно, то и спорить не буду.
во-вторых, хорошие программы(алгоритмы) - как раз отличаются тем, что дает адекватный ответ даже на непредвиденные ситуации.
Наверное мне не повезло в жизни, ниразу не встречал такого в жизни.
Вообще в этом случае лично по мне нормально, когда алгоритм (прога) с этим не справится. А что она там ответит мне не важно, все равно
ведь не правильно.
А что она там ответит мне не важно, все равно ведь не правильно.Зато очень важно понять, что система не справилась с заданием.
Насколько это реально для нейросетей?
(Правда может опыт маловат).
Вообще, мое мнение, что НС для лохов, которые не хотят (не умеют) использовать
что-то другое.
А во-вторых, я так особо и не понял, что ты хочешь делать.
Есть куски текста одного документа. Есть некоторый шаблон:
заголовок, ключевые слова, введение, литература, автор, e-mail и т.д.
И нужно эти куски или их части запихать в этот шаблон?
Если так, то стремная задача, такое в полной мере никто не решил.
Есть примерно два направления: один через анализ статистики (частота слов
шрифт, позиция куска текста.
Есть подход в анализе семантики текста, но там нужны специальные словари,
которые муторно строить, и работает только в узкой области
(например тексты только линейной алгебрехотя это больше чем тебе надо).
Одно скажу, за неделю ты это не сделаешь
![](/images/graemlins/smile.gif)
вот этот алгоритм имеет предсказуемое поведение, как для чисел (под которые он разрабатывался):
c = a/b;
так и, например, под строки.
Для чисел мы получим ответ число (может быть и такие хитрые, как Nan, Inf и т.д. для строк мы получим ошибку - не получилось преобразовать в число.
Можем даже выделить пограничные случаи, когда и получение результата, и получение ошибки является адекватным поведением:
c = "10"/"3";
Для нейросети мы ничего сказать не можем, даже если она реализует простой алгоритм деления двух чисел.
Про то, как это встраивается в уже существующие, можно прочитать у Хювёнена---Сеппянена.
---
...Я работаю антинаучным аферистом...
Есть куски текста одного документа. Есть некоторый шаблон:
заголовок, ключевые слова, введение, литература, автор, e-mail и т.д.
И нужно эти куски или их части запихать в этот шаблон?
Скорее нужно уметь делать шаблон (можно в визуальном редакторе который позволял бы описывать определенные классы документов.
То есть:
1. 1 раз делаем шаблон по документу
2. применяем его к классу(множеству) документов
3. получаем оценки, насколько этот шаблон успешно отработал
4. на основании оценок улучшаем шаблон и/или меняем разбиение на классы
5. при необходимости переходим на 2
Основное пожелание - чтобы все пункты, кроме первого, были максимально автоматизированы.
Не в курсе, для НС нет случайно аналогов модульного программирования/ооп/шаблонов?
---
...Я работаю антинаучным аферистом...
вот этот алгоритм имеет предсказуемое поведение, как для чисел (под которые он разрабатывался):
c = a/b;
так и, например, под строки.
Для чисел мы получим ответ число (может быть и такие хитрые, как Nan, Inf и т.д. для строк мы получим ошибку - не получилось преобразовать в число.
То, что программа выдет ошибку, не является ответом программы. Это только говорит о том,
что с такими входными данными программа работать не может. Так что плохой пример, простой, в более сложных
ситуациях (я подразумевал пример из анализа данных) становится совсем не понятно (не хочу больше по этому
поводу спорить).
Для нейросети мы ничего сказать не можем, даже если она реализует простой алгоритм деления двух чисел.Често говоря, хотелось бы на такую сеть посмотреть. Хотел как-то научить сеть определять четность числа.
Если просто подать на вход числа (обучение то она не обучится (все претензии к Statistica, на ней пробовал). Да и вроде понятно,
что это бы не получилось.
Оставить комментарий
durka82
Нужно уметь описывать похожие документы и части документов с тем, чтобы можно было доставать из них нужную информацию.Основные требования:
1. Полуавтоматизированное создание шаблонов. Например: есть текст и есть части, которые в этом тексте важны (в виде списка текстов, например) - нужно, чтобы можно было создать автоматом такой шаблон, чтобы последующие тексты обрабатывались нужным образом с минимумом корректировок шаблона. Допускается использование произвольной вспомогательной информации. Главное, чтобы весь процесс был максимально автоматизирован.
2. Возможность комбинирования шаблонов, в том числе наследование. Например, мне понадобился шаблон, выделяющий еще какую-то информацию из текста по сравнению с уже существующим. И чтобы в этом случае можно было, создав шаблон только для этой новой части, получить нужный шаблон. И если какой-то из них изменится, то и связанные тоже должны измениться.
3. Желательно наличие визуализатора. Чтобы взаимодействие текста с шаблоном можно было увидеть.
4. Желательна интеграция с .net.
Интересуют обе платформы.
Какие варианты? (очень желательно обоснование)