質問編集履歴

1 ソースコードを見やすいように変更しました。

退会済みユーザー

退会済みユーザー

2017/07/10 16:52  投稿

TF-IDF値が一定値以上の単語を印字させる
###前提・実現したいこと
指定したテキストファイルからTF-IDF値が一定値以上の単語を印字したい
###発生している問題・エラーメッセージ
TF-IDF値が一定値以上を超えた単語のTF-IDF値自体を印字させることはできたが、
条件を満たした単語を印字させるにはどのようなすれば良いのかが分かりません。
可能であれば単語のインデックスとTF-IDF値を一つの構造体としてまとめたいのですが、
とりあえずは単語の表示をさせたいと思っています。
```
エラーメッセージ
```
```
###該当のソースコード
# -*- coding: utf-8 -*-
#TF-IDF計算(一定値以上に絞り込み可能)
#指定したテキストファイル(日本語は分かち書きされたもののみ)に対応
import numpy as np
from sklearn.feature_extraction.text import CountVectorizer
from sklearn.feature_extraction.text import TfidfTransformer
#CountVectorizer():文書ごとの単語の出現頻度を取得
count = CountVectorizer()
#文書を指定
docs = input('select file(ex,○○.txt):')
docs_name = docs
f = open(docs, encoding = 'utf-8')
docs = f.readlines()
f.close()
#絞り込みの基準を設定
level = float(input('set level(0.0 < level < 1.0):'))
#文書を表示
print('\n%s = %s\n' %(docs_name, docs))
#N種類の文字列を0からN-1までの整数に置き換える
bag = count.fit_transform(docs)
TF = bag.toarray()
#ディクショナリを表示
dic = count.get_feature_names()
print('dictionary = %s\n' %dic)
#各単語のインデックスを表示
idx = count.vocabulary_
print('%s内の各単語のインデックス\n%s\n' %(docs_name, idx))
#各文書内の各単語の出現回数(TF)を表示(0番の回数→1番の回数→…)
print('%s内のTF =\n%s\n' %(docs_name, TF))
#TfidfTransformer:(文書内の)TF-IDFを計算
tfidf = TfidfTransformer(use_idf = True, norm = 'l2', smooth_idf = True)
np.set_printoptions(precision = 2)
TF_IDF = tfidf.fit_transform(bag).toarray()
#一定値以上のTF-IDF値のみに絞り込む
TF_IDF_sel = TF_IDF[np.where(level <= TF_IDF)]
#一定値以上のTF-IDF値の単語のみに絞り込む
#TF-IDFを表示
print('%s内のTF-IDF(%s以上) =\n%s' %(docs_name, level, TF_IDF_sel))
```  
###試したこと
課題に対してアプローチしたことを記載してください
###補足情報(言語/FW/ツール等のバージョンなど)
より詳細な情報
Pythonに慣れていないので見づらいコードで申し訳ありません
  • Python 3.x

    10255 questions

    Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

思考するエンジニアのためのQ&Aサイト「teratail」について詳しく知る