質問編集履歴

2

内容の変更

2019/06/12 05:48

投稿

退会済みユーザー
test CHANGED
@@ -1 +1 @@
1
- stopwordsを除去した後のファイルの中身が1列にまとまってまう。
1
+ 複数行のcsvファイルを処理して保存すると1か保存されない
test CHANGED
@@ -1,72 +1,12 @@
1
1
  ### 前提・実現したいこと
2
2
 
3
- 処理の対象:ディレクトリ複数のcsvファイル
3
+ 複数行あるcsvに対して処理を行い、別ディレクトリに保存しようとしているですが、なぜか1行しか保存されません。
4
4
 
5
- file1.csv
5
+ csvの中身は、数値や記号が入った文字列です。
6
6
 
7
- file2.csv
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
- texts = [text_.replace('\n', '') for text_ in texts]
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
- if len(text_) > 0:
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
- raw_texts = [text_+'\n' for text_ in raw_texts]
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(raw_texts)
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

誤字

2019/06/12 05:48

投稿

退会済みユーザー
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