Учитывая дерево разбора строки, моя цель - обновить мою базу знаний.сделать несколько утверждений на основе соответствия шаблону
Из предложения с переменной длиной, как следующее:
"node 1 is near node 2 that is near node 3 that is near node 4 that..."
в моем представлении становится дерево разбора представление предложения, например:
s(desc(np(noun(node),id(1)),vp(verb(is),prep(near),np(noun(node),id(2),rel_clause(rel(that)...
, из которого я хотел бы выведите и утвердите следующую информацию:
edge(1,2),edge(2,3),edge(3,4).
Как достичь этого Цель?
Я пытался управлять каким-то дело с чем-то вроде
:- dynamic edge/2.
extract(T):- T= s(desc(np(noun(node),id(A)),vp(verb(is),prep(near),np(noun(node),id(B)))),
assert(edge(A,B)).
extract(T):- T= s(desc(np(noun(node),id(A)),vp(verb(is),prep(near),np(noun(node),id(B),rel_clause(rel(that)...
и т.д. , но я хотел бы, чтобы управлять потенциально бесконечные предложения.
Я использую SWI-пролог.
EDIT: полный пример дерева разбора я получаю на входе:
desc(np(noun(node), id(1)), vp(verb(is), prep(near), np(noun(node), id(2),
rel_clause(rel(that), vp(verb(is), prep(near), np(noun(node), id(3),
rel_clause(rel(that), vp(verb(is), prep(near), np(noun(node), id(4)))))))))
Не могли бы вы изложить полный пример, в котором есть 'rel_clause', так что ясно, какова ваша структура? – lurker
добавил возможный ввод – newbie