Как проверить, если вход в список - PullRequest
2 голосов
/ 03 апреля 2020

Я пытаюсь создать инструмент предложения на основе набора данных mov ie. Точнее, он будет предлагать mov ie по названию на основе ключевого слова жанра.

Но я не смог пройти цикл / проверку части скрипта, вот что я попробовал:

import nltk
import pandas as pd
from nltk.tokenize import word_tokenize
import random

#CSV READ & GENRE-TITLE
data = pd.read_csv("data.csv")

df_title = data["title"]
df_genre = data["genre"]

#TOKENIZE
tokenized_genre = [word_tokenize(i) for i in df_genre]

choice = {}

while choice != "exit":
    choice = input("Please enter a word = ")
    for word in {choice}:
        if word in df_genre:
            """The random title of the random adventure movie will be implemented here"""  
        else:
            print("The movie of the genre doesn't exist")

Вывод tokenized_genre примерно так:

[['Biography', ',', 'Crime', ',', 'Drama'],
 ['Drama'], ['Drama', ',', 'History'],
 ['Adventure', ',', 'Drama', ',', 'Fantasy'],
 ['Biography', ',', 'Drama'],
 ['Biography', ',', 'Drama', ',', 'Romance']

Вывод l oop:

Please enter a word = adventure
The movie of the genre doesn't exist
Please enter a word = Adventure
The movie of the genre doesn't exist

Я предполагаю ошибку в списке лексемы, но я не смог их решить.

Ответы [ 2 ]

1 голос
/ 03 апреля 2020

вы можете использовать:

search = {e.lower() for l in tokenized_genre  for e in l}
choice = input("Please enter a word = ")
while choice != "exit":
    if choice.lower() in search:
        # TODO: The random title of the random adventure movie will be implemented here
         print("Works!")  
    else:
        print("The movie of the genre doesn't exist")
    choice = input("Please enter a word = ")

search - это набор, содержащий все ваши слова из tokenized_genre только один раз, преимущество в том, что поиск в наборе также составляет O (1) сложность времени поскольку ваша переменная choice является word, вы можете непосредственно проверить, находится ли входное слово в наборе search

0 голосов
/ 03 апреля 2020

Может быть, я не прав, я не Python мастер.

Кажется, что df_genre возвращает «список списка», а не список. Вы должны присоединиться к спискам и затем искать там.

import itertools

df_genre = [['Biography', ',', 'Crime', ',', 'Drama'], ['Drama'], ['Drama', ',', 'History'], ['Adventure', ',', 'Drama', ',', 'Fantasy'], ['Biography', ',', 'Drama'], ['Biography', ',', 'Drama', ',', 'Romance']]

#TOKENIZE
joined_list = list(itertools.chain.from_iterable(df_genre))

choice = {}

while choice != "exit":
    choice = input("Please enter a word = ")
    for word in {choice}:
        if word in joined_list:
            """The random title of the random adventure movie will be implemented here"""  
            print("Works!")
        else:
            print("The movie of the genre doesn't exist")

Результат локального теста

Я не знаю, является ли это тем, что вы ищете. Надеюсь, поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...