質問編集履歴
1
質問文の変更,エラーメッセージの追加
test
CHANGED
File without changes
|
test
CHANGED
@@ -1,14 +1,10 @@
|
|
1
|
-
テキストファイルから特定の文字列を除去した後,形態素解析によりストップワードを含まない2文字以上の名詞を抽出,表示させたいと思っています.
|
1
|
+
テキストファイルから特定の文字列を除去した後,Mecab-python3を用いた形態素解析によりストップワードを含まない2文字以上の名詞を抽出,表示させたいと思っています.
|
2
|
-
|
2
|
+
|
3
|
-
しかし,
|
3
|
+
しかし,名詞のセレクションの段階で以下のエラーが出てきました.("#該当箇所"の行です)
|
4
|
-
|
5
|
-
|
4
|
+
|
6
|
-
|
7
|
-
|
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
|
-
|
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("te
|
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("te
|
111
|
+
num_lines = sum(1 for line in open("protein.txt"))
|
96
|
-
|
97
|
-
|
98
|
-
|
112
|
+
|
99
|
-
|
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
|
-
|
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
|
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に単語群を格納
|