Kaggle의 데이터에서 bag of words를 만들어 보았습니다 (2/3)

처음에



이 기사는 Kaggle의 데이터 "Bag of Words Meets Bags of Popcorn"의 데이터로 bag of words를 만들고 Random Forest에서 예측할 때까지를 설명하는 초보자를 위한 기사입니다.
영어 기사에서 좋은 것을 찾았으므로, 영어가 서투른 분에게 일본 번역+초보자용으로 보충한 것이 되고 있습니다.
또한 투고 자체가 처음이므로 조언을 주시면 감사하겠습니다.
Kaggle의 데이터에서 bag of words를 만들어 보았습니다 (1/3)
Kaggle의 데이터에서 bag of words를 만들어 보았습니다 (3/3)

환경


  • Python 3.6.0::Anaconda custom (x86_64)

  • - Mac OS X 10.12.5



    이 장에서 할 일



    bag of words 만들기



    마지막으로 정리한 텍스트 데이터를 단어 단위로 설정합니다.
    words = lower_case.split()               
    print(words)
    

    이런 느낌입니다.


    스톱워드 삭제



    스톱워드란?



    어쨌든, 너무 많이 사용되는 단어 때문에 텍스트 데이터를 다룰 때 잘 제거되는 단어입니다.
    「a」 「the」 「an」이라든지가 이미지하기 쉽다고 생각합니다.
    이 스톱워드등입니다만, 스스로 설정할 수도 있습니다만, 이번은 패키지를 사용합니다.

    패키지 설치



    이제 사용할 수 있습니다.
    import nltk
    nltk.download()  
    from nltk.corpus import stopwords
    

    파일은 다운로드 할 수 있었지만 stopwords 파일이 없다고 말한 사람
    import nltk
    nltk.download('stopwords')
    

    시도에 stopwords를 살펴 보겠습니다.
    stopwords.words("english")
    



    그러면 문장에서 정지 단어를 제거합니다.
    words = [w for w in words if not w in stopwords.words("english")]
    print (words)
    



    이전 작업을 함수로 만듭니다.
    def review_to_words( raw_review ):
        # 1. HTMLのタグ消し
        review_text = BeautifulSoup(raw_review).get_text() 
        #
        # 2. 文字以外(?,!等)の除去       
        letters_only = re.sub("[^a-zA-Z]", " ", review_text) 
        #
        # 3. 全ての文字を小文字に変更
        words = letters_only.lower().split()                             
        #
        # 4. ストップワードのリスト作成
        stops = set(stopwords.words("english"))                  
        # 
        # 5. ストップワードの除去
        meaningful_words = [w for w in words if not w in stops]   
        #
        # 6. 文にして結果を返す
        return( " ".join( meaningful_words ))   
    

    이제 확인합니다.
    clean_review = review_to_words( train["review"][0] )
    print(clean_review)  
    



    그런 다음 리뷰의 데이터 수를 확인합니다.
    여기에 25000개의 리뷰가 있음을 확인할 수 있습니다.
    num_reviews = train["review"].size
    num_reviews
    

    이제 모든 리뷰를 청소합니다.
    clean_train_reviews = [] #初期化
    for i in range( 0, num_reviews ):
        clean_train_reviews.append( review_to_words( train["review"][i] ) )
    

    이런 느낌이 되고 있습니다.


    그런 다음 scikit-learn을 사용하여 단어 가방을 만듭니다.
    print ("Creating the bag of words...\n")
    from sklearn.feature_extraction.text import CountVectorizer
    # 初期化
    vectorizer = CountVectorizer(analyzer = "word",   \
                                 tokenizer = None,    \
                                 preprocessor = None, \
                                 stop_words = None,   \
                                 max_features = 5000)  #ここで特徴量の数を5000に設定
    

    그런 다음 피쳐 벡터를 만듭니다. (clean_train_reviews는 위에서 처리한 리뷰 데이터)
    train_data_features = vectorizer.fit_transform(clean_train_reviews)
    #ここで、250000X5000のデータセットが準備できたことが確認できます。
    print (train_data_features.shape)
    

    이제 어떤 단어가 특징량으로 선택되었는지 확인할 수 있습니다.
    vocab = vectorizer.get_feature_names()
    print (vocab)
    



    마지막으로 csv로 저장합니다.
    df = pd.DataFrame(train_data_features) 
    df.columns = vocab
    df.to_csv("train_bag_of_words.csv")
    

    참고문헌



    Part 1: For Beginners - Bag of Words

    좋은 웹페이지 즐겨찾기