Поиск в списке python для совпадений с пользовательским списком основных слов различной длины
Я пытаюсь найти аннотации в словаре для пользовательских слов с помощью Python. Следующий код - почти то, что я хочу. То есть, появляется ли какое-либо из значений в stem_words один или несколько раз в word_tokenized_abstract?
if(any(word in stem_words for word in word_tokenized_abstract)):
do stuff
где...
- stem_words - это список только строк
- word_tokenized_abstract - это список только строк
Я основал вышеизложенное на одной строке, чтобы проверить, существует ли хотя бы один элемент в списке в другом списке?
Моя проблема в том, что мои stem_words имеют разную длину. Я попробовал следующий код (модификация вышеупомянутого), который не работал для меня. Я пробовал несколько других модификаций, но они либо не работают, либо вызывают сбой.
if(any(word in stem_words for word[0:len(word)] in word_tokenized_abstract)):
do stuff
Таким образом, любое из значений word_tokenized_abstract начинается с любого из значений в stem_words
?
если это поможет, мой stem_words = ['pancrea', 'muscul', 'derma', 'ovar']
Спасибо! Я прошу прощения, если на этот вопрос уже был дан ответ, но я не смог его найти.
1 ответ
Таким образом, вы хотите проверить, содержится ли какая-либо строка в первом списке в любой из строк второго списка.
Я бы попробовал это:
any(y.startswith(x) for y in word_tokenized_abstract for x in stem_words)
Пояснение: для каждого ствола x
в stem_words
проверить, есть ли какая-либо строка в word_tokenized_abstract
начинается с x
,
Если вы просто хотите, чтобы основа была подстрокой слова, используйте:
any(x in y for y in word_tokenized_abstract for x in stem_words)