티스토리 뷰
지난 포스팅에서 워드넷에 대해서 이런저런 이야기를 드렸습니다. 제게 워드넷은 익숙하고 여전히 재밌으며 친숙한 주제이지만, 아직 워드넷이 낯설게 느끼시는 분들도 있으실 것 같아서 워드넷을 어떻게 활용할 수 있을지, 어디에 써먹으면 재밌을지 조금더 이야기해 보도록 하겠습니다.
글에 간간이 나오는 짧은 명령어들은 파이썬 코드에 기반하고 있습니다. 파이썬을 모르시는 분들도 부담없이 보실 수 있도록 설명을 포함하도록 하겠습니다. 그리고 파이썬을 약간이라도 다루어보신 분들이라면 쉽게 이해하고 활용하실 수 있으시리라 생각합니다.
먼저 워드넷을 사용하시려면 pip 등을 이용해서 설치하시고 다음과 같이 선언하시면 됩니다.
from nltk.corpus import wordnet as wn
위 행은, 앞으로 워드넷이란 객체를 wn이라는 이름으로 사용하겠다는 뜻입니다. 그래서 이후에 오는 코드에서 wn.ABC 라는 내용을 보시면 워드넷 객체의 ABC라는 메소드를 써 보겠다라고 이해하시면 됩니다. 지금 당장에는 그게 뭔지 모르셔도 됩니다. 그냥 그런 기능이 있구나라는 정도만 파악하셔도 될 것 같습니다.
먼저 워드넷의 가장 기본적인 단계는 어떤 단어가 주어졌을 때, 그것의 유의어(synset)에는 어떤 것들이 알아보는 것입니다. 그것이 synsets 메소드입니다. 먼저 dog의 유의어들을 알아보겠습니다.
>>> wn.synsets('dog')
[Synset('dog.n.01'), Synset('frump.n.01'), Synset('dog.n.03'), Synset('cad.n.01'),
Synset('frank.n.02'), Synset('pawl.n.01'), Synset('andiron.n.01'), Synset('chase.v.01')]
8개의 유의어 목록이 나오네요. 하나씩 뜯어보면, 사람들이 dog라는 단어를 사용할 때, 맥락이나 상황에 따라 각각 다른 8개의 의미를 마음대로 사용하고 있음을 알 수 있습니다. 그리고 마지막 리스트를 보면, chase.v.01 가 있는데 dog가 ‘쫓다’라는 동사로 쓰이기도 함을 알 수 있습니다. 이 하나의 예만 보더라도, 어휘가 가지는 의미의 풍부성과 동시에, 언어 사용의 애매성을 단적으로 느낄 수 있네요.
여기서 각각의 synset에 대해서 보다 자세한 설명를 보고 싶으면 definition을 보시면 됩니다. 사용 예는 다음과 같습니다.
>>> print(wn.synset('dog.n.01').definition())
a member of the genus Canis (probably descended from the common wolf) that has been domesticated by man since prehistoric times; occurs in many breeds
더 나아가 사용 예시를 보려면 example 메소드를 활용하시면 됩니다.
>>> len(wn.synset('dog.n.01').examples())
1
>>> print(wn.synset('dog.n.01').examples()[0])
the dog barked all night
워드넷은 친절하게도 단어의 정의와 용례까지 제공해 주고 있습니다. 굳이 사전이 필요없을 정도인 것 같습니다. 한 가지 더, 알아두면 좋은 것은 각각의 synset 에는 lemma라는 것이 있는데, 굳이 말하자면 각 단어의 ‘기본형’들 이라고 보시면 됩니다. 제가 처음에는 이것이 잘 이해가 되지 않았는데 synset 자체가 하나의 고유한 기본형 아닌가라고 생각했었는데요, 워드넷에서는 synset과 의미상 동일한 기본형들을 세부적으로 제시하고 있습니다.
왜 lemma가 중요하냐면, 나중에 ‘반의어’, ‘유래어’, ‘관계어’ 등을 구하고 싶을 경우, 이 lemma를 활용해야하기 때문입니다. 일단 dog의 lemma가 무엇이 있는지 보겠습니다.
>>> wn.synset('dog.n.01').lemmas()
[Lemma('dog.n.01.dog'), Lemma('dog.n.01.domestic_dog'), Lemma('dog.n.01.Canis_familiaris')]
자, 여기까지의 내용을 정리해 보겠습니다. 워드넷을 사전처럼 사용하려면 가장 먼저 synset이라는 개념을 알아야 합니다. 일반적인 단어의 뜻을 알고 싶으면 wn.synsets(‘단어’)를 입력하고 나오는 결과값들 중에서 정확한 synset을 찾아서 그것의 definition과 examples를 조회해 보시면 됩니다.
여기까지는 일반적인 사전과 크게 다를 바 없어 보이는데요, 워드넷의 진짜 강력함은 이 다음에 나오는 ‘상위어’와 ‘하위어’ 조회에 있습니다.
- Total
- Today
- Yesterday
- 문장파싱
- 의미표현
- 하위어
- 워드넷
- 단어의의미
- 의미연산
- conceptnet
- 의미조작
- 코퍼스
- 단어벡터
- hypernyms
- 유튜브시대
- 해석공동체
- lemma
- hyponyms
- 인공지능
- 데이터베이스
- 뇌혁명
- 실용주의자
- 올바른해석
- 의미속성
- wordnet
- 소프트웨어오류
- word2vec
- 상위어
- synset
- 대화프로그램
- 실패준비
- 챗봇
- gensim
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |