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

标签 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).

这称为使用: 解析(يلعب,A,S,D)。

期望:

A = male
S = لعب
D = single

代码说明: 它应该解析 يلعب 这个词,注意在阿拉伯语中 ي(右边的第一个字母)表示它是阳性词。而 لعب 是一个动词。

错误: 运行代码时,出现以下错误: 错误:解析/4:未定义的过程:dict/2

请注意,当使用英文字母模仿阿拉伯语单词时,代码的行为符合预期,不会产生此错误。

如何解决此类错误,或使 Prolog 理解从 R 到 L 的单词?

编辑: 在附图中,请注意,在红色框中,它成功地将 ي 匹配到男性。在蓝色框中,当它失败时,它应该回溯并开始连接以尝试匹配一个新词,但它却产生了所示的错误

SnapShotOfDebugging

最佳答案

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 中,我必须调查为什么逗号后的空格显示在错误的一侧。

关于prolog - 使用 R-2-L 字时 Prolog 中的未定义过程错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34443028/

相关文章:

prolog - 您如何将 DCG 翻译成 PROLOG 中的普通定语子句?

nlp - 仅来自 PhraseMatcher 的 Spacy 实体

list - 将整数列表拆分为正整数列表和负整数列表

matrix - 在 Prolog 中将事实提取为矩阵

Prolog:删除谓词如何提供列表的开头

python - 在 Python 中删除相似文档

java - 在Android中部署SimpleNLG,NoClassDefFoundError

python - Spacy 中的自定义句子分割

python - 如何在Python中从给定的句子中找到预期的目标短语或关键词?

prolog - 使用 not 运算符编写 prolog 语句