日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

【语言处理与Python】10.1自然语言理解\10.2命题逻辑

發布時間:2023/12/9 python 37 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【语言处理与Python】10.1自然语言理解\10.2命题逻辑 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

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[SEM='Country="greece"']-> 'Greece' NP[SEM='Country="china"']-> 'China' Det[SEM='SELECT']-> 'Which' | 'What' N[SEM='CityFROMcity_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 Country="china"

要達到能夠從句子到后來的生成的數據庫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

>>>m=nltk.Model(dom, val)

4、每個模型都有一個evaluate()方法,可以確定邏輯表達式。例如:

>>>print m.evaluate('(P&Q)',g) True >>>print m.evaluate('-(P&Q)',g) False >>>print m.evaluate('(P&R)',g) False >>>print m.evaluate('(P| R)',g) True

現在,我們只是局限在用字母P、Q等表示原子,句子。但是我們需要超越命題邏輯到一個更有表現力的東西,能夠看到里面的基本的句子,也就是一階邏輯。

轉載于:https://www.cnblogs.com/createMoMo/archive/2013/06/04/3116613.html

創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎

總結

以上是生活随笔為你收集整理的【语言处理与Python】10.1自然语言理解\10.2命题逻辑的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。