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