Мой текущий код:
from nltk.tag import pos_tag, map_tag
search_term = 'quaker lemon banana oatmeal'
lst = []
search_term_words = search_term.split()
for w in search_term_words:
if w in flavor_grocer_mapping:
for flavor in flavor_grocer_mapping[w]:
if flavor in search_term:
lst.append((flavor, 'FLAVOR'))
for x in search_term.replace(flavor, '').split():
if x in brand_grocer_mapping:
for brand in brand_grocer_mapping[x]:
if brand in search_term.replace(flavor, '').split():
lst.append((brand, 'BRAND'))
for word, tag in pos_tag(word_tokenize(search_term.replace(flavor, '').replace(brand, '').strip())):
lst.append((word, map_tag('en-ptb', 'universal', tag)))
Результат, который я получил:
[('lemon', 'FLAVOR'),
('quaker', 'BRAND'),
('banana', 'NOUN'),
('oatmeal', 'NOUN'),
('banana', 'FLAVOR'),
('quaker', 'BRAND'),
('lemon', 'ADJ'),
('oatmeal', 'NOUN')]
Мой ожидаемый результат:
[('lemon', 'FLAVOR'),
('banana', 'FLAVOR'),
('quaker', 'BRAND'),
('oatmeal', 'NOUN')]
Я знаю, проблема в том, чторазделенные слова в поисковых терминах рекурсивно запускаются в циклах for.Как можно искать / отображать целую строку, содержащую несколько ключей в словаре?(Например, lemon
и banana
находятся в строке запроса и являются ключами в словаре flavor_grocer_mapping
.)