使用R-2-L字时Prolog中的未定义过程错误

时间:2015-12-23 20:14:03

标签: prolog nlp

我想用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字样?

编辑: 在附图中,请注意在红色框中,它成功地将ي与男性匹配。在蓝色框中,当它失败时,它应该已经回溯并开始连接以尝试匹配新单词,而是产生显示的错误

SnapShotOfDebugging

1 个答案:

答案 0 :(得分:0)

Mac 上使用SWI-Prolog时必须小心。复制粘贴有一点问题。如果您使用[user],然后经过多行,则不会读取所有行:

enter image description here

这种情况一直发生,与阿拉伯语脚本或unicode无关,或者与此类似。我已向SWI Prolog here提交了错误报告。当您使用[user],并逐行执行这些行时,您将获得正确的结果。

enter image description here

在上面的屏幕截图中,您看到我做了一个一个粘贴,因为有多个提示'|:'。其他Prolog系统没有必要这个问题,例如我进入Jekejeke Prolog:

enter image description here

SWI-Prolog的最佳解决方法可能是将事实存储在一个文件中,并从那里查询。在Jekejeke Prolog中,我必须调查,为什么逗号之后的空格显示在错误的一面。