質問編集履歴

1

質問文の変更,エラーメッセージの追加

2019/10/16 08:04

投稿

farinelli
farinelli

スコア61

test CHANGED
File without changes
test CHANGED
@@ -1,14 +1,10 @@
1
- テキストファイルから特定の文字列を除去した後,形態素解析によりストップワードを含まない2文字以上の名詞を抽出,表示させたいと思っています.
1
+ テキストファイルから特定の文字列を除去した後,Mecab-python3を用いた形態素解析によりストップワードを含まない2文字以上の名詞を抽出,表示させたいと思っています.
2
-
2
+
3
- しかし,最終行で条件に合う名詞を出力しようとした際,以下の写真のような結果になりました.
3
+ しかし,名詞のセレクションの段階で以下のエラーが出てきました.("#該当箇所"の行です)
4
-
5
- ![イメージ説明](0b3707c27c658fc36ae04b3e9c6ab71f.png)
4
+
6
-
7
- 又,”#該当箇所”と記した行の箇所で文章中の名詞を出力させた結果,本来のテキストの一部が1文字ずつに分割されて出力された事は確認済みです.
5
+
8
-
9
-
10
-
6
+
11
- 今回このような結果になった事を受けて,何か不適切な書き方をしてしまっているのか,あるいは不足している情報があるのか自分の知識では判断できない状況です.
7
+ 従来natto-pyを使ていときでも同様の現象が飽きおり,何か不適切な書き方をしてしまっているのか,あるいは不足している情報があるのか自分の知識では判断できない状況です.
12
8
 
13
9
  この件に関する原因と解決策がご存知の方に是非ご教示頂きたいです.
14
10
 
@@ -42,6 +38,22 @@
42
38
 
43
39
  ```
44
40
 
41
+ ### エラー
42
+
43
+ ```test.txt
44
+
45
+ Traceback (most recent call last):
46
+
47
+ File "renshu2.py", line 64, in <module>
48
+
49
+ if w.feature.split(",")[0] == "名詞":
50
+
51
+ AttributeError: 'str' object has no attribute 'feature'
52
+
53
+ ```
54
+
55
+
56
+
45
57
  ### コード
46
58
 
47
59
  ```renshu.py
@@ -58,7 +70,7 @@
58
70
 
59
71
  import re
60
72
 
61
- from natto import MeCab
73
+ import MeCab
62
74
 
63
75
  import codecs
64
76
 
@@ -78,11 +90,15 @@
78
90
 
79
91
 
80
92
 
93
+ mecab = MeCab.Tagger('-d /usr/local/lib/mecab/dic/mecab-ipadic-neologd')
94
+
95
+
96
+
81
97
  #日本語ツイートを読み込む + 文書数を表示
82
98
 
83
99
  count = 0
84
100
 
85
- with codecs.open("test.txt", "r", "utf-8") as f:
101
+ with codecs.open("protein.txt", "r", "utf-8") as f:
86
102
 
87
103
  corpus = f.read()
88
104
 
@@ -92,11 +108,9 @@
92
108
 
93
109
  #テキストデータの行数を取得する
94
110
 
95
- num_lines = sum(1 for line in open("test.txt"))
111
+ num_lines = sum(1 for line in open("protein.txt"))
96
-
97
-
98
-
112
+
99
- mecab = MeCab('-d /usr/local/lib/mecab/dic/mecab-ipadic-neologd')
113
+ #print(num_lines)
100
114
 
101
115
 
102
116
 
@@ -116,8 +130,6 @@
116
130
 
117
131
  stop_words = g.readlines()
118
132
 
119
-
120
-
121
133
  #url, 返信, RT, 絵文字の除去
122
134
 
123
135
  corpus = re.sub(r"http\S+", "", corpus)
@@ -140,9 +152,11 @@
140
152
 
141
153
  corpus = emoji_pattern.sub("", corpus)
142
154
 
143
- texts = str(corpus)
155
+ #texts = str(corpus)
144
-
156
+
145
- #print(texts)
157
+ print(corpus)
158
+
159
+ texts = mecab.parse(corpus)
146
160
 
147
161
 
148
162
 
@@ -152,15 +166,15 @@
152
166
 
153
167
  for txt in texts:
154
168
 
155
- words = mecab.parse(txt, as_nodes=True)
169
+ words = mecab.parse(txt)
156
170
 
157
171
  doc = []
158
172
 
159
173
 
160
174
 
161
- for w in words:
175
+ for w in words:
162
-
176
+
163
- if w.feature.split(",")[0] == "名詞": #該当箇所
177
+ if w.feature.split(",")[0] == "名詞":#該当箇所
164
178
 
165
179
  if len(w.surface) >= 2:
166
180
 
@@ -168,6 +182,8 @@
168
182
 
169
183
  doc.append(w.surface)
170
184
 
185
+ #print(doc)
186
+
171
187
  docs.append(doc)
172
188
 
173
189
  #本来の意味とは別だがcorpusに単語群を格納