所以我最近提出了一些新的可能项目,这些项目必须处理从用户提交和生成的文本中获得"含义".
自然语言处理是处理这些问题的领域,经过一些初步研究,我发现OpenNLP Hub和大学合作就像尝试项目一样.而stackoverflow就是这样.
如果有人能把我与一些好的资源联系起来,从研究论文和介绍性文本到apis,我会比一个6岁的小孩打开他的圣诞礼物更开心!
通过您的一条建议,我发现了opencyc("世界上最大,最完整的常识知识库和常识推理引擎").更令人惊奇的是,有一个项目是opencyc的蒸馏版本,名为UMBEL.它具有rdf/owl/skos n3语法中的语义数据.
我也偶然发现ANTLR,为解析器生成"构建识别,翻译,编译器和翻译从语法的说明".
我在这里有一个问题,列出了大量的免费和开放数据.
感谢stackoverflow社区!
我是Prolog的新手并注意到'和'给出了不同的行为,但我很好奇为什么.具体来说,加载文件时,?- ['test1.pl'].
工作,而?- ["test1.pl"].
不是.
面试问题!
这是您通常member
在Prolog中定义关系的方式:
member(X, [X|_]). % member(X, [Head|Tail]) is true if X = Head
% that is, if X is the head of the list
member(X, [_|Tail]) :- % or if X is a member of Tail,
member(X, Tail). % ie. if member(X, Tail) is true.
Run Code Online (Sandbox Code Playgroud)
仅使用一个规则定义它.
我只与Prolog合作了几天.我理解一些事情,但这真让我感到困惑.
我想要编写一个带有列表并将其展平的函数.
?- flatten([a,[b,c],[[d],[],[e]]],Xs).
Xs = [a,b,c,d,e]. % expected result
Run Code Online (Sandbox Code Playgroud)
该函数取出列表的内部结构.
这是我到目前为止:
flatten2([],[]).
flatten2([Atom|ListTail],[Atom|RetList]) :-
atom(Atom), flatten2(ListTail,RetList).
flatten2([List|ListTail],RetList) :-
flatten2(List,RetList).
Run Code Online (Sandbox Code Playgroud)
现在,这在我打电话时起作用:
?- flatten2([a,[b,c],[[d],[],[e]]], R).
R = [a,b,c,d,e]. % works as expected!
Run Code Online (Sandbox Code Playgroud)
但是当我打电话来查看我输入的列表是否已经展平时,将返回false
而不是true
:
?- flatten2([a,[b,c],[[d],[],[e]]], [a,b,c,d,e]).
false. % BAD result!
Run Code Online (Sandbox Code Playgroud)
为什么一方面工作,另一方面又不工作?我觉得我错过了很简单的事情.
我想听听那些在使用swi-prolog的语义库方面拥有真实编程经验的人.
编辑:这个问题的原因是,在我与prolog经验交谈的很多人中,他们中的大多数人似乎已经在他们的学术项目中使用它进行一些人工智能编程.我想知道是否有人在生产环境中广泛使用它.由于实时可维护性,性能不同于完成项目以获得好成绩.
你是如何与Java这样的编程语言集成的?
编辑:如答案所述,似乎REST服务或使用swi prolog的外部接口是两个最佳选择.
您使用prolog库(在语义Web的上下文中)是什么?
可能不会在这里得到明确的答案.可能是,这个问题属于语义溢出.我现在有一个很好的想法,并将在更合适的论坛继续讨论.
使用了什么开发环境? 由swi prolog提供的Emacs或其变体似乎是压倒性的答案.
我从来没有想过像Intellij IDEA这样的IDE.毕竟我会做什么,自动完成?我理解基于规则的语言的必要性.再说一遍,我之所以讨论开发环境,是为了帮助我追踪我的规则(调试),也可能在我的知识集中找出异常.Sw prolog图形跟踪器照顾第一个要求,但至少对我来说,它出现了粗制滥造和有限.但我不相信还有别的.
我真的很喜欢使用swi prolog的想法,但如果它影响生产力,它会远离它.
如答案所述,prolog应该被用来表现它擅长的东西.我总是知道这一点,因此我的问题是与其他编程语言的集成.似乎最大的生产力是开发人员的质量,并处于开发阶段.系统中的问题可能处于休眠状态且不易修复,但可以通过使用一组问题来检查系统的有效性.
注意:当我提到答案时,我指的是@littletable提供的答案.也有兴趣在SWI序言中人们对于语义网,西娅看起来很有趣.
我发现这个很好的片段用于解析Prolog中的lisp(从这里开始):
ws --> [W], { code_type(W, space) }, ws.
ws --> [].
parse(String, Expr) :- phrase(expressions(Expr), String).
expressions([E|Es]) -->
ws, expression(E), ws,
!, % single solution: longest input match
expressions(Es).
expressions([]) --> [].
% A number N is represented as n(N), a symbol S as s(S).
expression(s(A)) --> symbol(Cs), { atom_codes(A, Cs) }.
expression(n(N)) --> number(Cs), { number_codes(N, Cs) }.
expression(List) --> "(", expressions(List), ")".
expression([s(quote),Q]) --> "'", expression(Q).
number([D|Ds]) --> digit(D), number(Ds).
number([D]) --> digit(D).
digit(D) --> …
Run Code Online (Sandbox Code Playgroud) 我想读取纯文本文件并将谓词应用于每一行(谓词包含write
输出的内容).我该怎么办?
我正在解析一个由一系列行组成的相当简单的文件格式,每行都有一些空格分隔的字段,如下所示:
l 0x9823 1
s 0x1111 3
l 0x1111 12
?
Run Code Online (Sandbox Code Playgroud)
我正在使用SWI-Prolog.这是我到目前为止的DCG:
:- consult(library(pure_input)).
load_trace(Filename, Traces) :-
phrase_from_file(trace_file_phrase(Traces), Filename).
trace_file_phrase([]) --> [].
trace_file_phrase([T|Ts]) --> trace_phrase(T), trace_file_phrase(Ts).
trace_phrase(access(Type, Address, SinceLast)) -->
access_type(Type), space,
address(Address), space,
nat(SinceLast), newline.
access_type(load) --> "l".
access_type(store) --> "s".
address(Number) --> "0x", hexnum(Number).
hexdigit(N) --> digit(N).
hexdigit(10) --> "a". hexdigit(11) --> "b". hexdigit(12) --> "c".
hexdigit(13) --> "d". hexdigit(14) --> "e". hexdigit(15) --> "f".
hexnum(N) --> hexdigit(D), hexnum(D, N).
hexnum(N, N) --> [].
hexnum(A, N) --> hexdigit(D), …
Run Code Online (Sandbox Code Playgroud) 如果您定期编写Prolog程序,您可能拥有自己依赖的谓词库.一些Prolog系统带有丰富的预定义谓词,有些则没有.有些系统有库,但它们与其他系统大多不兼容.此外,许多现有的库包含许多很少需要的谓词.但是,有一些谓词"应该"始终存在.然后,有一些进展,因为十一月发生这样和Cor.2(草案).为什么不在这里呢?
那么你最喜欢的谓词是什么?这是谓词,在ISO核心中没有定义.
首先:between/3
,member/2
,length/2
,dif/2
,maplist/2
,...
对于DCG中:seq//1
,iseq//1
,... //0
.
dcg ×10
prolog ×9
swi-prolog ×3
iso-prolog ×2
list ×2
flatten ×1
io ×1
iso ×1
java ×1
lisp ×1
nlp ×1
parsing ×1
prolog-cut ×1
semantic-web ×1
sml ×1