首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >识别以"?“结尾的短语从Prolog中给定的文本中删除

识别以"?“结尾的短语从Prolog中给定的文本中删除
EN

Stack Overflow用户
提问于 2015-12-07 17:35:27
回答 2查看 101关注 0票数 2

我将用Prolog编写一个程序来分析文本并识别其中的问题。给定文本,程序必须识别以疑问标记结尾的所有句子,并将它们保存在列表中。然后,该列表中的每个元素(即,以“?”结尾的每个短语)将进行分析和简化,以确保它们从“WH-问题”开始。

这里有一个例子:

“什么是气候变化?地球的气候一直在随着地质时间的变化而变化……什么是”温室效应“?温室效应指的是地球大气层吸收太阳能量的方式。……问题是:这些影响将如何平衡?”

该清单应包括:“什么是气候变化?”、“温室效应是什么?”、“这些影响将如何平衡?”

使用split_string/4,我将获得以下列表

L=“什么是气候变化”,“地球的(.).什么是温室效应”,“温室(.).问题是:这些影响将如何平衡?”

我不知道如何分析和进一步拆分列表中的每个元素,以便获得我向您展示的第一个列表。

你能帮帮我吗?谢谢:)

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-12-07 20:21:28

我建议将原子的输出提供给DCG:

代码语言:javascript
复制
?- tokenize_atom('What is climate change?', L).
L = ['What', is, climate, change, ?].

然后,您可以捕获文本'What'?之间的所有内容。

为了完成捕获,图书馆(dcg/基础)有一个字符串//1,可以提供帮助。

示例:

代码语言:javascript
复制
:- 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).

用法:

代码语言:javascript
复制
?- wh_capture('What about you? Phrase to skip. What now?',L).
L = [['What', about, you], ['What', now]] 

字符串//1有一种特殊的行为..。我通常会在结尾的定界符后面划一个切口.喜欢

代码语言:javascript
复制
wh_capture([C|Cs]) -->
    ['What'], string(Content), [?], {C=['What'|Content]},
    !, wh_capture(Cs).
票数 1
EN

Stack Overflow用户

发布于 2015-12-07 18:18:09

对于任何语言来说,你的方法都是幼稚的(这是一个非常深入的话题),所以不要试图重新发明轮子(至少在你知道该重新发明什么之前)。Google )解析,然后是Prolog自然语言处理。

基本上,在进一步分析之前,您需要首先标记(在这个意义上说以后不会有太多问题)。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34139710

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档