我将用Prolog编写一个程序来分析文本并识别其中的问题。给定文本,程序必须识别以疑问标记结尾的所有句子,并将它们保存在列表中。然后,该列表中的每个元素(即,以“?”结尾的每个短语)将进行分析和简化,以确保它们从“WH-问题”开始。
这里有一个例子:
“什么是气候变化?地球的气候一直在随着地质时间的变化而变化……什么是”温室效应“?温室效应指的是地球大气层吸收太阳能量的方式。……问题是:这些影响将如何平衡?”
该清单应包括:“什么是气候变化?”、“温室效应是什么?”、“这些影响将如何平衡?”
使用split_string/4,我将获得以下列表
L=“什么是气候变化”,“地球的(.).什么是温室效应”,“温室(.).问题是:这些影响将如何平衡?”
我不知道如何分析和进一步拆分列表中的每个元素,以便获得我向您展示的第一个列表。
你能帮帮我吗?谢谢:)
发布于 2015-12-07 20:21:28
我建议将原子的输出提供给DCG:
?- tokenize_atom('What is climate change?', L).
L = ['What', is, climate, change, ?].然后,您可以捕获文本'What'和?之间的所有内容。
为了完成捕获,图书馆(dcg/基础)有一个字符串//1,可以提供帮助。
示例:
:- use_module(library(dcg/basics)).
wh_capture(P, Cs) :-
tokenize_atom(P, Tks),
phrase(wh_capture(Cs), Tks).
wh_capture([]) --> [].
wh_capture([C|Cs]) -->
['What'], string(Content), [?], {C=['What'|Content]},
wh_capture(Cs).
wh_capture(Cs) --> string(_), [.], wh_capture(Cs).用法:
?- wh_capture('What about you? Phrase to skip. What now?',L).
L = [['What', about, you], ['What', now]] 字符串//1有一种特殊的行为..。我通常会在结尾的定界符后面划一个切口.喜欢
wh_capture([C|Cs]) -->
['What'], string(Content), [?], {C=['What'|Content]},
!, wh_capture(Cs).发布于 2015-12-07 18:18:09
对于任何语言来说,你的方法都是幼稚的(这是一个非常深入的话题),所以不要试图重新发明轮子(至少在你知道该重新发明什么之前)。Google )解析,然后是Prolog自然语言处理。
基本上,在进一步分析之前,您需要首先标记(在这个意义上说以后不会有太多问题)。
https://stackoverflow.com/questions/34139710
复制相似问题