SWI-Prolog в семантической сети

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

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

Как вы интегрировались с таким языком программирования, как Java?

Изменить: как упоминалось в ответе, кажется, что службы REST или использование внешнего интерфейса SWI-Prolog - два лучших варианта.

Для чего вы использовали библиотеки пролога (в контексте семантической сети)?

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

Какая среда разработки использовалась? Emacs или его вариант, предоставляемый SWI-Prolog, кажется подавляющим ответом.

Мне никогда не нужна была IDE вроде Intellij IDEA для java. В конце концов, что бы я сделал, автозаполнение? Я понимаю необходимость языка, основанного на правилах. Опять же, причина, по которой я обсудил среду разработки, заключается в том, чтобы помочь мне отследить мое правило (отладить), а также, возможно, выявить аномалии в моих наборах знаний. Графический трассировщик SWI-Prolog удовлетворяет первое требование, но, по крайней мере, мне он показался дрянным и ограниченным. Но я не верю, что есть что-то еще.

Мне очень нравится идея использования SWI-Prolog, но я буду избегать ее, если это повлияет на производительность.

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

Примечание: когда я упоминаю ответ, я имею в виду ответ, предоставленный @littletable. Также для людей, интересующихся SWI-Prolog для семантической сети, интересно выглядит thea.


person uncaught_exceptions    schedule 26.01.2011    source источник
comment
Java выше уровня, чем Prolog? я!   -  person salva    schedule 27.01.2011
comment
Смешной. Как вы определяете программирование более высокого уровня. Аппаратная абстракция, переносимость ... Любые языки, которые зависят от правил установки и работают напрямую с логикой, не являются программированием более высокого уровня. Когда вы преподаете какое-то введение в язык, и он спрашивает вас, как мне выполнить итерацию, и вы говорите ему, почему вы хотите использовать итерацию, почему вы не можете определить транзитивное правило, это не высокоуровневое программирование.   -  person uncaught_exceptions    schedule 27.01.2011
comment
Боюсь, этот вопрос может быть слишком конкретным для SO. Вы можете попробовать задать этот вопрос в списке рассылки SWI-Prolog, списках .iai.uni-bonn.de / mailman / listinfo.cgi / swi-prolog   -  person Fred Foo    schedule 27.01.2011
comment
Вы, наверное, правы. Я отправил несколько писем и, вероятно, опубликую их на более конкретных форумах.   -  person uncaught_exceptions    schedule 29.01.2011
comment
У меня большой опыт программирования SWI-Prolog, но не в контексте семантической сети. Это вам чем-нибудь поможет?   -  person Little Bobby Tables    schedule 07.02.2011
comment
@littlebobbytables, это должно быть прекрасно. Я просто хочу услышать мнение людей, которые работали со Swi Prolog в производственной / коммерческой среде.   -  person uncaught_exceptions    schedule 07.02.2011


Ответы (2)


Отказ от ответственности: я не использовал SWI-Prolog в коммерческой / производственной среде, я не пробовал интерфейс SWI / Java (хотя в списке рассылки SWI-Prolog сообщалось, что он работает достаточно хорошо), и меня не интересует семантическая сеть.

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

В контексте большого проекта лучше всего рассматривать Prolog как предметно-ориентированный язык для написания процедур поиска - в отличие от SQL и хранилища. Prolog отлично справляется с одной задачей - с решением проблем поиска. Если ваша проблема может быть сужена до поиска допустимого присвоения набору переменных с учетом набора фактов и правил, Prolog - ваше оружие выбора: вам не придется беспокоиться ни о чем другом в вашем коде, кроме настройки запросы и правила. Он также будет работать достаточно быстро, особенно если вы скомпилируете предикаты. Prolog часто работает медленно не потому, что он по своей сути медленный, а потому, что он запускает процедуры поиска в большом пространстве поиска.

Помня об этом, вы можете интегрировать его с Java так же, как интегрируете SQL: Prolog позаботится о поиске. Он хранит постоянные данные и правила и выполняет запросы. Приложение Java позаботится обо всем остальном.

Среда разработки - это слабое место для Prolog. У вас не получится навороченной IDE - просто потому, что есть очень мало вещей, о которых стоит волноваться. Программы Prolog редко имеют полную информацию о времени компиляции, поэтому вы не получите идеального автозаполнения. Я просто использовал Emacs с всегда открытой оболочкой Prolog. В большинстве случаев текстовый трассировщик / отладчик Prolog подойдет. SWI поставляется со своим собственным графическим отладчиком, но я его не пробовал.

У Prolog есть несколько редко известных преимуществ: встроенная структура синтаксического анализа (правила DCG), отличная система макросов (расширение терминов) и мета-предикаты (вызов, поиск и т. Д.). Если вы умеете ими пользоваться, это настоящие козыри в вашей колоде.

Подводя итог: увеличивает ли Prolog производительность или снижает ее? Это зависит от того, что в настоящее время блокирует вашу продуктивность. Если вы тратите слишком много времени на размышления о том, как реализовать в Java процедуры представления знаний и поиска - просто используйте Prolog; Это не значит, что вы реализуете свои собственные красно-черные деревья вместо использования SQL. Если вы ищете производительность в мягком реальном времени и испорченную среду IDE - попробуйте что-нибудь еще.

person Little Bobby Tables    schedule 08.02.2011
comment
Отлично, это именно тот ответ, который я искал. Проблема, с которой я столкнулся, связана со знаниями, представленными в форме модели (семантическая модель совы, но не стоит слишком беспокоиться о деталях) и существующей библиотеке, написанной на прологе, которая может представлять эти знания и предоставлять эти знания для возможностей поиска и вывода. (Я собираюсь прервать комментарий, чтобы сохранить видимость согласованности) - person uncaught_exceptions; 08.02.2011
comment
Продолжение: Часть, которую вы могли бы объяснить дальше, - это этот оператор. Помня об этом, вы можете интегрировать его с Java так же, как интегрируете SQL. Как передать данные в пролог и вернуть результат в Java? - person uncaught_exceptions; 08.02.2011
comment
@ doc_180: У вас есть как минимум 3 простых варианта. (a) Запустите HTTP-сервер SWI-Prolog и используйте его как веб-службу REST. (b) Откройте канал к процессу Prolog и отправьте запросы в виде текста и получите результаты в виде текста. (c) Используйте JPL swi-prolog.org/packages/jpl (haven ' Сам пробовал, но сообщил, что работает). - person Little Bobby Tables; 09.02.2011
comment
Запрос канала к прологу, возможно, не для меня. REST WS поможет, но может стать болтливым. Я начал оценивать jpl около 3 дней назад, и мне кажется, что это нормально. Спасибо. - person uncaught_exceptions; 09.02.2011
comment
Отметка вашего ответа. Я попытался резюмировать состояние вопроса, отмечая его. Дайте мне знать, если у вас есть что добавить к нему. - person uncaught_exceptions; 09.02.2011
comment
+1 за обстоятельный ответ на узкоспециализированный вопрос. - person jprete; 09.02.2011

Я тоже не использовал его в производственной среде, но я интегрировал его в основанную на Java / Eclipse рабочую среду Bioclipse, для использования в реальных сценариях в рамках моей дипломной работы. Кроме того, диссертационная работа была сосредоточена на тестировании производительности и удобства использования интеграции пролога в Bioclipse.

Я дам краткие ответы на вопросы, которые вы задали ниже, но для всех, кто интересуется, большую часть информации можно найти в моем тезисе под названием " SWI-Prolog как инструмент семантической паутины для семантических запросов в Bioclipse: интеграция и тестирование производительности ", а также в моем соответствующем теге сообщения в блоге. Исходный код доступен в репозитории github.

Как вы интегрировались с таким языком программирования, как Java?

Я использовал интерфейс JPL Java Prolog

Для чего вы использовали библиотеки пролога (в контексте семантической сети)?

Я использовал его для сопоставления образцов с базой данных RDF, содержащей около 60000 спектров ЯМР, содержащих пики разной высоты. Я использовал это, чтобы проверить производительность SWI-Prolog для этой операции по сравнению с другими инструментами семантической паутины, такими как Pellet и Jena (на основе Java). (Кстати, SWI-Prolog намного превосходит оба этих инструмента).

Какая среда разработки использовалась?

Затмение RCP

Мне очень нравится идея использования swi prolog, но я буду избегать ее, если это повлияет на производительность.

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

person Samuel Lampa    schedule 16.02.2011