Python文本數據分析與處理


Python文本數據分析與處理(新聞摘要)

分詞
  • 使用jieba分詞, 注意lcut只接受字符串
過濾停用詞
TF-IDF得到摘要信息或者使用LDA主題模型
  • TF-IDF有兩種
    • jieba.analyse.extract_tags(content, topK=20, withWeight=False) # content為string, topK選出20個關鍵字, withWeight: 每一個關鍵詞同等重要
    • 使用gensim庫
      • from gensim import corpora, models
      • dictinary = corpora.Dictionary(word_list) # 為每一個單詞分配一個id, 並記錄每一個單詞的詞頻到dfs屬性中
      • corpus = [dictionary.doc2bow(line) for line in word_list] # 得到詞庫, 形式是(token, id)
      • corpus.token2id以[token:id, ...]返回
      • # 將數據處理完之后, 才能使用models進行計算
      • lda = models.ldamodel.LdaModel(corpus=corpus, id2word=dictionary, num_topics=20) # corpus指定語料庫, id2word指定字典, id在corpus中, num_toptics指定訓練的主題數
      • lda.print_topic(1, 10) # 1為topic的id, 10為topic中關鍵字的個數
      • lda.print_topic(3, 10) # 3為返回的topic個數, 10為每一個topic中關鍵字的個數
      • 返回的形式是0.009*"文化" + 0.005*"戀情" + 0.004*"中" + 0.004*"撒" + 0.004*"節目"的列表, 數字為權重

機器學習貝葉斯(文本處理, 判斷一句評論是否是侮辱性的[學會了這個, 那么垃圾郵箱, 廣告的過濾也一樣了, 文本處理貝葉斯的world])

與其他的泰坦尼克號遇難預測等案例不同, 文本處理需要自己在預處理時構建出數據表. 沒有后者每一個提供表

不使用第三方庫實現的思路

  • 獲取文本數據

    • 格式: data0 = [['Hello', 'buddy'], ['You', 'silly']], labels = [1, 1]等
    • 二維list, 一個list表示合並在一起可以表示一句話
  • 過濾停用詞得到去掉停用詞的集合data

  • 對data進行去重(現在使用的算法不需要單詞出現的數量, 如果換作其他算法則不一定), 獲取data中所有的單詞words, words的形式為list

    • 實現思路:
      • data = set(data): 轉換為set達到去重的效果
      • data = list(data): 將data轉為list, 因為需要單詞的順序
  • data0的每一個list元素的單詞轉為0和1, 返回一組向量, 0表示沒有該單詞, 1表示有該單詞

  • def NBTrain函數使用貝葉斯進行訓練

    • 根據labels先判斷出bad言論數, 得出其概率
    • 縮小范圍, 鎖定到bad言論中, 計算出每一條bad言論的單詞總數與所有bad言論的總數的比值
    • 鎖定到not bad言論中, 計算出每一條not bad言論的單詞總數與所有not bad言論的總數的比值
    • 返回三個向量
  • 根據根據貝葉斯公式, 根據輸入的測試集向量, 通過貝葉斯公式與NBTrain出來的參數(該參數與貝葉斯公式非常相關)得出p0與p1, 比較大小進行分類借口

使用sklearn的native_bayes模塊實現

  • 獲得數據
  • 過濾掉停用詞
  • 將每一個樣本對應的單詞以' '.jion合並, 因為之后將單詞轉為向量的對象需要這樣的參數
  • 導入sklearn.features_extraction.text.CountVectorizier或者sklearn.features_extraction.text.TfidfVectorizier, 是兩種將字符串中的單詞轉為向量的算法, 后者效果更好, 所以以他為例
    • tfidf = TfidVectorizier() # 有一個ngram_range可選參數, (1, 4)表示得到的feature為1個, 2個依次增加到3個, 3就是最終每一個句子的向量的長度
    • tfidf_fit = tfidf.fit_transform(texts) # texts的形式['I am myself', 'Do not say it', ...]
    • tfidf_fit.get_feature_names()返回單詞list
    • tfidf_fit.toarray()返回轉換后的向量
  • 現在得到了我們需要用於建模的數據表了(前面就是特征提取的操作, 是機器學習中最難的部分, 目的就是為了得到可以用於建模的數據表)
  • 將數據分成訓練集和測試集
  • 導入native_bayes模塊中的MultinomialNB類對象
    • clf = MultinomialNB()
    • clf.fit(X_train.values.tolist(), y_train.values.tolist()) # bayes坑的地方, 傳入的必須是list, 內部不提供轉換
  • 評估
    • clf.score(X_test.values.tolist(), y_test.values.tolist())


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM