質問編集履歴

3

訂正

2021/02/20 08:24

投稿

fukubaka
fukubaka

スコア11

test CHANGED
File without changes
test CHANGED
@@ -1,6 +1,6 @@
1
1
  ### 実行したいこと
2
2
 
3
- TF-IDFを算出したいのですが、出力データが大きすぎるのか、以下のエラーが出ていました。このエラーを解消する方法ございましたら是非ご教授よろしくお願いいたします。
3
+ TF-IDFを算出したいのですが、出力データが大きすぎるのか、以下のエラーが出ていました。膨大な量の文章でのTF-IDFの算出ですが、値が変動する可能性を考慮して、データを分割するとは望ましくないと考えております。このエラーを解消する方法ございましたら是非ご教授よろしくお願いいたします。
4
4
 
5
5
 
6
6
 

2

訂正

2021/02/20 08:24

投稿

fukubaka
fukubaka

スコア11

test CHANGED
@@ -1 +1 @@
1
- TF-IDF 単語も一緒に出力させたい。
1
+ TF-IDF データの容量?エラーの対処方法
test CHANGED
@@ -1,67 +1,81 @@
1
- このコードを変更て、抽出し単語の名前SVD後の値を一緒に出力したいです。
1
+ ### 実行したいこ
2
2
 
3
- ぜひご教授願います。
3
+ TF-IDFを算出したいのですが、出力データが大きすぎるのか、以下のエラーが出ていました。このエラーを解消する方法ざいましたら是非ご教授よろしくお願いいたします。
4
4
 
5
5
 
6
6
 
7
- ```ここに言語を入力
8
-
9
- class MecabTokenizer:
10
-
11
- def __init__(self):
12
-
13
- self.wakati = MeCab.Tagger('-Owakati')
14
-
15
- self.wakati.parse('')
16
-
17
-
18
-
19
- def tokenize(self, line):
20
-
21
- txt = self.wakati.parse(line)
22
-
23
- txt = txt.split()
24
-
25
- return txt
26
-
27
-
28
-
29
- def mecab_tokenizer(self, line):
30
-
31
- node = self.wakati.parseToNode(line)
32
-
33
- keywords = []
34
-
35
- while node:
36
-
37
- if node.feature.split(",")[0] == "名詞" or node.feature.split(",")[0] == "形容詞":
38
-
39
- keywords.append(node.surface)
40
-
41
- node = node.next
42
-
43
- return keywords
7
+ Memory error:
44
8
 
45
9
 
46
10
 
47
- n_comp = 40 #次元圧縮後の次元数
11
+ Unable to allocate 89.4 GiB for an array with shape (19720, 608678) and data type float64
48
12
 
49
13
 
50
14
 
15
+
16
+
17
+
18
+
19
+
20
+
21
+ ```python
22
+
23
+ #省略
24
+
51
- for i in ['Title1','Title2','Title3']:
25
+ for i in ['description2']:
52
26
 
53
27
  print (i)
54
28
 
55
- tfidf_vec = TfidfVectorizer(analyzer='word',ngram_range=(1,2))
29
+ tfidf_vec2 = TfidfVectorizer(analyzer='word',ngram_range=(1,2))
56
30
 
57
- text_tfidf = tfidf_vec.fit_transform(df[i].values.tolist() )
31
+ y = tfidf_vec2.fit_transform(df[i].values.tolist())
58
32
 
59
- text_svd = TruncatedSVD(n_components=n_comp,algorithm='arpack',random_state=9999)
60
-
61
- df_svd = pd.DataFrame(text_svd.fit_transform(text_tfidf))
33
+ df_tfidf2 = pd.DataFrame(y.toarray(), columns=tfidf_vec2.get_feature_names())
62
-
63
- df_svd.columns = ['svd_'+str(i)+str(j+1) for j in range(n_comp)]
64
-
65
- df = pd.concat([df,df_svd],axis=1)
66
34
 
67
35
  ```
36
+
37
+ ```
38
+
39
+ MemoryError Traceback (most recent call last)
40
+
41
+ <ipython-input-23-d4e72a34568f> in <module>
42
+
43
+ 3 tfidf_vec2 = TfidfVectorizer(analyzer='word',ngram_range=(1,2))
44
+
45
+ 4 y = tfidf_vec2.fit_transform(df[i].values.tolist())
46
+
47
+ ----> 5 df_tfidf2 = pd.DataFrame(y.toarray(), columns=tfidf_vec2.get_feature_names())
48
+
49
+
50
+
51
+ ~\anaconda3\lib\site-packages\scipy\sparse\compressed.py in toarray(self, order, out)
52
+
53
+ 1023 if out is None and order is None:
54
+
55
+ 1024 order = self._swap('cf')[0]
56
+
57
+ -> 1025 out = self._process_toarray_args(order, out)
58
+
59
+ 1026 if not (out.flags.c_contiguous or out.flags.f_contiguous):
60
+
61
+ 1027 raise ValueError('Output array must be C or F contiguous')
62
+
63
+
64
+
65
+ ~\anaconda3\lib\site-packages\scipy\sparse\base.py in _process_toarray_args(self, order, out)
66
+
67
+ 1187 return out
68
+
69
+ 1188 else:
70
+
71
+ -> 1189 return np.zeros(self.shape, dtype=self.dtype, order=order)
72
+
73
+ 1190
74
+
75
+ 1191
76
+
77
+
78
+
79
+ MemoryError: Unable to allocate 89.4 GiB for an array with shape (19720, 608678) and data type float64
80
+
81
+ ```

1

訂正

2021/02/20 08:20

投稿

fukubaka
fukubaka

スコア11

test CHANGED
File without changes
test CHANGED
@@ -48,15 +48,15 @@
48
48
 
49
49
 
50
50
 
51
- for i in ['channelTitle2','description2','title2']:#,'new_title','new_description',
51
+ for i in ['Title1','Title2','Title3']:
52
52
 
53
53
  print (i)
54
54
 
55
55
  tfidf_vec = TfidfVectorizer(analyzer='word',ngram_range=(1,2))
56
56
 
57
- text_tfidf = tfidf_vec.fit_transform(df[i].values.tolist() )
57
+ text_tfidf = tfidf_vec.fit_transform(df[i].values.tolist() )
58
58
 
59
- text_svd = TruncatedSVD(n_components=n_comp, algorithm='arpack',random_state=9999)
59
+ text_svd = TruncatedSVD(n_components=n_comp,algorithm='arpack',random_state=9999)
60
60
 
61
61
  df_svd = pd.DataFrame(text_svd.fit_transform(text_tfidf))
62
62