【发布时间】:2015-07-30 07:11:38
【问题描述】:
我有一个Weka arff file,其中的属性是 Prolog 查询。
我想从文件中读取查询,修改它,然后运行查询。
weka arff 文件开头如下:
@relation propositionalization
@attribute 'link(_, A, _), link(A, _, _)' {'+'}
@attribute 'reaction(A, 0), link(A, B, _), link(B, C, _), reaction(C, 1), link(B, D, activation), reaction(D, 0), reaction(B, 0), link(A, E, _), link(E, F, follows), reaction(F, 1)' {'+','-'}
@attribute 'reaction(A, 0), link(A, B, _), link(B, C, _), reaction(C, 1), reaction(B, 1), link(A, D, _), link(D, E, follows), reaction(E, 0)' {'+','-'}
等
我有一个由以下组成的 dcg:
list([]) -->[].
list([L|Ls]) --> [L],list(Ls).
get_feature(Feature) --> "@attribute '",list(Feature), "'",list(_).
我读了文件:
read_my_file(File,Lines):-
open(File,read,Stream,[]),
read_lines(Lines,Stream),!.
read_lines([H|T],Stream):-
read_line_to_codes(Stream,H), H\=end_of_file, read_lines(T,Stream).
read_lines([],Stream):-close(Stream).
并使用以下调用phrase/2将特征提取为代码列表。
lineCodes_feature(Line,Feature):-
phrase(get_feature(Feature),Line),!.
然后我打电话:
read_my_file('my_file.arff',Lines),
member(Line,Lines),
lineCodes_feature(Line,Feature),
atom_codes(Atom,Feature).
然后回溯以将每个特征视为一个原子。
我被困在下一步修改和运行它作为查询。 我想将反应/2 项更改为反应/3,其中每个项的附加参数将相同。
例如原子术语
'reaction(A, 0), link(A, B, _), link(B, C, _), reaction(C, 1), reaction(B, 1), link(A, D, _), link(D, E, follows), reaction(E, 0)'
我想成为一个列表:
[reaction(newarg,A, 0), link(A, B, _), link(B, C, _), reaction(newarg,C, 1), reaction(newarg,B, 1), link(A, D, _), link(D, E, follows), reaction(newarg,E, 0)]
这将允许我以某种方式使用 call/1 来查询内部数据库?
对我的方法的任何帮助或 cmet 表示赞赏。
【问题讨论】:
-
cs.waikato.ac.nz/ml/weka/arff.html 我想是这里,我只对文件的开头感兴趣,这里定义了属性。
标签: prolog weka swi-prolog arff