Подтвердить что ты не робот

Пролог Swi в семантической сети

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

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

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

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

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

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

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

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

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

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

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

4b9b3361

Ответ 1

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

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

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

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

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

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

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

Ответ 2

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

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

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

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

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

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

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

Eclipse RCP

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

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