ПО, ЭВМ и АСУ из Таможенного Союза

Информация о пользователе

Привет, Гость! Войдите или зарегистрируйтесь.



Пролог (Prolog)

Сообщений 1 страница 10 из 10

1

Если Лису нужен разбор языков, то для произвольного уровня сложности, включая естественные, давно существует какой-нибудь Пролог, синтаксис которого проще даже несамосрабатывающего мертвотекственного БНФ.

Отредактировано MihalNik (2017-11-07 12:18:37)

0

2

Я вот думаю, зачем нам пролог? Есть же современные theorem provers (coq например). В них что-нибудь парсят, интересно?

0

3

не нравится мне эта идея. Слишком сложно (перебор быстрым не бывает. А если бывает - то упаришься доказывать, что он быстрый).
чтобы доказать, прийдётся:
1) объяснить как происходит перебор
2) объяснить как описывать грамматику
3) объяснить почему перебор на таком описании грамматики будет эффективным.

А потом открываем русскую википедию и там написано - всё что вы делали, было зря:

Считается, что в силу произвольного порядка слов в русском языке, использование Расширенных сетей переходов для обработки русско-язычных текстов малоэффективно

Конечно есть работы с таким подходом (две штуки нашел):
2012, В. В. Гаршина, Ю. А. Богоявленская,  РАЗРАБОТКА ЛИНГВИСТИЧЕСКОГО ПАРСЕРА РУССКОГО ЯЗЫКА
   они использовали связку C# + swi=prolog
на гитхабе есть реализация пролога специально на C# для парсинга от парня, которые занимается склонянениями и  спряжениями:
   https://github.com/bzaar/prolog

Однако, мне что-то таким путем идти категорически не хочется...

0

4

Есть же современные

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

1) объяснить как происходит перебор

Обход дерева в глубину.

2) объяснить как описывать грамматику

Непосредственно исполняемым кодом - правилами.

3) объяснить почему перебор на таком описании грамматики будет эффективным.

Почему перебор должен быть эффективным? Это зависит целиком от того, как его прописать и что перебирать.

РАЗРАБОТКА ЛИНГВИСТИЧЕСКОГО ПАРСЕРА РУССКОГО ЯЗЫКА

Эта задача решаема словарём и словари, где описаны чуть менее чем все употребительные слова, составлены.

0

5

MihalNik написал(а):

Эта задача

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

Какую "эту" задачу ты тут имел в виду? Лингвистический анализ не сводится к морфологическому.

0

6

Лис написал(а):

Лингвистический анализ не сводится к морфологическому.

Лис ещё помнит упражнения по русскому языку, где нужно было подставлять слова/сочетания в нужной форме? Как бы программирование с поддержкой падежей сводится именно к таким.

Отредактировано MihalNik (2017-11-14 09:05:55)

0

7

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

0

8

Лис написал(а):

Ещё мне непонятно, почему пролог и лисп считаются экивалентными.

Кем?

0

9

2016-01-11, N_Ikhsanov, Парсинг на языке Prolog
2016-01-06, N_Ikhsanov, PROLOG для программистов

Из комментариев:
«пролог нужен только и исключительно для решения загадки Эйнштейна»
«Ну объясните мне, чем first order logic хорошее средство для описания процессов, идущих во времени: сначала происходит то-то, потом то-то, а потом то-то.»

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

«на Прологе легко объявить «морковь сын зайца» вместо «морковь корм для зайца» (ну бывает, копипастил, опечатался)»

«у Братко был пример, где обезьяна должна сначала придвинуть ящик к банану, а потом залезть на него и достать банан. И там же объяснялось, что сначала надо пробовать достать банан, а потом уже двигать, иначе система будет бесконечно двигать ящик (я могу ошибаться в деталях, но суть примерно такова).»

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

«для работы со списками рекурсия не обязательна, она обязательна для работы с деревьями»

Отредактировано Лис (2019-11-24 09:29:59)

0

10

Лис написал(а):

2016-01-06, N_Ikhsanov, PROLOG для программистов

И там:

Возврат к предыдущему вызову называется бэктрекингом (backtracking). По существу это откат, поскольку все значения, полученные переменными в отмененной процедуре, отменяются. Бэктрекинг – уникальное средство данного языка, не имеющее аналогов ни в одном из других массовых языков программирования.

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

0