728x90
# 데이터 프레임의 head 확인
CONTENT_CODE LAST_MODIFIED_DATE ... CONTENT_SECURITY_LEV DEPARTMENT_NM
0 C0000000............ 1.9......+13 ... .. OE개발기획팀
1 C0000000............ 1.9......+13 ... .. OE개발기획팀
2 C0000000............ 1.9......+13 ... .. OE개발기획팀
3 C0000000............ 2.0......+13 ... .. OE개발기획팀
4 C0000000............ 2.0......+13 ... .. R&D양산개발팀
[5 rows x 7 columns]
혹시모를 정보 유출 방지를 위해 수치적인 것 들은 일부 가리겠땨.
# 단어들의 어근 원형을 추출하기 위해 함수 생성
💡 NLTK의 Lemmatize 함수를 사용
# 전체 코드
import pandas as pd
from sklearn.feature_extraction.text import TfidfVectorizer
from nltk.stem import WordNetLemmatizer
import nltk
import string
csv_file_path = '../sql_result.csv'
try:
df = pd.read_csv(csv_file_path, encoding='utf-8')
except UnicodeDecodeError:
print('utf-8으로 디코딩하는 중 오류 발생. 다른 인코딩 시도 필요.')
remove_punct_dict = dict((ord(punct), None) for punct in string.punctuation)
lemmar = WordNetLemmatizer()
def LemTokens(tokens):
return [lemmar.lemmatize(token) for token in tokens]
def LemNormalize(text):
return LemTokens(nltk.word_tokenize(text.lower().translate(remove_punct_dict)))
tfidf_vext = TfidfVectorizer(tokenizer=LemNormalize,stop_words='english', ngram_range=(1,2))
ftr_vector = tfidf_vext.fit_transform(df['CONTENT_TITLE'])
# 코드 설명
remove_punct_dict = dict((ord(punct), None) for punct in string.punctuation)
# string.punctuation : 모든 구두점문자(쉼표, 마침표, 물음표, 느낌표, 따옴표 등)를 담고있는 문자열
# ord : 입력받은 문자열의 아스키 코드(유사:유니코드)를 반환.
lemmar = WordNetLemmatizer()
# NLTK(Natural language Toolkit) 라이브러리에서 제공하는 표제어 추출기 중 하나. : 영어 텍스트에서 단어의 기본형을 추출하는데 사용.
def LemTokens_eng(tokens):
return [lemmar.lemmatize(token) for token in tokens]
# 앞서 생성한 WordNetLemmatizer를 사용하여 입력된 토큰 리스트에 대해 표제어 추출(lemmatization)을 수행한다.
def LemNormalize_eng(text):
return LemTokens_eng(nltk.word_tokenize(text.lower().translate(remove_punct_dict)))
# 입력받은 텍스트를 소문자로 변환 -> 구두점 제거 -> 단어 토큰화 -> 표제어 추출을 수행.
tfidf_vect_eng = TfidfVectorizer(tokenizer=LemNormalize_eng,stop_words='english', ngram_range=(1,2))
# TfidfVectorizer를 초기화한 후 앞서 정의한 LemNormalize 함수를 사용하여 텍스트 전처리를 수행한다.
# stop_words를 영어로 하여 불용어를 사용하도록 설정한다.
# ngram_range : 단어의 단일 및 이중(n-gram) 토큰을 모두 포함하도록 벡터화 한다.
ftr_vector_eng = tfidf_vect_eng.fit_transform(df['CONTENT_TITLE'])
# 원하는 컬럼을 가져와 fir_transform() 메소드를 통해 TF-IDF 모델을 학습하고 변환하며 그에 해당하는 행렬을 생성한다.
728x90
'😒 저 저 저 개념없는 나 > ⛓️ DL & ML' 카테고리의 다른 글
[문서 제목 자동 분류 작업 | Clustering] 4. 한국어 Text Clustering TF-IDF K-means | 인턴 (1) | 2024.01.15 |
---|---|
[문서 제목 자동 분류 작업 | Clustering] 3. K-Means 알고리즘 학습 적용 군집화 | 인턴 (0) | 2024.01.15 |
[문서 제목 자동 분류 작업 | Clustering] 1. CSV 파일 읽어오기 | 인턴 (0) | 2024.01.15 |
[Clustering | Classification] K-NN VS K-Means | 인턴 (0) | 2024.01.15 |
[Clustering] K-means 알고리즘 | 인턴 (0) | 2024.01.12 |