-- ๋ณธ ํฌ์คํ ์ ํ์ดํ ์น๋ก ๋ฐฐ์ฐ๋ ์์ฐ์ด ์ฒ๋ฆฌ (ํ๋น๋ฏธ๋์ด) ์ฑ ๊ณผ ์ํค๋ ์ค๋ฅผ ์ฐธ๊ณ ํด์ ์์ฑ๋ ๊ธ์ ๋๋ค.
1. NLP์ ๋ถ๋ฅ ๋ฌธ์
- ๋ฌธ์๋ฅผ ๋ถ๋ฅํ๋ ์์ ์ด NLP ๋ถ์ผ์ ์ด๊ธฐ ์์ฉ๋ถ์ผ ์ค ํ๋์ด๋ค.
- TF-IDF๋ฅผ ํ์ฉํ๋ฉด ๋ฌธ์๋ ๋ฌธ์ฅ๊ฐ์ ๊ธด ํ ์คํธ๋ฅผ ๋ถ๋ฅํ๋๋ฐ ์ ์ฉํ๋ค.
- Topic ๋ ์ด๋ธ ํ ๋น, ๋ฆฌ๋ทฐ์ ๊ฐ์ฑ ์์ธก, ์คํธ ๋ฉ์ผ ํํฐ๋ง, ์ธ์ด ์๋ณ, ์ด๋ฉ์ผ ๋ถ๋ฅ ์์ ์ ์ง๋ํ์ต ๊ธฐ๋ฐ์ ๋ฌธ์ ๋ถ๋ฅ ๋ฌธ์ ์
2. ๋จ์ด ๋ถ๋ฅํ๊ธฐ
โถ ํ์ฌํ๊น (POS-tagging)
- ํ์ฌํ๊น ์ ํํ์๋ฅผ ๋ถ์ํ๊ธฐ ์ํ ๋ฐฉ๋ฒ ์ค ํ๋
- ํํ์์ ํ์ฌ๋ฅผ ๋ถ์ด๋ ์์
- ํ์ฌ์ ๊ตฌ๋ถ์ ์ฌ๋๋ง๋ค, ์ธ์ด๋ง๋ค, ํ์๋ง์, ์๊ณ ๋ฆฌ์ฆ๋ง๋ค ๋ค๋ฅผ ์ ์๋ค.
1. spaCy๋ฅผ ํ์ฉํ ํ์ฌํ๊น
import spacy
nlp = spacy.load('en')
doc = nlp(u"Mary slapped the green witch.")
for token in doc:
print('{} -> {}'.format(token, token.pos_))
2. nltk๋ฅผ ํ์ฉํ ํ์ฌํ๊น
nltk.download('tagsets')
import nltk
nltk.download('averaged_perceptron_tagger')
word = ['Mary', 'slapped', 'the', 'green', 'witch']
from nltk.tag import pos_tag
pos_tag(word)
์ฐธ๊ณ ๋ฌธํ) https://ysyblog.tistory.com/88
3. ๋ถ๋ถ๊ตฌ๋ฌธ๋ถ์(์ฒญํฌ๋๋๊ธฐ, chunking)๊ณผ ๊ฐ์ฒด๋ช ์ธ์
3.1 ๋ถ๋ถ๊ตฌ๋ฌธ๋ถ์(shallow parsing) = ์ฒญํฌ๋๋๊ธฐ (chunking)
- ๋ช ์ฌ, ๋์ฌ, ํ์ฉ์ฌ์ ๊ฐ์ ๋ฌธ๋ฒ ์์๋ก ๊ตฌ์ฑ๋ ๊ณ ์ฐจ์์ ๋จ์๋ฅผ ์ ๋ํด ๋ด๋ ๊ฒ
- ์ฌ์ ํ๋ จ๋ ํ์ฌํ๊น ๋ชจ๋ธ์ด ์กด์ฌํจ
1. spaCy์ ํ์ฉํ chunking
import spacy
nlp = spacy.load('en')
doc = nlp(u"Mary slapped the green witch.")
for chunk in doc.noun_chunks:
print('{} -> {}'.format(chunk, chunk.label_))
์ด๋ ๊ฒ ๋ช ์ฌ๊ตฌ๊ฐ ์ถ์ถ๋๋ค.
2. ์ ๊ท์์ ํ์ฉํ chunking
๋ถ๋ถ๊ตฌ๋ฌธ๋ถ์(chunking)๋ชจ๋ธ ํ๋ จ์ ์ฌ์ฉ๋ ๋ฐ์ดํฐ๊ฐ ์๋ค๋ฉด, ์ ๊ท์์ ํ์ฉํ์ฌ ๋ถ๋ถ๊ตฌ๋ฌธ๋ถ์์ ์งํํ ์ ์๋ค. nltk์์ RegexpParser๋ฅผ ์ฌ์ฉํ ์ ์๋ค๊ณ ํ๋ค.
์ฐธ๊ณ ๋ฌธํ) https://jynee.github.io/NLP%EA%B8%B0%EC%B4%88_3/
3.2 ๊ฐ์ฒด๋ช ์ธ์ (Named Entity Recognition)
- ์ฌ๋, ์ฅ์, ํ์ฌ, ์ฝ ์ด๋ฆ ๋ฑ๊ณผ ๊ฐ์ ์ค์ ์ธ์์ ๊ฐ๋ ์ ์๋ฏธํ๋ ๋ฌธ์์ด
- ๊ฐ์ฒด๋ช ์ธ์์ ์ํด์๋ ์ ์ฒ๋ฆฌ ๊ณผ์ ์ด ํ์ (๋ณดํต์ pos tagging ๋ ํํ๋ก ์ ๋ ฅ์ ์๊ตฌํ๋ค)
โถ nltk๋ฅผ ํ์ฉํ ๊ฐ์ฒด๋ช
์ธ์
(nltk๋ NER chunker๋ฅผ ์ง์ํ๊ธฐ ๋๋ฌธ์ ๋ณ๋์ ๊ฐ์ฒด๋ช
์ธ์๊ธฐ๋ฅผ ๊ตฌํํ ํ์๊ฐ ์๋ค.)
(์๋ ์ฝ๋๋, ํ์ฌํ๊น
์ ์งํํ๊ณ ๊ฐ์ฒด๋ช
์ธ์์ ์ํํ ์ฝ๋์ด๋ค.)
from nltk import word_tokenize, pos_tag, ne_chunk
sentence = "James is working at Disney in London"
sentence=pos_tag(word_tokenize(sentence))
print(sentence) # ํ ํฐํ์ ํ์ฌ ํ๊น
์ ๋์ ์ํ
nltk.download('maxent_ne_chunker')
nltk.download('words')
sentence=ne_chunk(sentence)
print(sentence) # ๊ฐ์ฒด๋ช
์ธ์
James๋ PERSON(์ฌ๋) / Disney๋ ORGANIZATION(๊ธฐ๊ด) / London์ GPE(์์น) ์ผ๋ก ์ ์์ ์ผ๋ก ๊ฐ์ฒด๋ช
์ด ์ธ์๋ ๊ฒ์ ํ์ธํ ์ ์๋ค.
์ฐธ๊ณ ๋ฌธํ) https://wikidocs.net/30682