データフレームの特定列にテキストがあり、元の形状を保持したまま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値を抽出する方法をご教示ください。
よろしくお願いします。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。