回答編集履歴

4

説明追加

2021/02/04 08:40

投稿

ppaul
ppaul

スコア24666

test CHANGED
@@ -81,3 +81,115 @@
81
81
  何か変ですね。でも、これを上手に使えばやりたいことはできるはずです。
82
82
 
83
83
  ヒント:私の質問をよく読み返してください。
84
+
85
+
86
+
87
+ 完成に近づいてきましたね。
88
+
89
+
90
+
91
+ 's'と'd'の問題は、手抜きをするなら、辞書の段階で削除するのですが、正規表現の勉強を兼ねて、コードを示します。
92
+
93
+
94
+
95
+ ```python
96
+
97
+ >>> import re
98
+
99
+ >>>
100
+
101
+ >>> data = '''Alice! a childish story take,
102
+
103
+ ... And with a gentle hand
104
+
105
+ ... Lay it where Childhood's dreams are twined
106
+
107
+ ... In Memory's mystic band,
108
+
109
+ ... Like pilgrim's wither'd wreath of flowers
110
+
111
+ ... Pluck'd in a far-off land.
112
+
113
+ ... '''
114
+
115
+ >>> replaced_data = re.sub(r"'s|'d|[^a-z]", ' ', data.lower())
116
+
117
+ >>> print(replaced_data)
118
+
119
+ alice a childish story take and with a gentle hand lay it where childhood dreams are twined in memory mystic band like pilgrim wither wreath of flowers pluck in a far off land
120
+
121
+ ```
122
+
123
+
124
+
125
+ 正規表現を前回のr'[^a-z]'からr"'s|'d|[^a-z]"に変えました。
126
+
127
+ "'s"という文字列または、"'d"という文字列または、a-zでない一文字を空白に置き換えるという意味です。
128
+
129
+ 文字列を囲むシングルクォ-トをダブルクォートに変えたのは、シングルクォ-ト自体を含む文字列をシングルクォ-トで囲むためにはエスケープということを行う必要があるからです。正規表現を使うならエスケープは覚えておいたほうが良いので、例を示します。
130
+
131
+ ```python
132
+
133
+ >>> re.sub(r'\'s|\'d|[^a-z]', ' ', data.lower())
134
+
135
+ 'alice a childish story take and with a gentle hand lay it where childhood dreams are twined in memory mystic band like pilgrim wither wreath of flowers pluck in a far off land '
136
+
137
+ ```
138
+
139
+
140
+
141
+
142
+
143
+ 次に、wordとcountが反対という問題です。
144
+
145
+ 印字する前に
146
+
147
+ d = [(k,v) for v,k in d]
148
+
149
+ でも良いのですが、sortの勉強として、以下のやり方も覚えておいてください。
150
+
151
+
152
+
153
+ ```python
154
+
155
+ >>> d = [('in', 8), ('the', 12), ('a', 7)]
156
+
157
+ >>> def second(x):
158
+
159
+ ... return x[1]
160
+
161
+ ...
162
+
163
+ >>> d.sort(key = second, reverse=True)
164
+
165
+ >>> print(d)
166
+
167
+ [('the', 12), ('in', 8), ('a', 7)]
168
+
169
+ ```
170
+
171
+
172
+
173
+ keyは、並べ替えるときに使う情報をして指定してます。
174
+
175
+ ('in', 8)が与えられたら、second(('in', 8)) つまり8だと思って並べ替えてくださいという意味です。
176
+
177
+ reverse=Trueは降順に並べ替えるという意味です。
178
+
179
+
180
+
181
+ また、lambda記法というのを使うと、secondという関数を定義しなくてもできますが、これを覚えるのはもっと後になってからで良いでしょう。
182
+
183
+ 書き方だけ示しておきます。
184
+
185
+ ```python
186
+
187
+ >>> d = [('in', 8), ('the', 12), ('a', 7)]
188
+
189
+ >>> d.sort(key = lambda x: x[1], reverse=True)
190
+
191
+ >>> print(d)
192
+
193
+ [('the', 12), ('in', 8), ('a', 7)]
194
+
195
+ ```

3

追加の説明

2021/02/04 08:40

投稿

ppaul
ppaul

スコア24666

test CHANGED
@@ -22,8 +22,62 @@
22
22
 
23
23
  自力ではできないと思うものはどれですか。
24
24
 
25
+
26
+
27
+ L. 大文字を小文字に置き換える、はtolowerを知っているので、あとはどこで使うかだけの問題ですね。
28
+
29
+ また、単語を切り出すのもsplitはわかっているのですね。
30
+
25
- ~~これための基礎勉強できていなら、来年、再履修してください~~
31
+ では、B. 区切り文字等空白に置き換え、だけわかればようことにります
26
32
 
27
33
 
28
34
 
29
- ~~あと正規表現は使わなくてもできます。無理にでも使えという課題なのでょうか~~
35
+ 置き換えはre.subを使ます。使い方は、以下のよます
36
+
37
+ 今回は、小文字以外は全部おきかえることにしました。
38
+
39
+
40
+
41
+ ```python
42
+
43
+ >>> import re
44
+
45
+ >>>
46
+
47
+ >>> data = '''And ever, as the story drained
48
+
49
+ ... The wells of fancy dry,
50
+
51
+ ... And faintly strove that weary one
52
+
53
+ ... To put the subject by,
54
+
55
+ ... "The rest next time?" "It is next time!"
56
+
57
+ ... The happy voices cry.
58
+
59
+ ... '''
60
+
61
+ >>> data
62
+
63
+ 'And ever, as the story drained\n The wells of fancy dry,\n And faintly strove that weary one\n To put the subject by,\n "The rest next time?" "It is next time!"\n The happy voices cry.\n'
64
+
65
+ >>> replaced_data = re.sub(r'[^a-z]', ' ', data)
66
+
67
+ >>> print(replaced_data)
68
+
69
+ nd ever as the story drained he wells of fancy dry nd faintly strove that weary one o put the subject by he rest next time t is next time he happy voices cry
70
+
71
+ >>> words_list = replaced_data.split()
72
+
73
+ >>> print(words_list)
74
+
75
+ ['nd', 'ever', 'as', 'the', 'story', 'drained', 'he', 'wells', 'of', 'fancy', 'dry', 'nd', 'faintly', 'strove', 'that', 'weary', 'one', 'o', 'put', 'the', 'subject', 'by', 'he', 'rest', 'next', 'time', 't', 'is', 'next', 'time', 'he', 'happy', 'voices', 'cry']
76
+
77
+ ```
78
+
79
+
80
+
81
+ 何か変ですね。でも、これを上手に使えばやりたいことはできるはずです。
82
+
83
+ ヒント:私の質問をよく読み返してください。

2

分類追加

2021/02/04 05:07

投稿

ppaul
ppaul

スコア24666

test CHANGED
@@ -1,19 +1,29 @@
1
- プログラムを書いたら勉強にならないので、手順だけ書いておきます。
1
+ プログラムを書いたら勉強にならないので、手順だけ書いておきます。(修正しました)
2
2
 
3
3
 
4
4
 
5
- ファイルを読み込む。
5
+ R. ファイルを読み込む。
6
6
 
7
- 単語切り出す
7
+ L. 大文字小文字に置き換える
8
8
 
9
- 単語える。
9
+ B. 区切り文字等空白に置き換える。
10
10
 
11
+ W. 単語を切り出す。
12
+
13
+ C. 単語を数える。
14
+
11
- 単語の数で並び替える。
15
+ S. 単語の数で並び替える。
12
16
 
13
17
 
14
18
 
19
+ これらのうちのどれはすぐにできそうですか。
20
+
21
+ ネットでしらべてできそうなものはどれですか。
22
+
23
+ 自力ではできないと思うものはどれですか。
24
+
15
- これをやるための基礎勉強ができていないなら、来年、再履修してください。
25
+ ~~これをやるための基礎勉強ができていないなら、来年、再履修してください。~~
16
26
 
17
27
 
18
28
 
19
- あと、正規表現は使わなくてもできます。無理にでも使えという課題なのでしょうか。
29
+ ~~あと、正規表現は使わなくてもできます。無理にでも使えという課題なのでしょうか。~~

1

追加

2021/02/03 07:33

投稿

ppaul
ppaul

スコア24666

test CHANGED
@@ -1,6 +1,8 @@
1
- プログラムを書いたら勉強にならないので、手順だけ書いておきます。
1
+ プログラムを書いたら勉強にならないので、手順だけ書いておきます。
2
2
 
3
3
 
4
+
5
+ ファイルを読み込む。
4
6
 
5
7
  単語を切り出す。
6
8
 
@@ -11,3 +13,7 @@
11
13
 
12
14
 
13
15
  これをやるための基礎勉強ができていないなら、来年、再履修してください。
16
+
17
+
18
+
19
+ あと、正規表現は使わなくてもできます。無理にでも使えという課題なのでしょうか。