TF*IDFによる用語重要度 【和布蕪(日本語)による用語抽出を例に】

モジュールをimport

In [1]:
import termextract.mecab
import termextract.core

from pprint import pprint # このサンプルでの処理結果の整形表示のため

DF情報を蓄積

In [2]:
import dbm
input_files = ["mecab_out_sample.txt", "mecab_out_sample2.txt", "mecab_out_sample3.txt"]
df = dbm.open("df", "n")
for file in input_files:
    f = open(file, "r", encoding="utf-8")
    tagged_text = f.read()
    f.close
    frequency = termextract.mecab.cmp_noun_dict(tagged_text)
    termextract.core.store_df(frequency, dbm=df)
df.close
Out[2]:
<bound method _Database.close of <dbm.dumb._Database object at 0x000002535CF88550>>

処理対象のテキスト(事前にDFに読み込ませる必要あり)を呼び出し

In [3]:
f = open("mecab_out_sample.txt", "r", encoding="utf-8")
tagged_text = f.read()
f.close
frequency = termextract.mecab.cmp_noun_dict(tagged_text)
pprint(frequency)

FerequencyからTFを生成する

In [4]:
TF = termextract.core.frequency2tf(frequency)
pprint(TF)

蓄積したDF情報からIDFを呼び出し

取り出し対象の用語はFrequencyを使ったが、取り出す用語がキーのディクショナリもしくはセットでよい

In [5]:
df = dbm.open("df", "r")
IDF = termextract.core.get_idf(frequency, dbm=df)
df.close
pprint(IDF)

TFとIDFを組み合わせTF*IDFの重要度を出す

In [7]:
term_imp = termextract.core.term_importance(TF, IDF)
pprint(term_imp)

collectionsを使って重要度が高い順に表示

膠着言語の場合は、termextract.core.modify_agglutinative_lang()で整形をする

In [8]:
import collections
data_collection = collections.Counter(term_imp)
for cmp_noun, value in data_collection.most_common():
    print(termextract.core.modify_agglutinative_lang(cmp_noun), value, sep="\t")
In [ ]: