Silver bullet
품사별 토큰 추출 & 등장횟수 시각화, 정규 표현식 본문
1. 영화 리뷰에 많이 등장하는 명사 추출하기
import nltk
from nltk.corpus import stopwords
from collections import Counter
# 1) Stopwords 준비하기
stop_words = stopwords.words("english")
stop_words.append(',')
stop_words.append('.')
stop_words.append('’')
stop_words.append('”')
stop_words.append('—')
# 2) Text data 준비하기
file = open('darkknight.txt', 'r', encoding="utf-8") # 읽기 형식('r')로 지정하고 인코딩은 'utf-8'로 설정한다
lines = file.readlines() # readlines 함수로 텍스트 파일의 내용을 읽어 리스트로 저장한다
# 3) Tokenizing
tokens = []
for line in lines: # for문을 통해 각 줄에 접근한다
tokenized = nltk.word_tokenize(line) # 각 줄을 tokenize한다 (word_ + Tab!)
for token in tokenized:
if token.lower() not in stop_words:
tokens.append(token)
tags = nltk.pos_tag(tokens)
tags[:10]
# 4) POS Tagging - 명사 종류만 모으기
tags = nltk.pos_tag(tokens) # tokenize한 결과를 품사 태깅한다
wordList = []
for word, tag in tags: # for 문을 통해 각각의 (단어, 태그) 쌍에 접근
if tag.startswith('N'):
#if tag in ['NN', 'NNS', 'NNP', 'NNPS']: # 만약 태그가 명사 종류이면:
wordList.append(word.lower()) # 소문자로 변환한 후 리스트에 첨부한다
counts = Counter(wordList) # 각 명사의 숫자를 센 결과를 변수에 저장한다 (Counter -> {'home': 15, '단어':출현횟수, ...})
print(counts)
print(counts.most_common(10)) # 가장 많이 등장한 10개 명사를 출력한다 (most common words)
1-2. 영화 리뷰에 많이 등장하는 형용사 추출하기
# 1) Stopwords 준비하기
# 생략
# 2) Text data 준비하기
# 생략
# 3) Tokenizing
# 생략
# 4) POS Tagging - 형용사 종류만 모으기
tags = nltk.pos_tag(tokens) # tokenize한 결과를 품사 태깅한다
wordList = []
for word, tag in tags: # for 문을 통해 각각의 (단어, 태그) 쌍에 접근
if tag.startswith('J'): # 만약 태그가 형용사 종류이면:
wordList.append(word.lower()) # 소문자로 변환한 후 리스트에 첨부한다
counts = Counter(wordList) # 각 형용사의 숫자를 센 결과를 변수에 저장한다 (Counter -> {'home': 15, '단어':출현횟수, ...})
# print(counts)
print(counts.most_common(10)) # 가장 많이 등장한 10개 형용사를 출력한다
2. 영화 리뷰에 등장하는 토큰 개수 확인하기
stop_words = stopwords.words("english")
stop_words.append(',')
stop_words.append('.')
stop_words.append('’')
stop_words.append('”')
stop_words.append('—')
stop_words.append('else')
stop_words.append('$')
file = open('darkknight.txt', 'r', encoding="utf-8") # 읽기 형식('r')로 지정하고 인코딩은 'utf-8'로 설정한다
lines = file.readlines() # readlines 함수로 텍스트 파일의 내용을 읽어 리스트로 저장한다
tokens = []
for line in lines: # for문을 통해 각 줄에 접근한다
tokenized = nltk.word_tokenize(line) # 각 줄을 tokenize한다
for token in tokenized:
if token.lower() not in stop_words:
tokens.append(token)
corpus = nltk.Text(tokens)
# print(corpus.tokens)
print(len(corpus.tokens)) # 전체 token의 개수를 출력한다
print(len(set(corpus.tokens))) # unique한 token의 개수를 출력한다
*정규 표현식
for line in lines: # for문을 통해 각 줄에 접근한다
tokenized = nltk.word_tokenize(line) # 각 줄을 tokenize한다
for token in tokenized: # 각 Token이
if token.lower() not in stop_words: # Stopwords 리스트에 포함되어 있지 않으며,
if re.match('^[a-zA-Z]+', token): # 특수 기호에 해당하지 않을 경우,
tokens.append(token) # Token list 에 추가해준다.
3. 문맥 상 유사한 단어 출력하기
file = open('darkknight.txt', 'r', encoding="utf-8") # 읽기 형식('r')로 지정하고 인코딩은 'utf-8'로 설정한다
lines = file.readlines() # readlines 함수로 텍스트 파일의 내용을 읽어 리스트로 저장한다
tokens = []
for line in lines: # for문을 통해 각 줄에 접근한다
tokenized = nltk.word_tokenize(line) # 각 줄을 tokenize한다
for token in tokenized: # 각 Token이
if token.lower() not in stop_words: # Stopwords 리스트에 포함되어 있지 않으며,
if re.match('^[a-zA-Z]+', token): # 특수 기호에 해당하지 않을 경우,
tokens.append(token) # Token list 에 추가해준다.
corpus = nltk.Text(tokens)
print('Similar words : ')
corpus.similar('batman') # 유사한 단어들 (similar words)
4. 텍스트의 연어(collocation) 출력하기
print('Collocation')
corpus.collocations() # 전체 텍스트 데이터에서 언제나 같이 나타나는 두 단어를 출력'AI > AI' 카테고리의 다른 글
| 한글 텍스트 데이터 전처리 (0) | 2024.07.02 |
|---|---|
| TF-IDF & Cosine similarity 이론 (0) | 2024.07.02 |
| Tokenizing, POS tagging, Stopwords, Lemmatization (0) | 2024.07.01 |
| 정형 데이터 전처리 & 시각화 (0) | 2024.07.01 |
| 정형 데이터 분석 & 데이터 시각화 (0) | 2024.07.01 |