質問編集履歴
2
内容の変更
test
CHANGED
@@ -1 +1 @@
|
|
1
|
-
s
|
1
|
+
複数行のcsvファイルを処理して保存すると1行しか保存されない
|
test
CHANGED
@@ -1,72 +1,12 @@
|
|
1
1
|
### 前提・実現したいこと
|
2
2
|
|
3
|
-
処理
|
3
|
+
複数行あるcsvに対して処理を行い、別ディレクトリに保存しようとしているのですが、なぜか1行しか保存されません。
|
4
4
|
|
5
|
-
|
5
|
+
csvの中身は、数値や記号が入った文字列です。
|
6
6
|
|
7
|
-
|
7
|
+
printでは行ごとにすべて表示されるのですが。。。
|
8
8
|
|
9
|
-
file3.csv ・・・
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
csvファイルの中身:1列目に文字列(数行あります。)
|
14
|
-
|
15
|
-
file1.csv(例)
|
16
|
-
|
17
|
-
列
|
18
|
-
|
19
|
-
1行目 明日の天気は、晴れです。
|
20
|
-
|
21
|
-
2行目 今日はいい天気です。
|
22
|
-
|
23
|
-
3行目 昨日はとても雨が降りました。
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
対象ファイルの分かち書きを行い、ストップワードを除去する方法で、ネットの情報をもとにプログラムを組んだのですが(ほぼコピペですが)思いどおりの出力ができません。
|
28
|
-
|
29
|
-
今作成しているプログラムだと、行ごとに分かれている文字列が1列にまとまった形で出力されてしまいます。(下のような感じです。)
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
別ディレクトリに作成したfile1.csv(例)
|
34
|
-
|
35
|
-
1列目
|
36
|
-
|
37
|
-
明日
|
38
|
-
|
39
|
-
天気
|
40
|
-
|
41
|
-
晴れ
|
42
|
-
|
43
|
-
今日
|
44
|
-
|
45
|
-
天気
|
46
|
-
|
47
|
-
昨日
|
48
|
-
|
49
|
-
雨
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
これを行ごとに出力できるようなプログラムを教えていただきたいです。
|
54
|
-
|
55
|
-
理想は下記のような感じです。
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
列
|
60
|
-
|
61
|
-
1行目 明日,天気,晴れ,
|
62
|
-
|
63
|
-
2行目 今日,いい,天気,
|
64
|
-
|
65
|
-
3行目 昨日,雨,降り
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
|
9
|
+
改善点を教えていただけないでしょうか。
|
70
10
|
|
71
11
|
|
72
12
|
|
@@ -110,144 +50,38 @@
|
|
110
50
|
|
111
51
|
for filename in file_list:
|
112
52
|
|
113
|
-
with open(filename, 'r', encoding='cp932') as file:
|
53
|
+
with open(filename, 'r', encoding='cp932',newline="") as file:
|
114
54
|
|
115
55
|
texts = file.readlines()
|
116
56
|
|
57
|
+
-------
|
58
|
+
|
59
|
+
処理(省略)
|
60
|
+
|
61
|
+
-------
|
62
|
+
|
117
|
-
|
63
|
+
analyzer = Analyzer(char_filters, tokenizer, token_filters)
|
118
64
|
|
119
65
|
|
120
66
|
|
121
|
-
# janomeのAnalyzer:文の分割と単語の正規化
|
122
|
-
|
123
|
-
# 文に対する処理のまとめ
|
124
|
-
|
125
|
-
char_filters = --省略--
|
126
|
-
|
127
|
-
|
128
|
-
|
129
|
-
# 単語に分割
|
130
|
-
|
131
|
-
tokenizer = Tokenizer()
|
132
|
-
|
133
|
-
|
134
|
-
|
135
|
-
# 名詞中の数(漢数字を含む)を全て0に置き換えるTokenFilterの実装
|
136
|
-
|
137
|
-
class NumericReplaceFilter(TokenFilter):
|
138
|
-
|
139
|
-
def apply(self, tokens):
|
140
|
-
|
141
|
-
for token in tokens:
|
142
|
-
|
143
|
-
--省略--
|
144
|
-
|
145
|
-
|
146
|
-
|
147
|
-
# ひらがな・カタカナ・英数字の一文字しか無い単語は削除
|
148
|
-
|
149
|
-
class OneCharacterReplaceFilter(TokenFilter):
|
150
|
-
|
151
|
-
def apply(self, tokens):
|
152
|
-
|
153
|
-
for token in tokens:
|
154
|
-
|
155
|
-
--省略--
|
156
|
-
|
157
|
-
|
158
|
-
|
159
|
-
# 単語に対する処理のまとめ
|
160
|
-
|
161
|
-
token_filters = [ --省略--]
|
162
|
-
|
163
|
-
|
164
|
-
|
165
|
-
analyzer = Analyzer(char_filters, tokenizer, token_filters)
|
166
|
-
|
167
|
-
|
168
|
-
|
169
|
-
tokens_list = []
|
170
|
-
|
171
|
-
raw_texts = []
|
172
|
-
|
173
|
-
for text in texts:
|
67
|
+
for text in texts:
|
174
68
|
|
175
69
|
# 文を分割し、単語をそれぞれ正規化する
|
176
70
|
|
177
|
-
text_ = [token.base_form for token in analyzer.analyze(text)]
|
71
|
+
text_ = [token.base_form for token in analyzer.analyze(text)]
|
178
72
|
|
179
|
-
i
|
73
|
+
print(text_)
|
180
74
|
|
181
|
-
|
75
|
+
|
182
76
|
|
77
|
+
#保存
|
183
78
|
|
79
|
+
base=os.path.split(os.path.basename(filename))[1]
|
184
80
|
|
185
|
-
|
81
|
+
out_path=os.path.join(corpus_dir_path,base)
|
186
82
|
|
187
|
-
|
83
|
+
with open(out_path, 'w', encoding='cp932',newline="") as file:
|
188
84
|
|
189
|
-
with open(filename, 'w', encoding='cp932') as file:
|
190
|
-
|
191
|
-
file.writelines(
|
85
|
+
file.writelines(text_)
|
192
|
-
|
193
|
-
|
194
|
-
|
195
|
-
# 単語リストの作成
|
196
|
-
|
197
|
-
words = []
|
198
|
-
|
199
|
-
for text in tokens_list:
|
200
|
-
|
201
|
-
words.extend([word+'\n' for word in text if word != ''])
|
202
|
-
|
203
|
-
base=os.path.split(os.path.basename(filename))[1]
|
204
|
-
|
205
|
-
out_path=os.path.join(corpus_dir_path,base)
|
206
|
-
|
207
|
-
with open(out_path, 'w', encoding='cp932') as file:
|
208
|
-
|
209
|
-
file.writelines(words)
|
210
|
-
|
211
|
-
|
212
|
-
|
213
|
-
# 単語リストからストップワードを削除
|
214
|
-
|
215
|
-
## ストップワードファイルからの呼び込み
|
216
|
-
|
217
|
-
stop_words = []
|
218
|
-
|
219
|
-
path = 'stopwords_jp.txt'
|
220
|
-
|
221
|
-
with open(path) as f:
|
222
|
-
|
223
|
-
stop_words = f.readlines()
|
224
|
-
|
225
|
-
|
226
|
-
|
227
|
-
## ストップワードの除外
|
228
|
-
|
229
|
-
changed_words = [word for word in words if word not in stop_words]
|
230
|
-
|
231
|
-
print('-----------------')
|
232
|
-
|
233
|
-
print('Delited ' + str(len(words) - len(changed_words)) + ' words' )
|
234
|
-
|
235
|
-
print('-----------------')
|
236
|
-
|
237
|
-
|
238
|
-
|
239
|
-
## 別ディレクトリにエクセル保存
|
240
|
-
|
241
|
-
base=os.path.split(os.path.basename(filename))[1]
|
242
|
-
|
243
|
-
out_path=os.path.join(corpus_dir_path,base)
|
244
|
-
|
245
|
-
with open(out_path, 'w', encoding='cp932') as file:
|
246
|
-
|
247
|
-
file.writelines(changed_words)
|
248
|
-
|
249
|
-
reader = csv.DictReader(file, delimiter=',')
|
250
|
-
|
251
|
-
print(reader)
|
252
86
|
|
253
87
|
```
|
1
誤字
test
CHANGED
File without changes
|
test
CHANGED
@@ -66,6 +66,10 @@
|
|
66
66
|
|
67
67
|
|
68
68
|
|
69
|
+
長々とすみませんが、教えていただけますと嬉しいです。
|
70
|
+
|
71
|
+
|
72
|
+
|
69
73
|
### 該当のソースコード
|
70
74
|
|
71
75
|
|