回答編集履歴

1

追記

2018/08/08 05:48

投稿

tachikoma
tachikoma

スコア3601

test CHANGED
@@ -9,3 +9,145 @@
9
9
  * 右側と左側どちらか先に見つかったら、探索を終了して次のとんかつに移動ですか?それとも右側だけですか?
10
10
 
11
11
  * 文章の端ではとんかつが見つからなくなる場合がありますが、その場合の終了条件はどうしますか?
12
+
13
+
14
+
15
+ ----
16
+
17
+
18
+
19
+ ```Python
20
+
21
+ # テストデータ
22
+
23
+ samples = [
24
+
25
+ "とんかつ1",
26
+
27
+ "とんかつ2",
28
+
29
+ "a",
30
+
31
+ "b",
32
+
33
+ "c",
34
+
35
+ "d",
36
+
37
+ "e",
38
+
39
+ "f",
40
+
41
+ "g",
42
+
43
+ "h",
44
+
45
+ "i",
46
+
47
+ "j",
48
+
49
+ "k",
50
+
51
+ "l",
52
+
53
+ "とんかつ3",
54
+
55
+ ]
56
+
57
+
58
+
59
+ # 抽出コード
60
+
61
+ result = []
62
+
63
+ kw = "とんかつ"
64
+
65
+ MAX_REPEAT = 5
66
+
67
+ MIN_REPEAT = 2
68
+
69
+ for i, sample in enumerate(samples):
70
+
71
+ if kw in sample:
72
+
73
+ result.append([sample])
74
+
75
+
76
+
77
+ offset = 1
78
+
79
+ while True:
80
+
81
+ # マイナスのindexにならないようにする
82
+
83
+ if i - offset >= 0:
84
+
85
+ tmp = samples[i-offset]
86
+
87
+ else:
88
+
89
+ tmp = ""
90
+
91
+ result[-1].append(tmp)
92
+
93
+
94
+
95
+ # kwが含まれたら探索を終了する終了条件
96
+
97
+ if (any(kw in t for t in result[-1][1:])
98
+
99
+ and (offset >= MIN_REPEAT)
100
+
101
+ ):
102
+
103
+ break
104
+
105
+
106
+
107
+ # プラス側のインデックスは例外処理で対処
108
+
109
+ try:
110
+
111
+ tmp = samples[i+offset]
112
+
113
+ except IndexError:
114
+
115
+ tmp = ""
116
+
117
+ result[-1].append(tmp)
118
+
119
+
120
+
121
+ # kwが含まれたら探索を終了する終了条件
122
+
123
+ if (any(kw in t for t in result[-1][1:])
124
+
125
+ and (offset >= MIN_REPEAT)
126
+
127
+ ):
128
+
129
+ break
130
+
131
+
132
+
133
+ # 終了条件
134
+
135
+ if offset == MAX_REPEAT:
136
+
137
+ break
138
+
139
+
140
+
141
+ offset += 1
142
+
143
+
144
+
145
+ result
146
+
147
+ # [['とんかつ1', '', 'とんかつ2', ''],
148
+
149
+ # ['とんかつ2', 'とんかつ1', 'a', ''],
150
+
151
+ # ['とんかつ3', 'l', '', 'k', '', 'j', '', 'i', '', 'h', '']]
152
+
153
+ ```