ソーシャルプラットフォーム世論分析プロジェクトの総括と感想(SELENIUM,NLTK,ベイズ分類器)(一)

2962 ワード

この間、新浪微博、テンセント微博などのソーシャルプラットフォームの上の話題の評論採集と分析のプロジェクトを行い、具体的な技術はseleniumとpythonのnltkライブラリを使った.
まずデータ収集であり、ここではこれらのプラットフォームのオープンAPIを使用するのではなく、selenium技術を使用した.なぜなら、オープンAPIには収集頻度の制限があり、一部のプラットフォームのAPIが不十分であるため、selenium収集ではウェブページ上のコアデータがajax非同期ロードを通過する問題を解決することができるからである.
次にデータの前処理であり,新浪微博を例に,表情や返信で参照された他の返信を下段コードで除去することができる.
def contentFilter(content):
    face=re.compile('\[[^]]+\]') #  
    at=re.compile('//@.*') #    
    huifu=re.compile('  .*:') #   
    content=face.sub('',content)
    content=at.sub('',content)
    content=huifu.sub('',content)
    if len(content)<7: #  7       
        return None
    return content

そして、残りのコメントをベイズネットワークでフィルタリングし、最も観点的な価値のあるコメント(ヒント:意味連語)を見つけることができます.このベイズ分類器は、ごみのコメントや広告をフィルタリングするためにも使われています(一般的には「ボタン番号」や「当店」などの言葉が付いています).ベイズ分類器は、各コメントに確率推定を与え、大きいものから小さいものに並べ替え、その中で価値のあるコメントに分類された最初のいくつかの項目を人工的に表示します(正方形:マイクロブログの反対側をサポートする:マイクロブログに反対します).
私の実践の過程で句読点も非常に重要な参考であることを発見し、一般的に疑問符付きの評論は往々にして反対側の観点を持っている.
例えば、この微博:作家の王安憶:アメリカ政府が異国で戦死した兵士の遺骨のために一歩も譲らないのを見るたびに、不思議な感動が心の底から湧き上がった.私たち自身の生命がわさびや数字のように見えるたびに、言葉の形のない悲しみが心の底に届く.私たちの数千年の歴史の中で、あなたは人の概念、人の権利、人の尊厳について少しも検出できません.私たちの生死を気にする人はいません.私たち自身も含まれています.
私はNLTKのFreqDist関数で統計して、評論の中で12の疑問符を発見しましたが、これらの疑問符付きの評論は例外なく微博の観点に反対しています.例えば:
               !            ?     ,    ,  !
                ?           ,        
          ?              ,            ?
   !             。                 ,          ,              ,             ?       。          ,     ?
               !            ?     ,    ,  !
                ?           ,        
          ?              ,            ?

ネット上で最もよく使われる手段は反問文であることがわかる.の
疑問符がこのように重要であるため、前処理では句読点の正規化を一歩増やし、中国語と英語の異なる句読点を1つのフォーマットに統一しなければならない.また、私は疑問符をテキストから独立させ、疑問符を持つものは観点価値のある確率に奨励係数を乗じ、その計算方式:log(評論総数÷疑問符付き評論数)であると考えています.疑問符付きのものはその観点が反対側の観点であると考える確率にも係数を乗じて、計算方式:log(評論総数÷疑問符付き評論数)×手動寸法データの疑問符付きの反対側の観点は、すべての手動寸法の反対側の観点のパーセントを占めます.過剰なフィッティングを防止するために、この2つの奨励係数はいずれも3を超えてはならない.
ここではNLTKというライブラリで役立つ関数を補足しましょう.
英文語幹抽出:nltk.PorterDtemmer
htmlタグの除去:nltk.clean_urlとclean_html、この2つの関数の内部はbeautifulsoupを呼び出しました
ベイズ分類器:nltk.NaiveBayesClassifier
#nltk             
#           ,       dict,  key     ,value    
def getFeature(sample):
    return {'d1':5,'d2':False}

#          ,               
#       list        
train_set=[(getFeature(sample),class) for sample in samples]

#  train       :
classifier=nltk.NaiveBayesClassifier.train(train_set)

#      nltk.classify.accuracy           
print nltk.classify.accuracy(classifier,test_set)

#      classify           :
classifier.classify(getFeature(Instance))

#      show_most_informative_features            :
classifier.show_most_informative_features(5)#   5 

ここまでに、サンプルセットとして50件のコメントが表示されています.
次の記事では、特徴抽出と小規模寸法処理の大規模なデータのいくつかの方法について詳しく説明します.