やりたいこと
事前に指定したカテゴリーを下記のテキストデータから分類したいです。
テキストファイル
家で仕事中にパソコンのネットが切れました。 LANケーブルを確認したところ抜けていました。 電車で東京に向かっている時に人身事故に遭ってしまった。 yahooニュースは毎日を見ています。
実現結果
テキストファイルをMeCabで解析後
出力されたカテゴリーをスコアごとでカウント
スコアが高い方のカテゴリーを判定し、カテゴリーとして表示させたいです。
分類されたカテゴリー:インターネット、ナビゲーション
試したこと
現状は下記のコードでやってみましたが、カテゴリーを表示させることできないです。
一番高いスコアを表示させることできますが、
どのようにテキストで分類されたカテゴリーを表示させることできますか。
スコアを判断させる時にリスト化して判断するようにしました。
コードの原因と解決策を教えていただけると嬉しいです。
また別の方法がありましたら、教えていただければ幸いです。
こちらのサイト参考しながら、テキスト分類を行いました。
ディープラーニングで文章・テキスト分類を自動化する方法
コード
import MeCab #天気の関連語をまとめたgazetteer weather_set = set(['晴れ','天気','雨','曇り']) #ナビゲーションの関連語をまとめたgazetteer navi_set = set(['渋谷','東京','電車','地図']) #インターネットの関連語をまとめたgazetteer internet_set = set(['ネット','パソコン','LANケーブル','yahooサイト']) mecab = MeCab.Tagger("-Ochasen") #MeCabの取得 #textファイルの読み込み #****には保存したtxtファイルのパス名を入れてください f= open(r"C:\Users\bunseki.txt", 'r', encoding='shift-jis') text=f.read() f.close() def classify_category(text): tokens = mecab.parse(text) #分かち書きを行う #print(tokens) token = tokens.split("\n") #print(token) weather_score = 0 #天気である可能性のスコア #print(weather_score) navi_score = 0 #ナビゲーションである可能性のスコア #print(navi_score) internet_score=0 #以下、分かち書き後の単語を抽出 for ele in token: element = ele.split("\t") #print(element) if element[0] == "EOS": break # 単語の表層を取得 surface = element[0] print(surface) #天気の関連語に含んでいたら1プラス if surface in weather_set: weather_score += 1 print(weather_score) #ナビゲーションの関連語に含んでいたら1プラス if surface in navi_set: navi_score += 1 print(navi_score) #インターネットの関連語に含んでいたら1プラス if surface in internet_set: internet_score += 1 print(internet_score) #関連用語をリスト化 list = [weather_score,navi_score,internet_score] #用語降順並び替え new_list=sorted(list, reverse=True) print(new_list) #ヒット用語のスコア高いカテゴリーを出力 list_max = max(list) print(list_max) #if分岐で分類されたカテゴリーを出力 # if weather_score > navi_score: # print("天気") # else: # print("ナビゲーション") classify_category(text)
回答1件