Есть несколько способов решить вашу проблему.Вот решение с регулярными выражениями.Все коды аэропортов из word
объединены в шаблон, который соответствует любому из кодов в виде слов:
import re
pattern = '\\b(' + '|'.join(word) + ')\\b'
#'\\b(JFK|LHR|DXB)\\b'
matches = [1 if re.search(pattern, s) else 0 for s in String]
#[0, 1, 1]
Вы также можете использовать свой оригинальный подход с разделением, но если сразу за кодом следуетпериод, то вы получите ложный негатив.
matches = [1 if word_set & set(s.split()) else 0 for s in String]
#[0, 1, 1]
Это можно исправить, переключившись с split()
на nltk.word_tokenize()
:
from nltk import word_tokenize as tokens
word_set = set(word)
matches = [1 if word_set & set(tokens(s)) else 0 for s in String]
#[0, 1, 1]
Решение на основе NLTK работает на намного (x50) медленнеечем на основе решения.Сплит-решение является самым быстрым, но наименее точным.