Поиск в списке 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)
Другие вопросы по тегам