korean:mecab:python_mk_tfidf
差分
このページの2つのバージョン間の差分を表示します。
両方とも前のリビジョン前のリビジョン次のリビジョン | 前のリビジョン | ||
korean:mecab:python_mk_tfidf [2021/11/07 23:03] – [はじめに] yoshi | korean:mecab:python_mk_tfidf [2021/11/12 19:38] (現在) – [TF-IDFの計算と上位10語の表示] yoshi | ||
---|---|---|---|
行 1: | 行 1: | ||
- | ====== HanDicの出力結果をPythonで利用する:tf-idfの計算 ====== | + | ====== HanDicの出力結果をPythonで利用する:TF-IDFの計算 ====== |
===== はじめに ===== | ===== はじめに ===== | ||
- | [[https:// | + | [[https:// |
上記資料の原刊本のうち,巻6,9,13,19,23,24の本文のみ解析して修正した巻次ごとのテキストファイルが,スクリプトと同じディレクトリ下の'' | 上記資料の原刊本のうち,巻6,9,13,19,23,24の本文のみ解析して修正した巻次ごとのテキストファイルが,スクリプトと同じディレクトリ下の'' | ||
行 28: | 行 28: | ||
</ | </ | ||
- | 中期朝鮮語に固有の文字は,表示されていないかと思います. | + | 中期朝鮮語に固有の文字は,表示されていないかと思います.表層形(各行の冒頭)にアルファベット転写を用いていますが,この表記については[[https:// |
- | (以下継続) | + | ===== やること ===== |
+ | 上述の『釈譜詳節』のそれぞれの巻次について,名詞類(普通名詞,固有名詞,語根)のTF-IDFを計算します.その上で,各巻次のTF-IDF上位10語を列挙します.基本的には[[korean: | ||
+ | |||
+ | ===== 準備 ===== | ||
+ | |||
+ | 今回はMeCabを呼び出したりしないので,必要最低限のモジュールだけ呼び出します. | ||
+ | |||
+ | <code python> | ||
+ | import glob, os | ||
+ | from sklearn.feature_extraction.text import TfidfVectorizer | ||
+ | import pandas as pd | ||
+ | </ | ||
+ | |||
+ | ===== 読み込んだファイルの処理 ===== | ||
+ | |||
+ | 読み込んだファイルについて処理する関数を定義します.出力結果は各行「表層形[タブ文字]コンマ区切りの素性」という形式なので,まず'' | ||
+ | |||
+ | 素性のうち「世宗タグ」がNNG(普通名詞),NNP(固有名詞),XR(語根)に該当するものを抽出し,スペース区切りの配列にします. | ||
+ | |||
+ | <code python> | ||
+ | def extract(file): | ||
+ | words = [] | ||
+ | with open(file, mode=' | ||
+ | for line in fi: | ||
+ | mecab_features = [] | ||
+ | line = line.rstrip(' | ||
+ | if line == ' | ||
+ | continue | ||
+ | mecab_features = line.split(' | ||
+ | if mecab_features[9] in [' | ||
+ | words.append(mecab_features[5]) | ||
+ | text_result = ' ' | ||
+ | return text_result | ||
+ | </ | ||
+ | |||
+ | こちらも[[korean: | ||
+ | |||
+ | ===== ファイルの読み込みとその処理 ===== | ||
+ | |||
+ | ディレクトリ'' | ||
+ | |||
+ | <code python> | ||
+ | # sekbo_texts フォルダ内のテキスト読み込み | ||
+ | all_files = glob.glob(" | ||
+ | docs = [] | ||
+ | titles = [] | ||
+ | for i in all_files: | ||
+ | text = extract(i) | ||
+ | titles.append(os.path.split(i)[1]) | ||
+ | docs.append(text) | ||
+ | </ | ||
+ | |||
+ | それぞれのファイル名を取り出して,別途配列に入れます. | ||
+ | |||
+ | ===== TF-IDFの計算と上位10語の表示 ===== | ||
+ | |||
+ | ここから後は,[[korean: | ||
+ | |||
+ | <wrap info> | ||
+ | |||
+ | <code python> | ||
+ | # モデルを作成 | ||
+ | vectorizer = TfidfVectorizer(smooth_idf=False, | ||
+ | values = vectorizer.fit_transform(docs).toarray() | ||
+ | feature_names = vectorizer.get_feature_names_out() | ||
+ | df = pd.DataFrame(values, | ||
+ | </ | ||
+ | |||
+ | 今回はファイル数が少ないので,全てのファイルについてTF-IDFで上位の10語を表示するようにしました. | ||
+ | |||
+ | <code python> | ||
+ | for num in range(len(df)): | ||
+ | temp_df = [] | ||
+ | temp_df = df[num: | ||
+ | temp_df = temp_df.sort_values(by=titles[num], | ||
+ | print(temp_df.head(10)) | ||
+ | </ | ||
+ | |||
+ | 結果は以下の通り(< | ||
+ | |||
+ | <code text> | ||
+ | | ||
+ | 須達 | ||
+ | 舍利弗 | ||
+ | 精舍 | ||
+ | 부텨 | ||
+ | 耶輸 | ||
+ | 太子 | ||
+ | 六師 | ||
+ | 사 | ||
+ | 目連 | ||
+ | 舍衛國 | ||
+ | | ||
+ | 有情 | ||
+ | 藥師瑠璃光如來 | ||
+ | 橫死 | ||
+ | 大願 | ||
+ | 일훔 | ||
+ | 來世 | ||
+ | 菩提 | ||
+ | 惡趣 | ||
+ | 病 | ||
+ | 文殊師利 | ||
+ | | ||
+ | 부텨 | ||
+ | 舍利弗 | ||
+ | 佛道 | ||
+ | 菩薩 | ||
+ | 諸佛 | ||
+ | 法 | ||
+ | 사 | ||
+ | 衆生 | ||
+ | 일훔 | ||
+ | 佛乘 | ||
+ | | ||
+ | 소리 | ||
+ | 사 | ||
+ | 香 | ||
+ | 부텨 | ||
+ | 經 | ||
+ | 菩薩 | ||
+ | 隨喜 | ||
+ | 法華經 | ||
+ | 得大勢 | ||
+ | 得 | ||
+ | | ||
+ | 부텨 | ||
+ | 舍利 | ||
+ | 棺 | ||
+ | 供養 | ||
+ | 拘尸城 | ||
+ | 金棺 | ||
+ | 大衆 | ||
+ | 如來 | ||
+ | 사 | ||
+ | 一切 | ||
+ | | ||
+ | 王 | ||
+ | 尊者 | ||
+ | 阿育王 | ||
+ | 부텨 | ||
+ | 사 | ||
+ | 夫人 | ||
+ | 善容 | ||
+ | 놈 | ||
+ | 太子 | ||
+ | 塔 | ||
+ | </ | ||
+ | |||
+ | 須達と舎利仏のストーリーが中心的な巻6,『薬師瑠璃光如来本願功徳経』の翻訳である巻9,『法華経』の翻訳である巻13,19,釈迦入滅後,舎利の扱いを論じる巻23,阿育王の話が出てくる巻24と,それぞれの特徴が示されています. | ||
+ | |||
+ | ===== 終わりに ===== | ||
+ | |||
+ | 取得したデータをMeCabで処理しながら,その結果を利用するということが多いかと思いますが,既に出力結果がある場合,また出力結果を修正した正解ファイルがある場合も,簡単に処理することができます.形態素解析の結果には誤りも含まれることがあるため,正解ファイルを利用する,ということもニーズがあると思われます. | ||
+ | |||
+ | {{indexmenu_n> |
korean/mecab/python_mk_tfidf.1636293787.txt.gz · 最終更新: 2021/11/07 23:03 by yoshi