์ผ | ์ | ํ | ์ | ๋ชฉ | ๊ธ | ํ |
---|---|---|---|---|---|---|
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 |
- ๋ฐ์ดํฐ๋ถ์์ ๋ฌธ๊ฐ
- ADP
- ์ฃผ์ฑ๋ถ๋ถ์
- DBSCAN
- Lambda
- ADsP
- Python
- ์๋ํด๋ผ์ฐ๋
- ๋น ๋ฐ์ดํฐ
- pandas
- numpy
- t-test
- datascience
- ๋ ๋ฆฝํ๋ณธ
- ๋ฐ์ดํฐ๋ถ๊ท ํ
- dataframe
- LDA
- PCA
- ๊ตฐ์งํ
- ํฌ๋กค๋ง
- ๋ฐ์ดํฐ๋ถ์์ค์ ๋ฌธ๊ฐ
- ๋ฐ์ดํฐ๋ถ์
- ๋์ํ๋ณธ
- ์ค๋ฒ์ํ๋ง
- ๋น ๋ฐ์ดํฐ๋ถ์๊ธฐ์ฌ
- ํ ์คํธ๋ถ์
- opencv
- iloc
- ํ์ด์ฌ
- ์ธ๋์ํ๋ง
Data Science LAB
[Python] ๊ฐ์ฑ๋ถ์ - ๋น์ง๋ ํ์ต ๋ณธ๋ฌธ
[Python] ๊ฐ์ฑ๋ถ์ - ๋น์ง๋ ํ์ต
ใ ใ ใ ใ 2022. 2. 20. 12:45์ด์ ํฌ์คํ (์ง๋ํ์ต)์ ์ด์ด์ ๋น์ง๋ ํ์ต์ ๊ฐ์ฑ ๋ถ์๊น์ง ๊ณต๋ถํด ๋ณด๋ ค๊ณ ํ๋ค!
https://suhye.tistory.com/entry/mn?category=1040378
๋น์ง๋ํ์ต ๊ธฐ๋ฐ ๊ฐ์ฑ ๋ถ์์ ์ฌ์ (Lexicon)์ ๊ธฐ๋ฐ์ผ๋ก ํ์ตํ๋ค.
๋๋ถ๋ถ์ ๊ฐ์ฑ ๋ถ์ ๋ฐ์ดํฐ์ ์ ๋ ์ด๋ธ์ ๊ฐ๊ณ ์์ง ์๊ธฐ ๋๋ฌธ์ Lexicon์ด ์ ์ฉํ๊ฒ ์ฌ์ฉ๋๋ค.
Lexicon์ ๊ธ์ ๊ฐ์ฑ ๋๋ ๋ถ์ ๊ฐ์ฑ์ ์ ๋๋ฅผ ์๋ฏธํ๋ ์์น๋ฅผ ๊ฐ์ง๊ณ ์์ผ๋ฉฐ ์ด๋ฅผ "๊ฐ์ฑ ์ง์" ๋ผ๊ณ ํ๋ค.
์ฃผ๋ก ๋จ์ด์ ์์น, ๋จ์ด, ๋ฌธ๋งฅ ๋ฑ์ ์ฐธ๊ณ ํ์ฌ ๊ฐ์ฑ ์ง์๋ฅผ ๊ฒฐ์ ํ๋ค.
NLP ํจํค์ง์ WordNet์ ์์ด ์ดํ ์ฌ์ ์ด๋ผ๊ณ ์๊ฐํ๋ฉด ์ฝ๋ค. ๋จ์ํ ์ธ์ด์ ๋ป์ ์ค๋ช ํ๋ ๊ฒ์ด ์๋๋ผ Sementic์ ์ ๊ณตํด์ฃผ๋ ์ดํ ์ฌ์ ์ด๋ค.
๋จ์ด๋ ๋ฌธ์ฅ์์ ๋ฌธ๋งฅ์ ํ๋ฆ์ ๋ฐ๋ผ ๋ค๋ฅด๊ฒ ํด์๋๊ธฐ ๋๋ฌธ์ ํ๋ฆ์ ๋ง์ถฐ์ ํด์ํ๋ ๊ฒ์ด ์ค์ํ๋ค.
๋ฐ๋ผ์ WordNet์์๋ ๋ค์ํ ์ํฉ์์ ๊ฐ์ ๋จ์ด๋ผ๋ ๋ค๋ฅด๊ฒ ์ฌ์ฉ๋๋ ๋จ์ด์ ์๋งจํฑ ์ ๋ณด๋ฅผ ์ ๊ณตํ๋ฉฐ, ์ด๋ฅผ ์ํด ๋จ์ด์ ํ์ฌ๋ก ๊ตฌ์ฑ๋ ๊ฐ๋ณ ๋จ์ด๋ฅผ Synset์ด๋ผ๋ ๊ฐ๋ ์ ์ด์ฉํ์ฌ ํํํ๋ค.
Synset์ Set of cognitive synonyms์ ์ค์๋ง์ผ๋ก ๋จ์ํ ํ๋์ ๋จ์ด๊ฐ ์๋ ๊ทธ ๋จ์ด๊ฐ ๊ฐ์ง๋ ๋ฌธ๋งฅ, ์๋งจํฑ ์ ๋ณด๋ฅผ ์ ๊ณตํ๋ WordNet์ ํต์ฌ ๊ฐ๋ ์ด๋ค.
๋ํ์ ์ธ ๊ฐ์ฑ ์ฌ์
1. SentiWordNet : NLTK์ WordNet๊ณผ ์ ์ฌํ๊ฒ ๋จ์ด ์ ์ฉ์ WordNet์ ๊ตฌํํ ๊ฒ์ด๋ค. WordNet์ Synset๋ณ๋ก ๊ฐ์ฑ ์ ์๋ฅผ ํ ๋นํ๋๋ฐ, ๊ธ์ , ๋ถ์ , ๊ฐ๊ด์ฑ ์ง์๋ฅผ ํ ๋นํ๋ค. ๊ฐ๊ด์ ์ธ ๊ฐ์ฑ ์ ์๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ๋ฌธ์ฅ ๋ณ ๋จ์ด์ ์ง์๋๋ฅผ ํฉ์ฐํ์ฌ ์ต์ข ๊ฐ์ฑ ์ง์๋ฅผ ๊ณ์ฐํ ํ, ์ด์ ๊ธฐ๋ฐํ์ฌ ๊ฐ์ฑ์ด ๊ธ์ ์ธ์ง ๋ถ์ ์ธ์ง๋ฅผ ๊ฒฐ์ ํ๋ค.
2. VADER : ์ฃผ๋ก ์์ ๋ฏธ๋์ด์ ํ ์คํธ์ ๋ํ ๊ฐ์ฑ ๋ถ์์ ์ ๊ณตํ๊ธฐ ์ํ ํจํค์ง๋ก, ๋น๊ต์ ๋น ๋ฅด๊ฒ ๋ฐ์ด๋ ๊ฐ์ฑ ๋ถ์ ๊ฒฐ๊ณผ๋ฅผ ์ ๊ณตํ๋ค.
3. Pattern : ์ฑ๋ฅ ์ธก๋ฉด์์ ๊ฐ์ฅ ์ฃผ๋ชฉ ๋ฐ๋ ํจํค์ง์ด์ง๋ง ํ์ด์ฌ ๋ฒ์ 3์์๋ ํธํ์ด ๋์ง ์๋๋ค(ใ )
SentiWordNet์ ์ด์ฉํ ๊ฐ์ฑ ๋ถ์
1. ํ์ํ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ๋ก๋ฉ
import nltk
nltk.download('all')
nltk์ ๋ชจ๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ๋ค์ด๋ฐ์ ์ค๋ค!
(์ข ์ค๋๊ฑธ๋ฆผ)
2. 'present' ๋จ์ด์ ๋ํ Synset ์ถ์ถ
from nltk.corpus import wordnet as wn
term = 'present'
#present ๋จ์ด๋ก wordnet์ synsets ์์ฑ
synsets = wn.synsets(term)
print("synsets() type : ",type(synsets))
print("synsets() ๋ฐํ ๊ฐ ๊ฐ์ : ",len(synsets))
print("synsets() ๋ฐํ ๊ฐ : ",synsets)
ํ๋ผ๋ฏธํฐ๋ก ์ง์ ๋ ๋จ์ด์ ๋ํด WordNet์ ๋ฑ์ฌ๋์ด์๋ ๋ชจ๋ Synset ๊ฐ์ฒด๋ฅผ ๋ฐํํ๋ค.
present์ synset์ ๋ฐํํ ๊ฒฐ๊ณผ, ์๋ก ๋ค๋ฅธ semantic์ ๊ฐ์ง๋ synset ๊ฐ์ฒด๊ฐ ๋ฐํ๋์๋ค.
'present.n.01'์์ present๋ ์๋ฏธ, n์ ๋ช ์ฌ ํ์ฌ, 01์ present๊ฐ ๋ช ์ฌ๋ก์ ๊ฐ์ง๋ ์๋ฏธ๊ฐ ์ฌ๋ฌ๊ฐ์ง ์๊ธฐ ๋๋ฌธ์ ์ด๋ฅผ ๊ตฌ๋ถํ๋ ์ธ๋ฑ์ค๋ฅผ ์๋ฏธํ๋ค.
Synset๊ฐ์ฒด๊ฐ ๊ฐ์ง๋ ์ฌ๋ฌ ์์ฑ
for synset in synsets:
print("-----Synset name : ",synset.name(),'-----')
print("POS : ",synset.lexname())
print("Definition : ",synset.definition())
print("Lemmas : ",synset.lemma_names())
present๋ ๊ฐ์ ๋ช ์ฌ์ง๋ง ์ฌ๋ฌ๊ฐ์ง ๋ป์ ๊ฐ์ง๊ณ ์๋ค.
'present.n.01'์ ์๊ฐ์ ์ธ ์๋ฏธ๋ก ํ์ฌ๋ฅผ ์๋ฏธํ๋ค.
'present.n.02'๋ ์ ๋ฌผ์ ์๋ฏธํ๋ค.
์ด์ฒ๋ผ synset์ ํ๋์ ๋จ์ด๊ฐ ๊ฐ์ง๋ ์ฌ๋ฌ ์๋งจํฑ ์ ๋ณด๋ฅผ ๊ฐ๋ณ ํด๋์ค๋ก ๋ํ๋ด์ด ์ค๋ค.
์ธ์ด๊ฐ์ ๊ด๊ณ ์ ์ฌ๋
#synset ๊ฐ์ฒด๋ฅผ ๋จ์ด๋ณ๋ก ์์ฑ
tree = wn.synset('tree.n.01')
lion = wn.synset('lion.n.01')
tiger = wn.synset('tiger.n.02')
cat = wn.synset('cat.n.01')
dog = wn.synset('dog.n.01')
entities = [tree,lion,tiger,cat,dog]
similarities = []
entity_names = [entity.name().split('.')[0] for entity in entities]
#๋จ์ด๋ณ synset๋ฐ๋ณตํ๋ฉด์ ๋ค๋ฅธ ๋จ์ด์ synset๊ณผ์ ์ ์ฌ๋ ์ธก์
for entity in entities:
similarity = [round(entity.path_similarity(compared_entity),2) for compared_entity in entities]
similarities.append(similarity)
#๊ฐ๋ณ ๋จ์ด๋ณ synset๊ณผ ๋ค๋ฅธ ๋จ์ด synset๊ณผ์ ์ ์ฌ๋๋ฅผ DataFrameํํ๋ก ์ ์ฅ
similarity_df = pd.DataFrame(similarities,columns=entity_names,index = entity_names)
similarity_df
WordNet์์๋ ์ดํ ๊ฐ์ ๊ด๊ณ๋ฅผ ์ ์ฌ๋๋ก ๋ํ๋ผ ์ ์๋ค.
Synset๊ฐ์ฒด๋ ๋จ์ด ๊ฐ์ ์ ์ฌ๋๋ฅผ ๋ํ๋ด๊ธฐ ์ํด์ path_similarity()๋ฅผ ๋ฉ์๋๋ก ์ ๊ณตํ๋ค.
'tree', 'lion', 'tiger', 'cat', 'dog'์ ์ํธ ์ ์ฌ๋ ๊ฒฐ๊ณผ ๊ฐ ๊ฐ์ฒด๋ณ ์ ์ฌ๋ ์ ๋๊ฐ ์์น๋ก ํํ๋์๋ค.
Senti_Synset
WordNet์ Synset๊ณผ ์ ์ฌํ SentiWordNet์ Senti_Synset ํด๋์ค๋ ํด๋์ค๋ฅผ ๋ฆฌ์คํธ ํํ๋ก ๋ฐํํด์ค๋ค.
import nltk
from nltk.corpus import sentiwordnet as swn
senti_synsets = list(swn.senti_synsets('slow'))
print('senti_synsets() ๋ฐํ type :',type(senti_synsets))
print('senti_synsets() ๋ฐํ ๊ฐ ๊ฐ์ :',len(senti_synsets))
print('senti_synsets() ๋ฐํ ๊ฐ :',senti_synsets)
๋จ์ด์ ๊ฐ์ฑ ์ง์์ ๊ฐ๊ด์ฑ ์ง์
father = swn.senti_synset('father.n.01')
print('father ๊ธ์ ๊ฐ์ฑ ์ง์ : ',father.pos_score())
print('father ๋ถ์ ๊ฐ์ฑ ์ง์ : ',father.neg_score())
print('father ๊ฐ๊ด์ฑ ์ง์ : ',father.obj_score())
print("\n---------------------")
fabulous = swn.senti_synset('fabulous.a.01')
print('fabulous ๊ธ์ ๊ฐ์ฑ ์ง์ : ',fabulous.pos_score())
print('fabulous ๋ถ์ ๊ฐ์ฑ ์ง์ : ',fabulous.neg_score())
print('fabulous ๊ฐ๊ด์ฑ ์ง์ : ',fabulous.obj_score())
father ๋จ์ด์ ๊ฐ๊ด์ฑ ์ง์๋ 1, ๊ฐ์ฑ ์ง์๋ 0์ผ๋ก ๋ํ๋ฌ์ผ๋ฉฐ,
'fabulous' ๋จ์ด์ ๊ธ์ ์ง์๋ 0.875, ๋ถ์ ์ง์๋ 0.125, ๊ฐ๊ด์ฑ ์ง์๋ 0์ผ๋ก ํ์ธ๋์๋ค.
'๐ Machine Learning > ํ ์คํธ ๋ถ์' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Python] ํ ํฝ ๋ชจ๋ธ๋ง (20 ๋ด์ค๊ทธ๋ฃน) (0) | 2022.02.22 |
---|---|
[Python] SentiWordNet, VADER์ ์ด์ฉํ ์ํ ๊ฐ์ํ ๊ฐ์ฑ ๋ถ์ (0) | 2022.02.21 |
[Python] ๊ฐ์ฑ ๋ถ์(Sentiment Analysis) - ์ง๋ํ์ต (0) | 2022.02.19 |
[Python] ๋ด์ค ๊ทธ๋ฃน ๋ถ๋ฅ (0) | 2022.02.19 |
[Python]Bag of Words(BOW) (0) | 2022.02.18 |