Play Shakespeare in Python


What Data?

  • Shakespeare's works in xml format
  • Comedy/Tragedy/History
  • Poems (ignored)
<speaker long="Hamlet">HAM.</speaker>
<line globalnumber="1331" number="267" form="prose">Why—</line>
<line globalnumber="1332" number="268" form="verse" offset="0">“One fair daughter, and no more,</line>
<line globalnumber="1333" number="268" form="verse" offset="2">The which he loved passing well.”</line>

What I have done

  • 用台词推测题材分类 (Genre)
  • 假设不知道 Genre 进行聚类
  • 可视化

台词推测 Genre

  • 从 sklearn.feature_extraction.text 这个包中可以将文本数据转化为矩阵, 即 Term Frequency Inverse Document Frequency (TFIDF)
  • naive_bayes.MultinomialNB 和 linear_model.SGDClassifier 是两个较适合处理文本数据的分类器
  • 尝试 stemming tokenizer 降维和 使用grid search 搜寻合适参数数值后, 分类器的准确率仍在60%以下


  • decomposition.TruncatedSVD 降维 也可用于 Latent Semantics Analysis (LSA 潜在语义学)
  • 用 KMeans 和 MiniBatchKMeans 尝试聚类效果都不显著

可视化 Term Document Matrix

可视化 word cloud

What to do

  • 根据台词分性别 (已有研究 paper)
  • nltk: sentiment analysis
  • 根据台词聚类人物性格?
  • 中文世界! 

Thank You!