python nltk 9 構建基於特徵的語法

2021-10-08 03:58:35 字數 3135 閱讀 7820

英文文件

中文文件

以下編號按個人習慣

**特徵在建立基於規則的語法中的作用。

以下以句子kim chased lee為例,找到其動詞的施事角色和主語,受事角色和賓語

def

lex2fs

(word)

:# 以下兩個物件中,不同的面向語義的特徵被稱為特徵結構(特徵+特徵值)。特徵結構包含各種有關語法實體的資訊

kim =

chase =

lee =

# chase為例,其主語(subject)扮演『施事』(agent)的角色。賓語(object)扮演『受事』(patient)的角色

chase[

'agt']=

'sbj'

chase[

'pat']=

'obj'

# fs 分別為kim,lee,chase迴圈

for fs in

[kim, lee, chase]

:if fs[

'orth'

]== word:

return fs

# 語法特徵

defgrammatical_features()

:# 找到動詞的施事角色和主語,受事角色和賓語。假設動詞左右的np分別是主語和賓語。

sent =

"kim chased lee"

tokens = sent.split(

) subj, verb, obj = lex2fs(tokens[0]

), lex2fs(tokens[1]

), lex2fs(tokens[2]

) verb[

'agt'

]= subj[

'ref'

] verb[

'pat'

]= obj[

'ref'

]for k in

['orth'

,'rel'

,'agt'

,'pat']:

print

("%-5s => %s"

%(k, verb[k]

))

檢視基於示例特性的語法,如下:

nltk.data.show_cfg(

'grammars/book_grammars/feat0.fcfg'

)

基於特徵的語法圖示解析的操作。如下,輸入分詞之後,匯入load_parser函式,以語法檔名為輸入,返回乙個圖表分析器cp。呼叫分析器的parse()方法將迭代生成的分析樹。

# 基於特徵跟蹤的圖表解析器

tokens =

'kim likes children'

.split(

)# 圖示分析器

cp = load_parser(

'grammars/book_grammars/feat0.fcfg'

, trace=2)

for tree in cp.parse(tokens)

:print

(tree)

像sg,pl這樣簡單的特徵值成為原子,原子值的特殊情況是布林值。

如何在nltk中構建和操作特徵結構。

使用建構函式featstruct()構造特徵結構,像字典一樣使用它。

# 特徵結構構造器

fs1 = nltk.featstruct(per=

3, num=

'p1'

, gnd=

'fem'

)print

(fs1[

'gnd'])

fs1[

'case']=

'acc'

print

(fs1)

# 更複雜的特徵結構

fs2 = nltk.featstruct(pos=

'n', agr=fs1)

print

(fs2)

print

(fs2[

'agr'])

# 使用feature=value格式的特徵-值對的方括號擴起的字串

fs3 = nltk.featstruct(

"[pos='n', agr=[per=3, num='pl', gnd='fem']]"

)print

(fs3)

特徵結構也可以看做乙個有向無環圖(dag),如下,

fs4 = nltk.featstruct(

"[name='lee', address=(1)[number=74, street='rue pascal'],spouse=[name='kim', address->(1)]]"

)

統一:合併兩個特徵結構,unify()函式實現。如果fs0和fs1的特徵結構共享乙個路徑目錄,那麼fs0和fs1的統一就會失敗,但是fs0中的value和fs1中的value是完全不同的。這是通過將統一的結果設定為none來實現的。

fs1 = nltk.featstruct(number=

74, street=

'rue pascal'

)fs2 = nltk.featstruct(city=

'paris'

)print

(fs1.unify(fs2)

)

當針對上面結構共享中,修改某個變數時,被引用的地方也會被修改。

廣義短語結構文法,通過允許詞彙類別支援subcat特徵。設subcat特徵表明該專案所屬的子類別。

因為可以無限的加深句子補語的遞迴,所以在整個句子中缺口可以無限遠的被填充。無限制依賴成分:填充詞-缺口依賴,即填充詞和缺口之間的距離沒有上界。

tokens =

'who do you claim that you like'

.split(

)cp = load_parser(

'grammars/book_grammars/feat1.fcfg'

)for tree in cp.parse(tokens)

:print

(tree)

基於Drupal的CMS構建

1.在 var www 下建立資料夾 sync a html html zhxue 2.修改配置檔案,新增 的資料庫資訊 vi sites default settings.php databases array default array default array database openci...

基於redis構建訊息佇列

一般來說,訊息佇列有兩種場景 一種是發布者訂閱者模式 一種是生產者消費者模式。利用redis這兩種場景的訊息佇列都能夠實現。定義 1 redis作為訊息中介軟體 1 producer consumermode 該方式是借助redis的list結構實現的。producer呼叫redis的lpush往特...

Vue CLI 基於webpack構建優化

參考vue cli 基於webpack構建優化,資源打包與資源預壓縮 yarn add filemanager webpack plugin dev d 宣告外掛程式 const filemanagerplugin require filemanager webpack plugin 外掛程式配置。...