teratail header banner
teratail header banner
質問するログイン新規登録

質問編集履歴

4

変更

2020/01/12 09:32

投稿

hidemomo
hidemomo

スコア31

title CHANGED
File without changes
body CHANGED
@@ -26,27 +26,25 @@
26
26
  mecab.parse('')
27
27
 
28
28
  def tokenize(text):
29
+
29
-
30
+ node = mecab.parse(text).splitlines()
31
+
30
32
  stop_words = [
31
33
  '%','%','g','g','*','?','?','.','.','ー','*****','/','/','ml','(','(',')',')',
32
34
  '-','一']
33
35
 
34
36
  parts = ['名詞','形容詞','動詞','副詞']
35
37
 
36
- node = mecab.parse(text).splitlines()
37
-
38
- wrds = []
39
-   temp = []
38
+ tokens = []
40
39
 
41
40
  for i in node:
42
41
  if i == 'EOS' or i == '': continue
43
42
  word_tmp = i.split()[0]
44
43
  part = i.split()[1].split(',')[0] #品詞
45
44
  if not (part in parts) or (word_tmp in stop_words): continue
46
- temp.append(word_tmp)
45
+ tokens.append(word_tmp)
47
- wrds.append(temp)
46
+
48
-
49
- return wrds
47
+ return tokens
50
48
 
51
49
  tfidf_lst=[]
52
50
 
@@ -55,11 +53,18 @@
55
53
  tfidf = train_vectorize.fit_transform(text)
56
54
  tfidf_lst.append(tfidf)
57
55
 
58
- ※上記エラーが出ます。恐らく、形状が(5000,0)だからでしょうか?
56
+ ※上記エラーが出ます。
59
- ちなみ、tokenizeは機能していると思います。
57
+ 下記テキストの形状すると機能します。
60
58
 
61
- print(tokenize('スーパードライASAHI BREWERIES LIMITED春限定スペシャルパッケージ'))
59
+ texts = ['スーパードライASAHI BREWERIES LIMITED春限定スペシャルパッケージ',
62
- out[['スーパードライ', 'ASAHI', 'BREWERIES', 'LIMITED', '春', '限定', 'スペシャル', 'パッケ']]
60
+ 'TaKaRa CAN CHU-HI直搾り限定出荷世界のフレツ便カリブ海',
61
+ '焼き肉のたれこだわり食感のせて!巻いて!玉ねぎとガーリックの旨味']
62
+
63
+ train_vectorize = TfidfVectorizer(tokenizer = tokenize)
64
+ tfidf = train_vectorize.fit_transform(texts)
65
+ tfidf.toarray()
66
+
67
+ #out:tfidf値一覧 shape(3,28)
63
68
  ```
64
69
  元の形状(5000,0)を保持したまま、あるいは後ほど元形状に戻す方法でも良いので行ごとにtfidf値を抽出する方法をご教示ください。
65
70
  よろしくお願いします。

3

例文

2020/01/12 09:32

投稿

hidemomo
hidemomo

スコア31

title CHANGED
File without changes
body CHANGED
@@ -55,7 +55,11 @@
55
55
  tfidf = train_vectorize.fit_transform(text)
56
56
  tfidf_lst.append(tfidf)
57
57
 
58
- ※上記エラーが出ます。恐らく、形状が(5000,0)だからだと推察ています。
58
+ ※上記エラーが出ます。恐らく、形状が(5000,0)だからょうか?
59
+ ※ちなみに、tokenizeは機能していると思います。
60
+
61
+ print(tokenize('スーパードライASAHI BREWERIES LIMITED春限定スペシャルパッケージ'))
62
+ out[['スーパードライ', 'ASAHI', 'BREWERIES', 'LIMITED', '春', '限定', 'スペシャル', 'パッケージ']]
59
63
  ```
60
- defがおかしいのかもしませんが、元の形状(5000,0)を保持したまま、あるいは後ほど元形状に戻す方法でも良いので行ごとにtfidf値を抽出する方法をご教示ください。
64
+ 元の形状(5000,0)を保持したまま、あるいは後ほど元形状に戻す方法でも良いので行ごとにtfidf値を抽出する方法をご教示ください。
61
65
  よろしくお願いします。

2

ミスの削除

2020/01/12 09:18

投稿

hidemomo
hidemomo

スコア31

title CHANGED
File without changes
body CHANGED
@@ -57,24 +57,5 @@
57
57
 
58
58
  ※上記エラーが出ます。恐らく、形状が(5000,0)だからだと推察しています。
59
59
  ```
60
-
61
- ###他に試行したこと
62
- 上記形状を強引に(1,)にすると計算はできます。但し、元の形状を保持できず行ごとのtfidf値が抽出できない問題にあたります。
63
- ```python
64
- #test texts.shape(1,2)
65
- texts = [[スーパードライASAHI BREWERIES LIMITED春限定スペシャルパッケージ],
66
- [TaKaRa CAN CHU-HI直搾り限定出荷世界のフレーツ便カリブ海]
67
- ]
68
-
69
- tfidf_lst=[]
70
-
71
- for text in texts:
72
- train_vectorize = TfidfVectorizer(tokenizer = tokenize)
73
- tfidf = train_vectorize.fit_transform(text)
74
- tfidf_lst.append(tfidf)
75
-
76
- #out 数値は抽出される。
77
-
78
- ```
79
60
  defがおかしいのかもしませんが、元の形状(5000,0)を保持したまま、あるいは後ほど元形状に戻す方法でも良いので行ごとにtfidf値を抽出する方法をご教示ください。
80
61
  よろしくお願いします。

1

ミス修正

2020/01/12 08:54

投稿

hidemomo
hidemomo

スコア31

title CHANGED
File without changes
body CHANGED
@@ -46,7 +46,7 @@
46
46
  temp.append(word_tmp)
47
47
  wrds.append(temp)
48
48
 
49
- return text #wrdsだと計算できなくなります。
49
+ return wrds
50
50
 
51
51
  tfidf_lst=[]
52
52