반응형

/*******************************************************************************************************************
-- Title : [Py3.5] Wordnet, Lemma and Similarity w/ NLTK
-- Reference : excelsior-cjh.tistory.com
-- Key word : nltk nlp 자연어 처리 자연어처리 wordnet similarity 원형 유사도 hypernyms hyponyms lemmas
                  wup_similarity 상의어 하의어 유사도 similarity
*******************************************************************************************************************/

-- 용어 정리

    * wordnet : 어휘의 의미 어휘 목록
    * sysnet : 유의어(동의어) 집합으로 분류하여 일반적 정의를 제공하고 어휘 목록 사이 다양한 관계 기록
    * lemma : 단어의 원형

-- Python Script

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
from nltk.corpus import wordnet
 
 
# -- wordnet 및 상의어/하의어
lists = ['cookbook''nlp''keyboard']     # 사전에 없는 단어면 에러 나더라~
 
for l in lists:
    syn = wordnet.synsets(l)[0]
 
    print(syn.name())                       # name() : 사전적 표기 이름 출력
    print(syn.definition())                 # definition() : 간략한 정의 출력
    print("[definition]""." * 10"\n")
 
    print(syn.hypernyms())                  # 상의어
    print(syn.hypernyms()[0].hyponyms())    # 하의어
    print(syn.root_hypernyms())
 
    print ("-"*50"\n")
 
print("=" * 100"\n")
 
 
# -- 단어 원형(Lemma)
syn = wordnet.synsets('cooked')[0]
print(syn.lemmas())                         # [Lemma('cook.v.01.cook')]
 
print("=" * 100"\n")
 
 
# -- 단어 유사도(Similarity)
cb = wordnet.synset('cookbook.n.01')
ib = wordnet.synset('instruction_book.n.01')
print(cb.wup_similarity(ib))                # 결과 : 0.9166666666666666
 
dog = wordnet.synsets('dog')[0]
print(dog.wup_similarity(cb))               # 결과 : 0.38095238095238093
 
print ("-"*50"\n")
 
w1 = wordnet.synset('ship.n.01')
w2 = wordnet.synset('boat.n.01')
print(w1.wup_similarity(w2))
 
print ("-"*50"\n")
cs


반응형

+ Recent posts