Я пытаюсь сделать метод, который может проверить, соответствует ли данная фраза хотя бы одному элементу из списка фраз и возвращает их. Ввод - это фраза, список фраз и словарь списков синонимов. Дело в том, чтобы сделать его универсальным.Верните список совпадений данной фразой
Вот пример:
phrase = 'This is a little house'
dictSyns = {'little':['small','tiny','little'],
'house':['cottage','house']}
listPhrases = ['This is a tiny house','This is a small cottage','This is a small building','I need advice']
Я могу создать код, который может сделать это на данном примере, который возвращает BOOL:
if any('This'+' '+'is'+' '+'a'+x+' '+y == phrase for x in dictSyns['little'] for y in dictSyns['house']):
print 'match'
Первый заключается в том, что я должен создать функцию которая будет универсальной (зависит от результатов). Во-вторых, я хочу, чтобы эта функция возвращала список согласованных фраз.
Можете ли вы дать мне совет, как это сделать, поэтому метод возвращает ['This is a tiny house','This is a small cottage']
в этом случае?
Выходной сигнал будет, как:
>>> getMatches(phrase, dictSyns, listPhrases)
['This is a tiny house','This is a small cottage']
Спасибо, это очень помогло. Очень хороший подход. Случаи: Я бы изменил эту строку: if new_phrase.lowercase() в [x.lowercase() для x в фразах] .. Пунктуация (кома и точка): я бы использовал .strip (',') .strip ('. ') –
@Milan обратите внимание, что ваш подход к нижнему регистру чрезвычайно неэффективен, так как он перерабатывает 'фразы' для каждой' new_phrase', не использует 'set' и не включает строчные буквы при генерации новых фраз. Вам также нужно будет тщательно подумать о том, на каком этапе «strip» (обратите внимание, что вы можете просто «strip» («,.»)). – jonrsharpe