怎么自己做网站加盟,深夜禁用直播app软件,小学校园网站建设方案,如何在网站上做咨询浮动窗口10.1自然语言理解 查询数据库 如果有人提出一个问题#xff1a; Which country is Athens in? 得到的回答应该是#xff1a; Greece. 这个数据可以通过数据库语言得到答案#xff1a; SELECT Country FROM city_table WHERE City athens 这里有一个文法#xff0c;可以把句…10.1自然语言理解 查询数据库 如果有人提出一个问题 Which country is Athens in? 得到的回答应该是 Greece. 这个数据可以通过数据库语言得到答案 SELECT Country FROM city_table WHERE City athens 这里有一个文法可以把句子转换成SQL语句 nltk.data.show_cfg(grammars/book_grammars/sql0.fcfg)
%start S
S[SEM(?np WHERE ?vp)] - NP[SEM?np]VP[SEM?vp]
VP[SEM(?v ?pp)] - IV[SEM?v] PP[SEM?pp]
VP[SEM(?v ?ap)] - IV[SEM?v] AP[SEM?ap]
NP[SEM(?det ?n)] - Det[SEM?det]N[SEM?n]
PP[SEM(?p ?np)] - P[SEM?p]NP[SEM?np]
AP[SEM?pp]- A[SEM?a]PP[SEM?pp]
NP[SEMCountrygreece]- Greece
NP[SEMCountrychina]- China
Det[SEMSELECT]- Which | What
N[SEMCityFROMcity_table] - cities
IV[SEM] - are
A[SEM]- located
P[SEM]- in
这使我们能够分析SQL查询
from nltk import load_parser
cp load_parser(grammars/book_grammars/sql0.fcfg)
query What cities are located in China
trees cp.nbest_parse(query.split())
answer trees[0].node[sem]
q .join(answer)
print q
SELECT City FROM city_table WHERE Countrychina 要达到能够从句子到后来的生成的数据库SQL语句也就是独立于任何的查询语言我们应该建立一个经典的逻辑的标准解释。 逻辑形式更加的抽象更加的通用。 自然语言、语义和逻辑 一个句子集W的模型是某种情况的形式化表示其中w中的所有句子都为真。 看下面这个图 段落的域D我们当前关心的所有实体是个体的一个集合而当集合从D建立关系也被确立。 例如 域D包括3个孩子Stefan、Klaus和Evi分别用s、k和e表示。记为D {s,k,e}。 表达式boy是包含Stefan和Klaus的集合表达式girl是包含Evi的集合表达式is running是包含Stefan和Evi的集合。 10.2命题逻辑 我们要设计一种逻辑语言使推理更加的明确。 [Klaus chased Evi]and [Evi ran away] 例如这句话 φ和ψ替代8中的两个子句并用替代对应的英语词and的逻辑操作φψ。这就是这句话的逻辑形式。 下面的标重指定了包含一些运算符的公式为真的条件。iff作为if and only if当且仅当的缩写。 注意蕴含这个运算符 形式(P -Q)的公式是为假只有当P为真并且Q为假时。如果P为假比如说P对应Themoonis madeofgreen cheese而Q为真比如说Q对应Twoplus two equa ls four那么P - Q的结果为真。 NLTK中的inference模块通过一个第三方定理证明器Prover9的接口可以进行逻辑证明。 例如 SnF表示Sylvania is to the north of Freedonia。 Fns表示Freedonia is to the north of Sylvania。 lp nltk.LogicParser()
SnF lp.parse(SnF)
NotFnS lp.parse(-FnS)
R lp.parse(SnF - -FnS)
prover nltk.Prover9()
prover.prove(NotFnS,[SnF, R])
True 一个命题逻辑的模型需要为每个可能的公式分配值True或False. 我们可以来简单做一个实验 1、先为每个命题符号分配一个值 val nltk.Valuation([(P,True),(Q, True),(R, False)]) 我们可以查看这个值的 val[P]
True 2、为了简化实验我们先忽略dom和g的设置 dom set([])
g nltk.Assignment(dom) 3、使用val来初始化模型m mnltk.Model(dom, val) 4、每个模型都有一个evaluate()方法可以确定逻辑表达式。例如 print m.evaluate((PQ),g)
True
print m.evaluate(-(PQ),g)
False
print m.evaluate((PR),g)
False
print m.evaluate((P| R),g)
True 现在我们只是局限在用字母P、Q等表示原子句子。但是我们需要超越命题逻辑到一个更有表现力的东西能够看到里面的基本的句子也就是一阶逻辑。转载于:https://www.cnblogs.com/createMoMo/archive/2013/06/04/3116613.html