improve KKTIX guess answer feature.
parent
b8667e56f5
commit
107e814c8a
|
@ -473,38 +473,101 @@ def convert_string_to_pattern(my_str, dynamic_length=True):
|
||||||
return my_formated
|
return my_formated
|
||||||
|
|
||||||
def guess_answer_list_from_multi_options(tmp_text):
|
def guess_answer_list_from_multi_options(tmp_text):
|
||||||
|
show_debug_message = True # debug.
|
||||||
|
show_debug_message = False # online
|
||||||
|
|
||||||
options_list = None
|
options_list = None
|
||||||
|
matched_pattern = ""
|
||||||
if options_list is None:
|
if options_list is None:
|
||||||
if u'【' in tmp_text and u'】' in tmp_text:
|
if u'【' in tmp_text and u'】' in tmp_text:
|
||||||
options_list = re.findall(u'【.*?】', tmp_text)
|
pattern = '【.*?】'
|
||||||
|
options_list = re.findall(pattern, tmp_text)
|
||||||
if len(options_list) <= 2:
|
if len(options_list) <= 2:
|
||||||
options_list = None
|
options_list = None
|
||||||
|
else:
|
||||||
|
matched_pattern = pattern
|
||||||
|
|
||||||
if options_list is None:
|
if options_list is None:
|
||||||
if u'(' in tmp_text and u')' in tmp_text:
|
if u'(' in tmp_text and u')' in tmp_text:
|
||||||
options_list = re.findall(u'\(.*?\)', tmp_text)
|
pattern = '\(.*?\)'
|
||||||
|
options_list = re.findall(pattern, tmp_text)
|
||||||
if len(options_list) <= 2:
|
if len(options_list) <= 2:
|
||||||
options_list = None
|
options_list = None
|
||||||
|
else:
|
||||||
|
matched_pattern = pattern
|
||||||
|
|
||||||
if options_list is None:
|
if options_list is None:
|
||||||
if u'[' in tmp_text and u']' in tmp_text:
|
if u'[' in tmp_text and u']' in tmp_text:
|
||||||
options_list = re.findall(u'[.*?]', tmp_text)
|
pattern = '\[.*?\]'
|
||||||
|
options_list = re.findall(pattern, tmp_text)
|
||||||
if len(options_list) <= 2:
|
if len(options_list) <= 2:
|
||||||
options_list = None
|
options_list = None
|
||||||
|
else:
|
||||||
|
matched_pattern = pattern
|
||||||
|
|
||||||
|
if show_debug_message:
|
||||||
|
print("matched pattern:", matched_pattern)
|
||||||
|
|
||||||
|
# default remove quota
|
||||||
|
is_trim_quota = not check_answer_keep_symbol(tmp_text)
|
||||||
|
if show_debug_message:
|
||||||
|
print("is_trim_quota:", is_trim_quota)
|
||||||
|
|
||||||
return_list = None
|
return_list = None
|
||||||
if not options_list is None:
|
if not options_list is None:
|
||||||
options_list_length = len(options_list)
|
options_list_length = len(options_list)
|
||||||
|
if show_debug_message:
|
||||||
|
print("options_list_length:", options_list_length)
|
||||||
|
print("options_list:", options_list)
|
||||||
if options_list_length > 2:
|
if options_list_length > 2:
|
||||||
is_all_options_same_length = True
|
is_all_options_same_length = True
|
||||||
|
options_length_count = {}
|
||||||
for i in range(options_list_length-1):
|
for i in range(options_list_length-1):
|
||||||
if len(options_list[i]) != len(options_list[i]):
|
current_option_length = len(options_list[i])
|
||||||
|
next_option_length = len(options_list[i+1])
|
||||||
|
if current_option_length != next_option_length:
|
||||||
is_all_options_same_length = False
|
is_all_options_same_length = False
|
||||||
|
if current_option_length in options_length_count:
|
||||||
|
options_length_count[current_option_length] += 1
|
||||||
|
else:
|
||||||
|
options_length_count[current_option_length] = 1
|
||||||
|
|
||||||
|
if show_debug_message:
|
||||||
|
print("is_all_options_same_length:", is_all_options_same_length)
|
||||||
|
|
||||||
if is_all_options_same_length:
|
if is_all_options_same_length:
|
||||||
return_list = []
|
return_list = []
|
||||||
for each_option in options_list:
|
for each_option in options_list:
|
||||||
return_list.append(each_option[1:-1])
|
if is_trim_quota:
|
||||||
|
return_list.append(each_option[1:-1])
|
||||||
|
else:
|
||||||
|
return_list.append(each_option)
|
||||||
|
else:
|
||||||
|
#print("options_length_count:", options_length_count)
|
||||||
|
if len(options_length_count) > 0:
|
||||||
|
target_option_length = 0
|
||||||
|
most_length_count = 0
|
||||||
|
for k in options_length_count.keys():
|
||||||
|
if options_length_count[k] > most_length_count:
|
||||||
|
most_length_count = options_length_count[k]
|
||||||
|
target_option_length = k
|
||||||
|
#print("most_length_count:", most_length_count)
|
||||||
|
#print("target_option_length:", target_option_length)
|
||||||
|
if target_option_length > 0:
|
||||||
|
return_list = []
|
||||||
|
for each_option in options_list:
|
||||||
|
current_option_length = len(each_option)
|
||||||
|
if current_option_length == target_option_length:
|
||||||
|
if is_trim_quota:
|
||||||
|
return_list.append(each_option[1:-1])
|
||||||
|
else:
|
||||||
|
return_list.append(each_option)
|
||||||
|
|
||||||
|
# something is wrong, give up those options.
|
||||||
|
if not return_list is None:
|
||||||
|
if len(return_list) <= 2:
|
||||||
|
return_list = None
|
||||||
|
|
||||||
return return_list
|
return return_list
|
||||||
|
|
||||||
#PS: this may get a wrong answer list. XD
|
#PS: this may get a wrong answer list. XD
|
||||||
|
@ -610,23 +673,13 @@ def guess_answer_list_from_hint(CONST_EXAMPLE_SYMBOL, CONST_INPUT_SYMBOL, captch
|
||||||
|
|
||||||
# ps: hint_list is not options list
|
# ps: hint_list is not options list
|
||||||
|
|
||||||
if offical_hint_string == "":
|
|
||||||
offical_hint_string = get_offical_hint_string_from_symbol(CONST_EXAMPLE_SYMBOL, tmp_text)
|
|
||||||
if len(offical_hint_string) > 0:
|
|
||||||
right_part = offical_hint_string.split(CONST_EXAMPLE_SYMBOL)[1]
|
|
||||||
if len(offical_hint_string) == len(tmp_text):
|
|
||||||
offical_hint_string = right_part
|
|
||||||
|
|
||||||
new_hint = find_continuous_text(right_part)
|
|
||||||
if len(new_hint) > 0:
|
|
||||||
offical_hint_string_anwser = new_hint
|
|
||||||
|
|
||||||
if offical_hint_string == "":
|
if offical_hint_string == "":
|
||||||
# for: 若你覺得答案為 a,請輸入 a
|
# for: 若你覺得答案為 a,請輸入 a
|
||||||
if '答案' in tmp_text and CONST_INPUT_SYMBOL in tmp_text:
|
if '答案' in tmp_text and CONST_INPUT_SYMBOL in tmp_text:
|
||||||
offical_hint_string = get_offical_hint_string_from_symbol(CONST_INPUT_SYMBOL, tmp_text)
|
offical_hint_string = get_offical_hint_string_from_symbol(CONST_INPUT_SYMBOL, tmp_text)
|
||||||
if len(offical_hint_string) > 0:
|
if len(offical_hint_string) > 0:
|
||||||
right_part = offical_hint_string.split(CONST_INPUT_SYMBOL)[1]
|
right_part = offical_hint_string.split(CONST_INPUT_SYMBOL)[1]
|
||||||
|
#print("right_part:", right_part)
|
||||||
if len(offical_hint_string) == len(tmp_text):
|
if len(offical_hint_string) == len(tmp_text):
|
||||||
offical_hint_string = right_part
|
offical_hint_string = right_part
|
||||||
|
|
||||||
|
@ -636,6 +689,20 @@ def guess_answer_list_from_hint(CONST_EXAMPLE_SYMBOL, CONST_INPUT_SYMBOL, captch
|
||||||
#if u'答案' in offical_hint_string and CONST_INPUT_SYMBOL in offical_hint_string:
|
#if u'答案' in offical_hint_string and CONST_INPUT_SYMBOL in offical_hint_string:
|
||||||
offical_hint_string_anwser = new_hint
|
offical_hint_string_anwser = new_hint
|
||||||
|
|
||||||
|
|
||||||
|
if offical_hint_string == "":
|
||||||
|
offical_hint_string = get_offical_hint_string_from_symbol(CONST_EXAMPLE_SYMBOL, tmp_text)
|
||||||
|
if len(offical_hint_string) > 0:
|
||||||
|
right_part = offical_hint_string.split(CONST_EXAMPLE_SYMBOL)[1]
|
||||||
|
if len(offical_hint_string) == len(tmp_text):
|
||||||
|
offical_hint_string = right_part
|
||||||
|
|
||||||
|
# PS: find first text will only get B char in this case: 答案為B需填入Bb)
|
||||||
|
new_hint = find_continuous_text(right_part)
|
||||||
|
if len(new_hint) > 0:
|
||||||
|
offical_hint_string_anwser = new_hint
|
||||||
|
|
||||||
|
|
||||||
if show_debug_message:
|
if show_debug_message:
|
||||||
print("offical_hint_string:",offical_hint_string)
|
print("offical_hint_string:",offical_hint_string)
|
||||||
|
|
||||||
|
@ -650,7 +717,7 @@ def guess_answer_list_from_hint(CONST_EXAMPLE_SYMBOL, CONST_INPUT_SYMBOL, captch
|
||||||
|
|
||||||
# is need to merge next block
|
# is need to merge next block
|
||||||
if len(offical_hint_string) > 0:
|
if len(offical_hint_string) > 0:
|
||||||
target_symbol = offical_hint_string + u" "
|
target_symbol = offical_hint_string + " "
|
||||||
if target_symbol in tmp_text :
|
if target_symbol in tmp_text :
|
||||||
star_index = tmp_text.find(target_symbol)
|
star_index = tmp_text.find(target_symbol)
|
||||||
next_block_index = star_index + len(target_symbol)
|
next_block_index = star_index + len(target_symbol)
|
||||||
|
@ -723,16 +790,14 @@ def guess_answer_list_from_hint(CONST_EXAMPLE_SYMBOL, CONST_INPUT_SYMBOL, captch
|
||||||
offical_hint_string = tmp_text[star_index: space_index]
|
offical_hint_string = tmp_text[star_index: space_index]
|
||||||
|
|
||||||
if len(offical_hint_string) > 0:
|
if len(offical_hint_string) > 0:
|
||||||
#print("offical_hint_string_anwser:", offical_hint_string_anwser)
|
if show_debug_message:
|
||||||
|
print("offical_hint_string_anwser:", offical_hint_string_anwser)
|
||||||
my_anwser_formated = convert_string_to_pattern(offical_hint_string_anwser)
|
my_anwser_formated = convert_string_to_pattern(offical_hint_string_anwser)
|
||||||
|
|
||||||
my_options = tmp_text
|
my_options = tmp_text
|
||||||
if len(my_question) < len(tmp_text):
|
if len(my_question) < len(tmp_text):
|
||||||
my_options = my_options.replace(my_question,u"")
|
my_options = my_options.replace(my_question,u"")
|
||||||
my_options = my_options.replace(offical_hint_string,u"")
|
my_options = my_options.replace(offical_hint_string,u"")
|
||||||
#print("tmp_text:", tmp_text)
|
|
||||||
#print("my_options:", my_options)
|
|
||||||
#print("offical_hint_string:", offical_hint_string)
|
|
||||||
|
|
||||||
# try rule7:
|
# try rule7:
|
||||||
# check is chinese/english in question, if match, apply my_options rule.
|
# check is chinese/english in question, if match, apply my_options rule.
|
||||||
|
@ -745,7 +810,9 @@ def guess_answer_list_from_hint(CONST_EXAMPLE_SYMBOL, CONST_INPUT_SYMBOL, captch
|
||||||
star_index = tmp_text_org.find(target_symbol)
|
star_index = tmp_text_org.find(target_symbol)
|
||||||
my_options = tmp_text_org[star_index-1:]
|
my_options = tmp_text_org[star_index-1:]
|
||||||
|
|
||||||
#print(u"my_options:", my_options)
|
if show_debug_message:
|
||||||
|
print("tmp_text:", tmp_text)
|
||||||
|
print("my_options:", my_options)
|
||||||
|
|
||||||
if len(my_anwser_formated) > 0:
|
if len(my_anwser_formated) > 0:
|
||||||
allow_delimitor_symbols = ")].: }"
|
allow_delimitor_symbols = ")].: }"
|
||||||
|
@ -757,20 +824,41 @@ def guess_answer_list_from_hint(CONST_EXAMPLE_SYMBOL, CONST_INPUT_SYMBOL, captch
|
||||||
maybe_delimitor = my_options[span_end+0:span_end+1]
|
maybe_delimitor = my_options[span_end+0:span_end+1]
|
||||||
if maybe_delimitor in allow_delimitor_symbols:
|
if maybe_delimitor in allow_delimitor_symbols:
|
||||||
my_answer_delimitor = maybe_delimitor
|
my_answer_delimitor = maybe_delimitor
|
||||||
#print(u"my_answer_delimitor:", my_answer_delimitor)
|
|
||||||
|
if show_debug_message:
|
||||||
|
print(u"my_answer_delimitor:", my_answer_delimitor)
|
||||||
|
|
||||||
|
# default remove quota
|
||||||
|
is_trim_quota = not check_answer_keep_symbol(tmp_text)
|
||||||
|
if show_debug_message:
|
||||||
|
print("is_trim_quota:", is_trim_quota)
|
||||||
|
|
||||||
if len(my_anwser_formated) > 0:
|
if len(my_anwser_formated) > 0:
|
||||||
#print("text:" , re.findall('\([\w]+\)', tmp_text))
|
|
||||||
new_pattern = my_anwser_formated
|
new_pattern = my_anwser_formated
|
||||||
if len(my_answer_delimitor) > 0:
|
if len(my_answer_delimitor) > 0:
|
||||||
new_pattern = my_anwser_formated + u'\\' + my_answer_delimitor
|
new_pattern = my_anwser_formated + u'\\' + my_answer_delimitor
|
||||||
|
|
||||||
return_list = re.findall(new_pattern, my_options)
|
return_list = re.findall(new_pattern, my_options)
|
||||||
|
if show_debug_message:
|
||||||
|
print("my_anwser_formated:", my_anwser_formated)
|
||||||
|
print("new_pattern:", new_pattern)
|
||||||
|
print("return_list:" , return_list)
|
||||||
|
|
||||||
if not return_list is None:
|
if not return_list is None:
|
||||||
if len(return_list) == 1:
|
if len(return_list) == 1:
|
||||||
# re-sample for this case.
|
# re-sample for this case.
|
||||||
return_list = re.findall(my_anwser_formated, my_options)
|
return_list = re.findall(my_anwser_formated, my_options)
|
||||||
|
|
||||||
|
# clean delimitor
|
||||||
|
if is_trim_quota:
|
||||||
|
return_list_length = len(return_list)
|
||||||
|
if return_list_length >= 1:
|
||||||
|
if len(my_answer_delimitor) > 0:
|
||||||
|
for idx in range(return_list_length):
|
||||||
|
return_list[idx]=return_list[idx].replace(my_answer_delimitor,'')
|
||||||
|
if show_debug_message:
|
||||||
|
print("cleaned return_list:" , return_list)
|
||||||
|
|
||||||
return return_list
|
return return_list
|
||||||
|
|
||||||
def format_question_string(CONST_EXAMPLE_SYMBOL, CONST_INPUT_SYMBOL, captcha_text_div_text):
|
def format_question_string(CONST_EXAMPLE_SYMBOL, CONST_INPUT_SYMBOL, captcha_text_div_text):
|
||||||
|
@ -815,6 +903,9 @@ def format_question_string(CONST_EXAMPLE_SYMBOL, CONST_INPUT_SYMBOL, captcha_tex
|
||||||
return tmp_text
|
return tmp_text
|
||||||
|
|
||||||
def get_answer_list_by_question(CONST_EXAMPLE_SYMBOL, CONST_INPUT_SYMBOL, captcha_text_div_text):
|
def get_answer_list_by_question(CONST_EXAMPLE_SYMBOL, CONST_INPUT_SYMBOL, captcha_text_div_text):
|
||||||
|
show_debug_message = True # debug.
|
||||||
|
show_debug_message = False # online
|
||||||
|
|
||||||
return_list = None
|
return_list = None
|
||||||
|
|
||||||
tmp_text = format_question_string(CONST_EXAMPLE_SYMBOL, CONST_INPUT_SYMBOL, captcha_text_div_text)
|
tmp_text = format_question_string(CONST_EXAMPLE_SYMBOL, CONST_INPUT_SYMBOL, captcha_text_div_text)
|
||||||
|
@ -822,14 +913,21 @@ def get_answer_list_by_question(CONST_EXAMPLE_SYMBOL, CONST_INPUT_SYMBOL, captch
|
||||||
# guess answer list from multi-options: 【】() []
|
# guess answer list from multi-options: 【】() []
|
||||||
if return_list is None:
|
if return_list is None:
|
||||||
return_list = guess_answer_list_from_multi_options(tmp_text)
|
return_list = guess_answer_list_from_multi_options(tmp_text)
|
||||||
pass
|
if show_debug_message:
|
||||||
|
if not return_list is None:
|
||||||
|
print("guess_answer_list_from_multi_options:", return_list)
|
||||||
|
|
||||||
if return_list is None:
|
if return_list is None:
|
||||||
return_list = guess_answer_list_from_hint(CONST_EXAMPLE_SYMBOL, CONST_INPUT_SYMBOL, captcha_text_div_text)
|
return_list = guess_answer_list_from_hint(CONST_EXAMPLE_SYMBOL, CONST_INPUT_SYMBOL, captcha_text_div_text)
|
||||||
|
if show_debug_message:
|
||||||
|
if not return_list is None:
|
||||||
|
print("guess_answer_list_from_hint:", return_list)
|
||||||
|
|
||||||
# try rule8:
|
|
||||||
if return_list is None:
|
if return_list is None:
|
||||||
return_list = guess_answer_list_from_symbols(captcha_text_div_text)
|
return_list = guess_answer_list_from_symbols(captcha_text_div_text)
|
||||||
|
if show_debug_message:
|
||||||
|
if not return_list is None:
|
||||||
|
print("guess_answer_list_from_symbols:", return_list)
|
||||||
|
|
||||||
return return_list
|
return return_list
|
||||||
|
|
||||||
|
@ -2614,6 +2712,22 @@ def check_answer_keep_symbol(captcha_text_div_text):
|
||||||
if u'符號須相同' in keep_symbol_tmp:
|
if u'符號須相同' in keep_symbol_tmp:
|
||||||
is_need_keep_symbol = True
|
is_need_keep_symbol = True
|
||||||
|
|
||||||
|
# for: 大小寫含括號需一模一樣
|
||||||
|
keep_symbol_tmp = keep_symbol_tmp.replace(u'含', '')
|
||||||
|
keep_symbol_tmp = keep_symbol_tmp.replace(u'和', '')
|
||||||
|
keep_symbol_tmp = keep_symbol_tmp.replace(u'與', '')
|
||||||
|
keep_symbol_tmp = keep_symbol_tmp.replace(u'還有', '')
|
||||||
|
keep_symbol_tmp = keep_symbol_tmp.replace(u'及', '')
|
||||||
|
keep_symbol_tmp = keep_symbol_tmp.replace(u'以及', '')
|
||||||
|
keep_symbol_tmp = keep_symbol_tmp.replace(u'需', '')
|
||||||
|
keep_symbol_tmp = keep_symbol_tmp.replace(u'必須', '')
|
||||||
|
keep_symbol_tmp = keep_symbol_tmp.replace(u'而且', '')
|
||||||
|
keep_symbol_tmp = keep_symbol_tmp.replace(u'且', '')
|
||||||
|
keep_symbol_tmp = keep_symbol_tmp.replace(u'一模', '')
|
||||||
|
#print("keep_symbol_tmp:", keep_symbol_tmp)
|
||||||
|
if '大小寫括號相同' in keep_symbol_tmp:
|
||||||
|
is_need_keep_symbol = True
|
||||||
|
|
||||||
return is_need_keep_symbol
|
return is_need_keep_symbol
|
||||||
|
|
||||||
def get_answer_list_from_question_string(registrationsNewApp_div, captcha_text_div_text):
|
def get_answer_list_from_question_string(registrationsNewApp_div, captcha_text_div_text):
|
||||||
|
@ -7200,18 +7314,28 @@ if __name__ == "__main__":
|
||||||
main()
|
main()
|
||||||
else:
|
else:
|
||||||
#for test kktix infer answer.
|
#for test kktix infer answer.
|
||||||
#captcha_text_div_text = u"請回答下列問題,請在下方空格輸入DELIGHT(請以半形輸入法作答,大小寫需要一模一樣)"
|
captcha_text_div_text = u"請回答下列問題,請在下方空格輸入DELIGHT(請以半形輸入法作答,大小寫需要一模一樣)"
|
||||||
#captcha_text_div_text = u"請在下方空白處輸入引號內文字:「abc」"
|
#captcha_text_div_text = u"請在下方空白處輸入引號內文字:「abc」"
|
||||||
#captcha_text_div_text = u"請在下方空白處輸入引號內文字:「0118eveconcert」(請以半形小寫作答。)"
|
#captcha_text_div_text = u"請在下方空白處輸入引號內文字:「0118eveconcert」(請以半形小寫作答。)"
|
||||||
#captcha_text_div_text = "在《DEEP AWAKENING見過深淵的人》專輯中,哪一首為合唱曲目? 【V6】深淵 、【Z5】浮木、【J8】無聲、【C1】以上皆非 (請以半形輸入法作答,大小寫/阿拉伯數字需要一模一樣,範例:A2)"
|
#captcha_text_div_text = "在《DEEP AWAKENING見過深淵的人》專輯中,哪一首為合唱曲目? 【V6】深淵 、【Z5】浮木、【J8】無聲、【C1】以上皆非 (請以半形輸入法作答,大小寫/阿拉伯數字需要一模一樣,範例:A2)"
|
||||||
captcha_text_div_text = "Super Junior 的隊長是以下哪位? 【v】神童 【w】藝聲 【x】利特 【y】始源 若你覺得答案為 a,請輸入 a (英文為半形小寫)"
|
#captcha_text_div_text = "Super Junior 的隊長是以下哪位? 【v】神童 【w】藝聲 【x】利特 【y】始源 若你覺得答案為 a,請輸入 a (英文為半形小寫)"
|
||||||
|
#captcha_text_div_text = "請問XXX, 請以英文為半形小寫(例如:a) a. 1月5日 b. 2月5日 c. 3月5日 d. 4月5日"
|
||||||
|
#captcha_text_div_text = "以下哪個「不是」正確的林俊傑與其他藝人合唱的歌曲組合?(選項為歌名/合作藝人 ,請以半形輸入法作答選項,大小寫需要一模一樣,範例:jju) 選項: (jja)小酒窩/A-Sa蔡卓妍 (jjb)被風吹過的夏天/金莎 (jjc)友人說/張懷秋 (jjd)全面開戰/五月天阿信 (jje)小說/阿杜"
|
||||||
|
#captcha_text_div_text = "請問《龍的傳人2060》演唱會是以下哪位藝人的演出?(請以半形輸入法作答,大小寫需要一模一樣,範例:B2)A1.周杰倫 B2.林俊傑 C3.張學友 D4.王力宏"
|
||||||
|
#captcha_text_div_text = "王力宏何時發行第一張專輯?(請以半形輸入法作答,大小寫需要一模一樣,範例:B2) A1.1985 B2.2005 C3.2015 D4.1995"
|
||||||
|
#captcha_text_div_text = "朴寶劍三月以歌手出道的日期和單曲名為? Answer the single’s name & the debut date. *以半形輸入,大小寫/符號須都相同。例:(E1) Please use the same format given in the options.ex:(E1) (A1)20/Bloomin'(B1)2/Blossom(C1)2/Bloomin'(D1)20/Blossom"
|
||||||
|
#captcha_text_div_text = "以下哪位不是LOVELYZ成員? (請以半形輸入選項內的英文及數字,大小寫須符合),範例:E5e。 (A1a)智愛 (B2b)美珠 (C3c)JON (D4d)叡仁"
|
||||||
|
#captcha_text_div_text = "題請問此次 RAVI的SOLO專輯名稱為?(請以半形輸入法作答,大小寫需要一模一樣,範例:Tt) Aa [ BOOK] 、 Bb [OOK BOOK.R] 、 Cc [R.OOK BOOK] 、 Dd [OOK R. BOOK]"
|
||||||
|
captcha_text_div_text = "請問下列哪個選項皆為河成雲的創作歌曲? Aa) Don’t Forget、Candle Bb) Don’t Forget、Forever+1 Cc) Don’t Forget、Flowerbomb Dd) Don’t Forget、One Love 請以半形輸入,大小寫含括號需一模一樣 【範例:答案為B需填入Bb)】"
|
||||||
inferred_answer_string, answer_list = get_answer_list_from_question_string(None, captcha_text_div_text)
|
inferred_answer_string, answer_list = get_answer_list_from_question_string(None, captcha_text_div_text)
|
||||||
print("inferred_answer_string:", inferred_answer_string)
|
print("inferred_answer_string:", inferred_answer_string)
|
||||||
print("answer_list:", answer_list)
|
print("answer_list:", answer_list)
|
||||||
|
|
||||||
ocr = ddddocr.DdddOcr(show_ad=False, beta=True)
|
ocr = ddddocr.DdddOcr(show_ad=False, beta=True)
|
||||||
with open('captcha-xxxx.png', 'rb') as f:
|
image_file = 'captcha-xxxx.png'
|
||||||
image_bytes = f.read()
|
if os.path.exists(image_file):
|
||||||
res = ocr.classification(image_bytes)
|
with open(image_file, 'rb') as f:
|
||||||
print(res)
|
image_bytes = f.read()
|
||||||
|
res = ocr.classification(image_bytes)
|
||||||
|
print(res)
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue