У меня есть string
и list
:
text = 'Sherlock Holmes. PARIS. Address: 221B Baker Street, london. Solving case in Madrid.'
city = ['Paris', 'London', 'Madrid']
Я хочу извлечь 1-й элемент из списка, который появляется после слова " Адрес".
Здесь мой подход к проблеме с использованием nltk
import nltk
loc = None
flag = False
for word in nltk.word_tokenize(text):
if word == 'Address':
flag = True
if flag:
if word.capitalize() in city:
loc = word
break
print(loc)
Я получаю результат, как ожидалось выше, что является london
.
Но в реальном сценарии мой текст слишком велик и список городов тоже, есть ли лучший способ сделать это?
Самый низкий висящий плод, который я вижу, - это то, что вы можете превратить city
в set
для постоянных проверок членства. Кроме того, рассмотрите возможность использования next
с аргументом по умолчанию для возвращения следующего города.
city = {'Paris', 'London', 'Madrid'}
while text:
text = text.partition('Address')[-1].strip()
print(
next((w for w in nltk.word_tokenize(text) if w.capitalize() in city), None))
next((w for w in nltk.word_tokenize(text) if w.capitalize() in city), None)
переменной.