我想用Prolog制作阿拉伯形态分析仪。
check(ي,1,male).
check(ت,1,female).
check(ا,1,me).
dict(لعب,3).
ending('',0,single).
ending(ون,2,plur).
parse([]).
parse(Word,Gender,Verb,Plurality):-
sub_atom(Word,0,LenHead,_,FirstCut),
check(FirstCut,LenHead,Gender),
sub_atom(Word,LenHead,_,LenAfter,Verb),
dict(Verb,LenOfVerb),
Location is LenHead+LenOfVerb,
sub_atom(Word,Location,LenAfter,_,EndOfWord),
ending(EndOfWord,_,Plurality).
使用以下方式调用:
parse(يلعب,A,S,D).
期望:
A = male
S = لعب
D = single
代码说明: 它应该解析单词يلعب,注意在阿拉伯语中,ي(右边的第一个字母)表示它是男性化的单词。 لعب是一个动词。
错误: 运行代码时,我收到以下错误: 错误:解析/ 4:未定义的过程:dict / 2
请注意,在使用英文字母模仿阿拉伯语单词时,代码会按预期运行,并且不会产生此错误。
如何解决此类错误,或让Prolog了解R-to-L字样?
编辑: 在附图中,请注意在红色框中,它成功地将ي与男性匹配。在蓝色框中,当它失败时,它应该已经回溯并开始连接以尝试匹配新单词,而是产生显示的错误
答案 0 :(得分:0)
在 Mac 上使用SWI-Prolog时必须小心。复制粘贴有一点问题。如果您使用[user],然后经过多行,则不会读取所有行:
这种情况一直发生,与阿拉伯语脚本或unicode无关,或者与此类似。我已向SWI Prolog here提交了错误报告。当您使用[user],并逐行执行这些行时,您将获得正确的结果。
在上面的屏幕截图中,您看到我做了一个一个粘贴,因为有多个提示'|:'。其他Prolog系统没有必要这个问题,例如我进入Jekejeke Prolog:
SWI-Prolog的最佳解决方法可能是将事实存储在一个文件中,并从那里查询。在Jekejeke Prolog中,我必须调查,为什么逗号之后的空格显示在错误的一面。