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

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

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

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

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

解決済

1回答

3040閲覧

DataFrameの特定列テキストを元の形状を保持したままTf-Idf値を求めたい

hidemomo

総合スコア31

Python 3.x

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

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

0クリップ

投稿2020/01/12 08:16

編集2020/01/12 09:32

データフレームの特定列にテキストがあり、元の形状を保持したままtf-idf値を求めたいのですが、
1.元の形状が保持できない
2.エラーが出る
ValueError: Iterable over raw text documents expected, string object received.

DataFrame

word

0 スーパードライASAHI BREWERIES LIMITED春限定スペシャルパッケージ
1 TaKaRa CAN CHU-HI直搾り限定出荷世界のフレーツ便カリブ海
2 焼き肉のたれこだわり食感のせて!巻いて!玉ねぎとガーリックの旨味とコクエバラ中辛
3 特選減塩さしみたまりおいしさそのまま減塩仕立て美味しさ保つ空気に触れない密封ボトル200ml
4 なべのこ秋津産鰹節使用タマノイTAMANOI NABENOKOすしのこ倶楽部寄せ鍋用◎1袋6人用
(df.shape(5000,)

コード

python

1from sklearn.feature_extraction.text import TfidfVectorizer 2import numpy as np 3import pandas as pd 4import MeCab 5import codecs 6 7df = pd.read_csv('../input_text.csv',encoding='cp932') 8 9mecab = MeCab.Tagger() 10mecab.parse('') 11 12def tokenize(text): 13 14 node = mecab.parse(text).splitlines() 15 16 stop_words = [ 17 '%','%','g','g','*','?','?','.','.','ー','*****','/','/','ml','(','(',')',')', 18 '-','一'] 19 20 parts = ['名詞','形容詞','動詞','副詞'] 21 22 tokens = [] 23 24 for i in node: 25 if i == 'EOS' or i == '': continue 26 word_tmp = i.split()[0] 27 part = i.split()[1].split(',')[0] #品詞 28 if not (part in parts) or (word_tmp in stop_words): continue 29 tokens.append(word_tmp) 30 31 return tokens 32 33tfidf_lst=[] 34 35for text in df['word']: 36 train_vectorize = TfidfVectorizer(tokenizer = tokenize) 37 tfidf = train_vectorize.fit_transform(text) 38 tfidf_lst.append(tfidf) 39 40※上記エラーが出ます。 41※下記テキストの形状にすると機能します。 42 43texts = ['スーパードライASAHI BREWERIES LIMITED春限定スペシャルパッケージ', 44 'TaKaRa CAN CHU-HI直搾り限定出荷世界のフレーツ便カリブ海', 45 '焼き肉のたれこだわり食感のせて!巻いて!玉ねぎとガーリックの旨味'] 46 47train_vectorize = TfidfVectorizer(tokenizer = tokenize) 48tfidf = train_vectorize.fit_transform(texts) 49tfidf.toarray() 50 51#out:tfidf値一覧 shape(3,28)

元の形状(5000,0)を保持したまま、あるいは後ほど元形状に戻す方法でも良いので行ごとにtfidf値を抽出する方法をご教示ください。
よろしくお願いします。

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

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

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

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

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

guest

回答1

0

自己解決

自己解決しました。
一旦、ターゲット列のdf['word]をリストにしてからtfidfを算出すると可能のようです。

text = []

for wrd in df['word']:
text.append(wrd)

train_vectorize = TfidfVectorizer(tokenizer = tokenize)
tfidf = train_vectorize.fit_transform(text)
tfidf.toarray()

tfidf.shape #(5000,13852)

投稿2020/01/12 09:47

hidemomo

総合スコア31

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問