Чтобы ответить на вторую часть, позвольте мне вернуться к первой части. Удобным подходом здесь является преобразование ваших строк обзора в наборы строк слов.
Примерно так:
review_1 = "I have bought several of the Vitality canned dog food products and"
review_1 = set(review_1.split(" "))
Теперь набор review_1 содержит по одному слову. Затем возьмите свой список слов, преобразуйте его в набор и выполните пересечение.
words = ['food','science','good','buy','feedback'....]
words = set(['food','science','good','buy','feedback'....])
matches = review_1.intersection(words)
Результирующий набор, совпадает, содержит все общие слова. Длина этого - количество совпадений.
Теперь, это не работает, если вы заботитесь о том, сколько из каждого слова соответствует. Например, если слово «еда» встречается в обзоре дважды, а слово «наука» встречается один раз, считается ли это совпадением трех слов?
Если да, дайте мне знать через комментарий, и я могу написать несколько код для обновления ответа, чтобы включить этот сценарий.
РЕДАКТИРОВАТЬ: Обновление, чтобы включить вопрос комментария
Если вы хотите вести подсчет, сколько раз каждое слово повторяется, затем повесьте на обзорный список. Примените его только для установки при выполнении пересечения. Затем используйте метод списка «count», чтобы подсчитать, сколько раз каждое совпадение появляется в обзоре. В приведенном ниже примере я использую словарь для хранения результатов.
review_1 = "I have bought several of the Vitality canned dog food products and"
words = ['food','science','good','buy','feedback'....]
words = set(['food','science','good','buy','feedback'....])
matches = set(review_1).intersection(words)
match_counts = dict()
for match in matches:
match_counts[match] = words.count(match)