как сократить это действие до нескольких операторов for
мне надо сократить этот код до нескольких строчек. возможно ли это с даными листами или надо это делать с словорями?
from fuzzywuzzy import fuzz
from fuzzywuzzy import process
# Оброшение
alias = ['арка', 'ара', 'арара', 'аришенька', 'арочка'] # оброшение (для удаления)
tbr = ['скажи', 'расскажи', 'сказать'] # Просьба сказать (для удаления)
cname = ['зовут', 'название', 'прозвище',]# имя
csearch = ['найди', 'загугли', 'поиск', 'подскажи', 'найдика', 'найди в интернете'] # поиск
# Время
ctime = ['время', 'час'] # время
ctimer = ['таймер', 'засеки', 'засеки время']#таймер
csleep = ['засни', 'усни', 'засыпай', 'отключись'] # отключение на время
# Приложения
calc = ['сколько будеть', 'сколько', 'посчитай', 'сложи', 'умнож', 'раздели', 'вычти'] # калькулятор
a = 'Как тебя зовут'
for x in alias:
fuzAlias = fuzz.token_sort_ratio(x, a)
if fuzAlias >= 50:
aliasT = True
break
else:
aliasT = False
for x in tbr:
fuzTbr = fuzz.token_sort_ratio(x, a)
if fuzTbr >= 50:
tbrT = True
break
else:
tbrT = False
for x in ctime:
fuzCtime = fuzz.token_sort_ratio(x, a)
if fuzCtime >= 50:
ctimeT = True
break
else:
ctimeT = False
for x in cname:
fuzCname = fuzz.token_sort_ratio(x, a)
if fuzCname >= 50:
cnameT = True
break
else:
cnameT = False
for x in csearch:
fuzCsearch = fuzz.token_sort_ratio(x, a)
if fuzCsearch >= 50:
csearchT = True
break
else:
csearchT = False
for x in csleep:
fuzCsearch = fuzz.token_sort_ratio(x, a)
if fuzCsleep >= 50:
csleepT = True
break
else:
csleepT = False
print (aliasT)
print (tbrT)
print (ctimeT)
print (cnameT)
Ответы (1 шт):
Автор решения: gil9red
→ Ссылка
У вас куски кода вида:
for x in <words>:
fuz<words> = fuzz.token_sort_ratio(x, <text>)
if fuz<words> >= 50:
<words>T = True
break
else:
<words>T = False
Оберните это в функцию, например:
def is_match(words: list, text: str) -> bool:
for x in words:
fuz = fuzz.token_sort_ratio(x, text)
if fuz >= 50:
return True
return False
Тогда, работать с кодом будет проще:
aliasT = is_match(alias, a)
print(aliasT)