Notice
Recent Posts
Recent Comments
Link
«   2026/02   »
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
Tags
more
Archives
Today
Total
관리 메뉴

Silver bullet

품사별 토큰 추출 & 등장횟수 시각화, 정규 표현식 본문

AI/AI

품사별 토큰 추출 & 등장횟수 시각화, 정규 표현식

밀크쌀과자 2024. 7. 1. 21:05

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() # 전체 텍스트 데이터에서 언제나 같이 나타나는 두 단어를 출력