Fastest way to check if a string contains a string from a list
For this I'd suggest firstly tokenize the string with RegexpTokenizer
to remove all special characters and then use sets
to find the intersection:
from nltk.tokenize import RegexpTokenizer
test_string = "Hello! This is a test. I love to eat apples."
tokenizer = RegexpTokenizer(r'\w+')
test_set = set(tokenizer.tokenize(test_string))
# {'Hello', 'I', 'This', 'a', 'apples', 'eat', 'is', 'love', 'test', 'to'}
Having tokenized the string and constructed a set find the set.intersection
:
set(['apples', 'oranges', 'bananas']) & test_set
# {'apples'}
Yes. you can decrease your iterations like this :
print(any(fruit in frozenset(test_string.replace('.',' ').lower().split()) for fruit in fruits))