baqu2213 commited on
Commit
dbea0b3
1 Parent(s): 1d5295c

Upload 3 files

Browse files
.gitattributes CHANGED
@@ -111,3 +111,4 @@ Danbooru[[:space:]]Prompt[[:space:]]Selector/TEST2024/NAIA_0101_console_testv2.e
111
  Danbooru[[:space:]]Prompt[[:space:]]Selector/TEST2024/NAIA_0102_testv2.exe filter=lfs diff=lfs merge=lfs -text
112
  Danbooru[[:space:]]Prompt[[:space:]]Selector/TEST2024/NAIA_0103_testv2.exe filter=lfs diff=lfs merge=lfs -text
113
  Danbooru[[:space:]]Prompt[[:space:]]Selector/TEST2024/NAIA_0105_testv2.exe filter=lfs diff=lfs merge=lfs -text
 
 
111
  Danbooru[[:space:]]Prompt[[:space:]]Selector/TEST2024/NAIA_0102_testv2.exe filter=lfs diff=lfs merge=lfs -text
112
  Danbooru[[:space:]]Prompt[[:space:]]Selector/TEST2024/NAIA_0103_testv2.exe filter=lfs diff=lfs merge=lfs -text
113
  Danbooru[[:space:]]Prompt[[:space:]]Selector/TEST2024/NAIA_0105_testv2.exe filter=lfs diff=lfs merge=lfs -text
114
+ Danbooru[[:space:]]Prompt[[:space:]]Selector/TEST2024/NAIA_0107_testv3.exe filter=lfs diff=lfs merge=lfs -text
Danbooru Prompt Selector/TEST2024/NAIA_0107_testv3.exe ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:9feca3cdd1196a20b982072bdc329aa28eb4cf5282199f8dc4fa59f8881c3521
3
+ size 837947086
Danbooru Prompt Selector/TEST2024/NAIA_0107_testv3.py ADDED
The diff for this file is too large to render. See raw diff
 
Danbooru Prompt Selector/TEST2024/NAIA_search.py CHANGED
@@ -92,7 +92,22 @@ def process_perfect_negative_group(df, perfect_negative_group):
92
 
93
  return df
94
 
95
- def search(df, search_request, exclude_request, E, N, S, G):
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
96
  if(E == 0):
97
  df = df[~(df['rating'] == 'e')]
98
  if(N == 0):
@@ -108,9 +123,8 @@ def search(df, search_request, exclude_request, E, N, S, G):
108
 
109
  #search_request에 대한 처리
110
  #처리순서 normal -> curly -> asterisk
111
- split_requests = [item.strip() for item in search_request.split(',')]
112
-
113
- curly_brace_group = [item for item in split_requests if item.startswith('{') and item.endswith('}')]
114
  asterisk_group = [item for item in split_requests if item.startswith('*')]
115
  normal_group = [item for item in split_requests if item not in curly_brace_group + asterisk_group]
116
  #normal_group = [re.escape(item) if any(char in item for char in special_chars) else item for item in normal_group]
@@ -132,35 +146,54 @@ def search(df, search_request, exclude_request, E, N, S, G):
132
  if(len(df) == 0):
133
  return None
134
 
135
- #OR 처리
136
- if curly_brace_group:
137
- for keyword in curly_brace_group:
138
- or_search_keyword = [item.strip() for item in keyword[1:-1].split('|')]
139
- results = pd.DataFrame()
140
- for keyword in or_search_keyword:
141
- if keyword.startswith('*'):
142
- keyword = keyword[1:]
143
- request_regex = False
144
- if any(char in keyword for char in special_chars):
145
- keyword = re.escape(keyword)
146
- request_regex = True
147
  for column in ['copyright', 'character', 'artist', 'meta', 'general']:
148
- if request_regex: matched_rows = df[df[column].str.contains(keyword, na=False, regex=True)]
149
- else: matched_rows = df[df[column].str.contains(keyword, na=False)]
150
- if not matched_rows.empty:
151
- results = pd.concat([results, matched_rows])
 
 
 
 
 
 
 
 
 
 
 
 
 
152
  break
153
- del[[df]]
154
- df = results.copy()
155
- del[[results]]
156
- if(len(df) == 0):
157
- return None
158
-
159
- #Perfect Matching 처리
160
- if asterisk_group:
161
- df = process_asterisk_group(df,asterisk_group)
162
- if(len(df) == 0):
163
- return None
 
 
 
 
 
 
 
 
 
164
 
165
  #Exclude 처리
166
  if negative_split_requests:
@@ -174,17 +207,3 @@ def search(df, search_request, exclude_request, E, N, S, G):
174
  if(len(df) == 0):
175
  return None
176
  return df
177
-
178
-
179
-
180
-
181
-
182
-
183
-
184
-
185
-
186
-
187
-
188
-
189
-
190
-
 
92
 
93
  return df
94
 
95
+ def extract_and_split(search_request):
96
+ curly_brace_group = []
97
+ while '{' in search_request:
98
+ start_index = search_request.find('{')
99
+ end_index = search_request.find('}')
100
+ if end_index != -1:
101
+ curly_brace_content = search_request[start_index:end_index + 1]
102
+ curly_brace_group.append(curly_brace_content)
103
+ search_request = search_request.replace(curly_brace_content, '', 1)
104
+ else:
105
+ break
106
+
107
+ split_requests = [item.strip() for item in search_request.split(',') if item.strip()]
108
+ return curly_brace_group, split_requests
109
+
110
+ def search(df, search_request, exclude_request, E=None, N=None, S=None, G=None):
111
  if(E == 0):
112
  df = df[~(df['rating'] == 'e')]
113
  if(N == 0):
 
123
 
124
  #search_request에 대한 처리
125
  #처리순서 normal -> curly -> asterisk
126
+ #solo, 1girl, {hololive, animal ears|nijisanji, loli}
127
+ curly_brace_group, split_requests = extract_and_split(search_request)
 
128
  asterisk_group = [item for item in split_requests if item.startswith('*')]
129
  normal_group = [item for item in split_requests if item not in curly_brace_group + asterisk_group]
130
  #normal_group = [re.escape(item) if any(char in item for char in special_chars) else item for item in normal_group]
 
146
  if(len(df) == 0):
147
  return None
148
 
149
+ #OR 처리
150
+ if curly_brace_group:
151
+ for keyword in curly_brace_group:
152
+ or_search_keyword = [item.strip() for item in keyword[1:-1].split('|')]
153
+ results = pd.DataFrame()
154
+ for keyword in or_search_keyword:
155
+ keywords = [item.strip() for item in keyword.split(',')]
156
+ matched_rows = None
157
+ for keyword in keywords:
 
 
 
158
  for column in ['copyright', 'character', 'artist', 'meta', 'general']:
159
+ request_regex = False
160
+ if any(char in keyword for char in special_chars):
161
+ keyword = re.escape(keyword)
162
+ request_regex = True
163
+ if keyword == keywords[0]:
164
+ if request_regex: matched_rows = df[df[column].str.contains(keyword, na=False, regex=True)]
165
+ else: matched_rows = df[df[column].str.contains(keyword, na=False)]
166
+ else:
167
+ print(keyword, len(matched_rows))
168
+ if request_regex:
169
+ ndf = matched_rows[matched_rows[column].str.contains(keyword, na=False, regex=True)]
170
+ else:
171
+ ndf = matched_rows[matched_rows[column].str.contains(keyword, na=False)]
172
+ print(keyword, len(matched_rows), len(ndf))
173
+ if not ndf.empty:
174
+ matched_rows = ndf.copy()
175
+ if keyword == keywords[0] and not matched_rows.empty:
176
  break
177
+ else:
178
+ if not matched_rows.empty and not ndf.empty:
179
+ ndf = None
180
+ break
181
+
182
+ if not matched_rows.empty:
183
+ results = pd.concat([results, matched_rows])
184
+ print(results)
185
+ del[[df]]
186
+ results = results.drop_duplicates()
187
+ df = results.copy()
188
+ del[[results]]
189
+ if(len(df) == 0):
190
+ return None
191
+
192
+ #Perfect Matching 처리
193
+ if asterisk_group:
194
+ df = process_asterisk_group(df,asterisk_group)
195
+ if(len(df) == 0):
196
+ return None
197
 
198
  #Exclude 처리
199
  if negative_split_requests:
 
207
  if(len(df) == 0):
208
  return None
209
  return df