반응형
/*******************************************************************************************************************
-- 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 |
반응형