Вы никогда не сможете найти два слова из-за этого кода:
title.lower().split(' ')
Скажите, что ваш заголовок tata computer services , когда вы выполняете этот код, выdup с:
["tata", "computer", "services"]
Тогда в вашем for loop вы будете искать только каждое отдельное слово, по сути, вы разбили заголовок на что-то, что вы не можете найти.
Запись для цикла в человеческих словах:
any(one_word.lower() in title.lower().split(' ') for one_word in brand_list)
Если любое из слов в brand_list можно найти в массиве ["tata",«компьютер», «услуги»], тогда это правда.
Как видите, слова из brand_list не могут совпадать, поскольку слово на самом деле состоит из трех слов ипробелы "Тата компьютерные услуги".
Чтобы выполнить то, что вы ищете:
Измените это:
if any(one_word.lower() in title.lower().split(' ') for one_word in brand_list):
на:
if any(one_word.lower() in title.lower() for one_word in brand_list):
Таким образом, вы ищете каждое слово из brand_list внутри заголовка.Ваш код будет выглядеть так:
brand_list = ['ibm','microsoft','abby softwate', 'tata computer services']
import string
def check_firm(test_title):
translator = str.maketrans('', '', string.punctuation)
title = test_title.translate(translator)
if any(one_word.lower() in title.lower() for one_word in brand_list):
status_code_value = 0
print("OEM word found")
else:
status_code_value = 1
print("OEM word not found")
print("current value of status code ------------>", status_code_value)
check_firm("ibm")
check_firm("abby software")
check_firm("abby softwate apple")
Со следующим выводом:
OEM word found
current value of status code ------------> 0
OEM word not found
current value of status code ------------> 1
OEM word found
current value of status code ------------> 0
РЕДАКТИРОВАТЬ
OP : Я попробовал ваше решение.Проблема в том, что это также будет справедливо для ввода, такого как «tata computer servicessssssssss».Любая идея, чтобы преодолеть эту проблему.Спасибо
В комментариях было подчеркнуто, что этот код позволит передать название, например tat computer servicesss .Чтобы избежать этого, я предлагаю регулярные выражения, такие как:
brand_list = ['ibm','microsoft','abby softwate', 'tata computer services']
import string
import re
def check_firm(test_title):
translator = str.maketrans('', '', string.punctuation)
title = test_title.translate(translator)
if any(re.search(r'\b' + one_word.lower() + r'\b', title) for one_word in brand_list):
status_code_value = 0
print("OEM word found")
else:
status_code_value = 1
print("OEM word not found")
print("current value of status code ------------>", status_code_value)
check_firm("tata computer services")
check_firm("tata computer servicessssss")
check_firm("tata computer services something else")
Вывод
OEM word found
current value of status code ------------> 0
OEM word not found
current value of status code ------------> 1
OEM word found
current value of status code ------------> 0
Интересующая часть:
any(re.search(r'\b' + one_word.lower() + r'\b', title) for one_word in brand_list):