【Python&NLP】關於WordNet,我的一些用法和思路(一)

WordNet是由Princeton 大學的心理學家,語言學家和計算機工程師聯合設計的一種基於認知語言學的英語詞典。

它不是光把單詞以字母順序排列,而且按照單詞的意義組成一個「單詞的網路」。WordNet是一個覆蓋範圍寬廣的英語辭彙語義網。名詞,動詞,形容詞和副詞各自被組織成一個同義詞的網路,每個同義詞集合都代表一個基本的語義概念,並且這些集合之間也由各種關係連接。

WordNet的描述對象包含compound(複合詞)、phrasal verb(短語動詞)、collocation(搭配詞)、idiomatic phrase(成語)、word(單詞),其中word是最基本的單位。

Wordnet的辭彙結構包括九大類:上下位關係(動詞、名詞)、蘊含關係(動詞)、相似關係(名詞)、成員部分關係(名詞)、物質部分關係(名詞)、部件部分關係(名詞)、致使關係(動詞)、相關動詞關係(動詞)、屬性關係(形容詞)。

WordNet的一些基本操作,大家可以參考這個介面文件——WordNet Interface,我就不在這裡贅述了,在這裡介紹一些其他的東西。

【入門篇:WordNet都包含哪些文件?】

作為一個新手,入門之前我最想弄懂的就是WordNet中都有那些文件,以及要怎麼用。所以我們從這些文件開始介紹。

壹、語料庫里的文件

要想使用WordNet,最重要的是WordNet的python文件和它的文檔內容,了解python文件,可以讓我們知道如何使用WordNet,而查看文檔中的內容,則可以讓我們能夠更加好的理解WordNet。

WordNet的語料庫,在nltk_data文件夾下的corpora文件夾中,corprora文件夾是下載的,下載方式是使用兩行代碼。

import nltknltk.download()

圖1.下載corpora

corpora文件夾中的各個語料庫都有它們自己的用處,我個人建議需要的時候再進行下載,不需要的時候不下載。WordNet需要用到的文件夾有三個,omw、wordnet和wordnet_ic。

其中主要討論omw和wordnet文件夾。

一.omw

omw中的文件是各個國家和地區的研究人員基於英文wordnet所做的本國語言的wordnet,目前一共有大概27中語言加入了nltk包,與中文有關的是cmn(簡體中文)和qcn(繁體中文),順便一提,日文的為jpn。

圖2.各國的WordNet文件夾

文件夾中有三個文件,分別是citation.bibLICENSEwn-data-語言名.tab。詞條保存在wn-data-語言名.tab文件中。打開後發現,簡體中文下的詞條一共有79808條,繁體為8069條,日文比較多,足足有152299條。

但是這些詞條對應的詞義並沒有這麼多,很多行都是相同的詞義,文件中的結構是這樣的:

圖3.wn-data-語言名.tab文件的內部格式

文件的內容清晰地分為三列,第一列為詞義的八位十進位序號(offset)和詞性(n:名詞、v:動詞、a:形容詞、r:動詞);第二列內容為「語言名:lemma」,目前我還沒有發現修改之後有什麼不能用的地方,可見這一列不是什麼有用的信息;第三列是對應語言的詞義。

從圖3上的內容可以發現,編號為00001740-a的詞義,有三個解釋,即:「可以+的」,「有能力+的」和「能」。

我設法將這些內容去除,統計一下一共有多少WordNet的詞義在中文簡體、繁體和日文中得到了解釋。

圖4.三種語言的詞義數對比

我在這裡用wps取了三個文件中的第一列放進表格,去除重複項後,簡體所剩42312條,繁體剩4913條,日文仍然剩下最多,但是也只有57184條。說明日文收錄了非常多的同義詞。

但是值得注意的是,WordNet中原本有多少詞義。我統計了一下,名詞:82115條,動詞:13767條,形容詞:18156條,副詞:3621條,共計:117659條。這樣一來,簡體中文WordNet只收錄了三分之一的詞義,日文則也僅收錄了二分之一,繁體最慘烈,只收錄了百分之四。

可以說,遠遠不夠。

二.wordnet

如果說omw文件夾中的各個對應語言算是wordnet的各種「漢化包」、「日語包」似得東西,那麼wordnet文件夾中的內容則是wordnet的本體。wordnet文件夾中一共有18個文件,比較重要的文件有15個。其中四個是data文件,存放四種詞性的詞的根本內容;四個是index文件,即索引文件;四個是exc文件,對辭彙的變形進行對應;還有一個是lexnames文件,存放所有詞的45個意向集(即這117659條詞義,可以被歸為這45個類)。

圖5、wordnet文件夾中的文件

1.data.pos文件

我們先來瞧瞧data文件,以data.adj中able詞條為例。

圖6、data.adj文件中的able詞條。

在討論之前,我們要明白一個道理。首先,這是一個數據文件,所以我們要找到它的主鍵。很顯然,單詞並不可能是其主鍵。那麼主鍵是什麼呢?不妨回憶一下之前omw中的tab文件內容。即主鍵可以定義為"xxxxxxxx(八位數字)-pos(詞性)"。那麼在這個able詞條中,「00001740」即為這八位數字,其後的00,則是lexnames文件中的詞意向集序號。

圖7.lexnames文件中的內容

再之後的「a」,表示的是詞性,這是一個形容詞(本文件下的所有詞條都是形容詞,所以也都是「a」)。「a」之後的01表示的是synset中詞語的個數。(舉另外的例子:【00002527 00 a 02 adaxial 0 ventral】中,本synset中有兩個詞語,分別為「adaxial」和「ventral」,以一位十六進位數分割,表示一個詞語的編號)

「005」表示指針個數,而指針的類型由符號表示。符號列表如下:

圖8.指針符號列表

指針由四部分構成:第一部分是符號,如上圖;第二部分是八位offset,第三位是詞性,第四位是四位二進位數,表示語義關係。

最後的內容是解釋和例句,第一個分號前是示意,其後的所有內容,都是例句。

圖9.data.pos文件格式總結

下面是用代碼驗證:

圖10.用代碼檢查

2.index.pos文件

索引文件在這裡不多介紹,直接上圖。

圖11.index.pos文件格式總結

3.pos.exc文件

pos.exc文件中涉及詞形的對應問題,方便找到一個詞的本體。

文件內分兩列,按字母順序排列。

圖12.pos.exc文件內容

4.lexnames文件

lexnames文件內有45個此意向集,其中名詞26個,動詞15個,形容詞3個,副詞1個。

圖13.lexnames文件內容

總結:本文主要簡單總結了一下python的nltk庫中有關WordNet的文件並基本解釋了其內容。當然還有很多內容沒有說到,希望有研究興趣和需要的人一起討論,如果有錯誤,也歡迎大家指正。


推薦閱讀:

TAG:自然语言处理 | NLTK | Python |