[Python] NLTK and WordNet
這篇記錄一下 WordNet 的使用。
WordNet® is a large lexical database of English. Nouns, verbs, adjectives and adverbs are grouped into sets of cognitive synonyms (synsets), each expressing a distinct concept.
今天要來玩的是 NLTK 所提供的 WordNet。這時候又要請出 官方文件 了。
使用之前,當然要先 import,這個語料庫放在 nltk.corpus
裡:
|
|
Words
當要查詢一個字的時候,直接使用 synsets()
這個函式就可以了,比如說我要查 ‘dog’ 這個字:
|
|
同時這個函式也有一個參數可以讓你指定這個字的詞性,比如我要查 ‘dog’ 當動詞的時候和哪些字意思相近,可以這樣寫:
|
|
結果會給你一堆 synset,意思就是這個字都分別屬於這些 synset 裡的字,就是這個字同時在這些 synset 裡:
以這個例子來說,’dog’ 當動詞的時候,和 ‘chase’ 屬於同一個 synset,代表他們意思相近,由此可知 ‘dog’ 在當動詞的時候有追的意思。(長知識欸XD
而 ‘dog’ 這個字在 Synset('dog.n.01')
也同時在 Synset('dog.n.03')
裡。那這兩個 synset 有什麼不同呢?為什麼有兩個 synset 都叫作 ‘dog’?其實是因為兩組 synset 的意思不一樣。怎麼知道不一樣,又是哪裡不一樣呢?繼續看下去吧。
想要知道某個 synset 到底是什麼意思,可以這樣寫:
|
|
那就來看一下 Synset('dog.n.01')
跟 Synset('dog.n.03')
分別是什麼意思吧:
很明顯地,兩個是完全不同的意思。除此之外,還可以用 examples()
看例句呢:
那要怎麼看這個Synset裡到底有哪些字呢?用 lemmas()
:
|
|
lemmas()
可以看到完整的 ‘dog.n.01.domestic_dog’,而如果只要抓字詞,就要用 lemma.name()
來抓了,結果如下:
除了同義詞,WordNet 也可以讓你查反義詞,不過這只定義在 lemma 中:
|
|
所以可以看到,直接用 synset 去 call 反義詞 antonyms()
是行不通的:
Synsets
講了這麼多,到底什麼事 Synset 呢?
Synset: a set of synonyms that share a common meaning.
Synset 就是 synonym set,簡單來說就是一組同義詞,也叫做同義詞組,這也是 WordNet 這個語意導向的強大字典的根基。
….to be continued