BSA07_Pyspark-NLP.ipynb
패키지 호출 및 스파크 세션 시작
from pyspark.sql import SparkSession
from pyspark.ml.feature import Tokenizer, RegexTokenizer # RegexTokenizer : 데이터를 쪼개는 작업을 위한 것
from pyspark.ml.feature import StopWordsRemover
from pyspark.ml.feature import NGram
from pyspark.ml.feature import HashingTF, IDF, Tokenizer
from pyspark.ml.feature import CountVectorizer
spark = SparkSession.builder.appName("nlp").getOrCreate()
데이터 불러오기
# inferSchema=True : 데이터의 속성을 보고 읽어들이도록
df = spark.read.csv("NLP.txt",header=False,inferSchema=True,sep="\t")
# 20개의 행을 보여줌
df.show()
데이터 전처리
# withColumnRenamed : 데이터프레임의 컬럼명 변경
df = df.withColumnRenamed("_c0","label").withColumnRenamed("_c1","text")
# 텍스트를 단어로 쪼개는 작업을 선언함 (아직 작업을 수행하지는 않음)
# 별개의 데이터프레임으로 구성됨
tokenizer = Tokenizer(inputCol="text",outputCol="words") # 'text'를 input으로, 'words'를 output으로
regexTokenizer = RegexTokenizer(inputCol="text",outputCol="words",pattern="\\W")
# tokenizer에 실제로 데이터를 적용함
tokenized = tokenizer.transform(df)
# truncate=False : 결과값을 끝까지 다 보고 싶을 때
tokenized.select("words").show(3,truncate=False) # tokenized에서 'words'의 첫 3개 행의 결과값을 다 보여줌
regexTokenized = regexTokenizer.transform(df)
regexTokenized.select("words").show(3,truncate=False)
불용어 제거
text_df = regexTokenized
# text_df.show(truncate=False)
# 'words'에 있는 데이터에서 불용어를 제거하고 'cleaned'에 저장하는 작업을 선언함
remover = StopWordsRemover(inputCol="words",outputCol="cleaned")
# 위에서 선언한 'remover' 작업을 실행함
text_df = remover.transform(text_df)
n-gram
# 'words'에서 인접한 2개의 단어를 묶은 것을 'bigrams'에 저장하는 작업을 선언함
bigram = NGram(n=2, inputCol="words",outputCol="bigrams")
# 선언한 작업 'bigram'을 실행하고 'bigram_df'에 저장함
bigram_df = bigram.transform(text_df)
bigram_df.select("bigrams").show(3,truncate=False)
BOW(Bag of Words)
tokenizer = RegexTokenizer(inputCol="text",outputCol="words",pattern="\\W")
words_df = tokenizer.transform(df)
words_df.show()
# 1. HashingVectorizer ⟶ TfidfTransformer ⟶ 설명변수로 모형 적용
# numFeatures=20 : 20개의 벡터(차원)으로 표현
hashingTF = HashingTF(inputCol="words",outputCol="hashfeature",numFeatures=20)
hashed_df = hashingTF.transform(words_df)
hashed_df.show()
idf = IDF(inputCol="hashfeature",outputCol="features")
idf_model = idf.fit(hashed_df)
rescale = idf_model.transform(hashed_df)
rescale.select("label","features").show()
# label : 반응변수, features : 설명변수로 보고 모델에 적용함
# 2. CountVectorizer ⟶ TfidfTransformer ⟶ 설명변수로 모형 적용
cv = CountVectorizer(inputCol="words",outputCol="features",vocabSize=5, minDF=2.0)
model = cv.fit(words_df)
res = model.transform(words_df)
res.show()
'Statistics > BSA' 카테고리의 다른 글
230515 / BSA11. NLP (Natural Language Processing) (0) | 2023.05.20 |
---|---|
230508 / BSA10. pyspark에서 스팸 메일 분류 (0) | 2023.05.14 |
230508 / BSA10. python에서 스팸 메일 분류 (0) | 2023.05.14 |
230503 / BSA10. 형태소 분석, 워드 클라우드 (0) | 2023.05.09 |
230501 / BSA09. pyspark에서 탐색적 데이터 분석 (EDA) (0) | 2023.05.03 |