Сви пролог в семантической паутине - PullRequest
22 голосов
/ 26 января 2011

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

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

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

Редактировать: Как уже упоминалось в ответе, кажется, что REST Services или использование внешнего интерфейса swi prolog являются двумя лучшими вариантами.

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

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

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

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

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

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

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

Ответы [ 2 ]

12 голосов
/ 08 февраля 2011

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

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

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

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

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

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

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

5 голосов
/ 16 февраля 2011

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

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

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

Я использовал Java Prolog JPL

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

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

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

Eclipse RCP

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

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

...