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

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

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

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

Q&A

1回答

2875閲覧

TF-IDF値が一定値以上のものをデータとして保持する

退会済みユーザー

退会済みユーザー

総合スコア0

Python 3.x

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

0グッド

1クリップ

投稿2017/07/17 06:11

###前提・実現したいこと
現在、指定したテキストファイルから一定値以上のTF-IDF値を持つ単語をkeywordとして抽出し、keywordとそのTF-IDF値をセットで入力データとして保持させるプログラムを作ろうとしています。
表示をさせることはできたのですが、どのようにすればデータを保持できるのかが分かりません。
表示をさせ、なおかつデータを保持したいです。
アドバイスをよろしくお願いします。

###該当のソースコード

# -*- coding: utf-8 -*- #keyword表示 #指定したテキストファイル(日本語は分かち書きされたもののみ)に対応 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('%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('index = %s\n' %idx) #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() #keywordを表示() for idx, word in zip(*np.where(level <= TF_IDF)): print('doc_num:%s, keyword:%s, TF-IDF:%s'%(idx, dic[word], TF_IDF[(idx, word)]))

###補足情報
pythonは触り始めたばかりなので、簡単な方法を教えていただけるとありがたいです。

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

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

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

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

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

magichan

2017/07/17 06:29

「データを保持したい」という説明があいまいな気がします。具体的にどのようなことをおこないたいのでしょうか?(CSV形式等で保存したいということでしょうか?)
退会済みユーザー

退会済みユーザー

2017/07/17 06:37

単語とTF-IDF値のデータセットを利用して、機械学習させたいと考えています。そのためのデータセットを作るプログラム作成したいです。
guest

回答1

0

正直に言って、質問の意図はよくわかりません。

しかし、このプログラムで抽出できるものは行ごとのTF-IDFであって、文書ごとのTF-IDFないですね。

すこし修正しました。しかし、修正したプログラムはあくまで、TF-IDFではなくて、1つの文書の 正規化TFを出すものですので注意してください。

また、動作検証時に面倒だったので、日本語をコード内で分かち書きするように書きかえました。

Python

1# -*- coding: utf-8 -*- 2#keyword表示 3 4import numpy as np 5from janome.tokenizer import Tokenizer 6from sklearn.feature_extraction.text import CountVectorizer 7from sklearn.feature_extraction.text import TfidfTransformer 8 9#CountVectorizer():文書ごとの単語の出現頻度を取得 10count = CountVectorizer() 11 12#文書を指定 13docs = input('select file(ex,○○.txt):') 14docs_name = docs 15f = open(docs, encoding = 'utf-8') 16docs = f.read() 17f.close() 18 19#絞り込みの基準を設定 20level = float(input('set level(0.0 < level < 1.0):')) 21 22#文書を表示 23print('%s = %s\n' %(docs_name, docs)) 24 25#N種類の文字列を0からN-1までの整数に置き換える 26t = Tokenizer() 27docs = [" ".join(t.tokenize(docs, wakati=True))] 28bag = count.fit_transform(docs) 29TF = bag.toarray() 30 31#ディクショナリを表示 32dic = count.get_feature_names() 33print('dictionary = %s\n' %dic) 34 35#各単語のインデックスを表示 36idx = count.vocabulary_ 37print('index = %s\n' %idx) 38 39#TfidfTransformer:(文書内の)TF-IDFを計算 40tfidf = TfidfTransformer(use_idf = True, norm = 'l2', smooth_idf = True) 41np.set_printoptions(precision = 2) 42TF_IDF = tfidf.fit_transform(bag).toarray() 43 44#keywordを表示() 45for idx, word in zip(*np.where(level <= TF_IDF)): 46 print('doc_num:%s, keyword:%s, TF-IDF:%s'%(idx, dic[word], TF_IDF[(idx, word)]))

投稿2017/07/20 17:10

編集2017/07/20 17:11
MasashiKimura

総合スコア1150

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問