質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Python 3.x

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

Q&A

解決済

1回答

2034閲覧

TF-IDF値が一定値以上の単語を印字させる

退会済みユーザー

退会済みユーザー

総合スコア0

Python 3.x

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

0グッド

0クリップ

投稿2017/07/10 07:26

編集2017/07/10 07:52

###前提・実現したいこと
指定したテキストファイルから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に慣れていないので見づらいコードで申し訳ありません

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

quickquip

2017/07/10 07:37

ソースコードの前後行に ``` を追加してソースが正しく見えるようにしてもらえないでしょうか。 https://teratail.com/help
guest

回答1

0

ベストアンサー

最後にTF-IDF値でフィルタをかけている部分

Python

1#一定値以上のTF-IDF値のみに絞り込む 2TF_IDF_sel = TF_IDF[np.where(level <= TF_IDF)] 3print(TF_IDF_sel)

にて、
TF_IDF[np.where(level <= TF_IDF)]としてそのままフィルタを書けるのではなく、zip(*np.where(level <= TF_IDF))のように記述することでポジション(x,y)データのリストを得ることができます。
ですので、これをつかってループを回すとよいのではないでしょうか。

こんな感じ

Python

1#一定値以上のTF-IDF値のみに絞り込む 2for idx, word in zip(*np.where(level <= TF_IDF)): 3 print("DOC:{}, WORD:{}, TF-IDF:{}".format(idx, dic[word], TF_IDF[(idx,word)]))

投稿2017/07/10 10:16

編集2017/07/10 10:33
magichan

総合スコア15898

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問