Почему мой код возвращает случайные буквенные символы вместо словесных символов?

#python #function #nlp #nltk #tokenize

#python #функция #nlp #nltk #маркировать

Вопрос:

Я абсолютный новичок в Python, и я очень застрял в этой части. Я попытался создать функцию для предварительной обработки моих текстов / данных для тематического моделирования, и она отлично работает, когда я запускаю ее как отдельный код, но когда она ничего не возвращает, когда я запускаю ее как функцию. Я был бы признателен за любую помощь!

  • Коды, которые я использую, очень простые и, вероятно, неэффективные, но это для моего базового класса, так что для меня действительно basic ways — это путь!

коды:

 def clean (data):
    data_prep = []
    for data in data:
        tokenized_words = nltk.word_tokenize (data)
        text_words = [token.lower() for token in tokenized_words if token.isalnum()]
        text_words = [word for word in text_words if word not in stop_words]
        text_joined = " ".join(textwords)
        data_prep.append(text_joined)
        
    return data_prep
 

выходные данные действительно случайны, такие как «j», «,», «i». В качестве своих данных я использовал файл .txt, преобразованный из файла .csv.

Редактировать:

Я скорректировал свои коды с учетом ошибок, и теперь

 def clean (data):
    data_prep = []
    for row in data:
        tokenized_words = nltk.word_tokenize (data)
        text_words = [token.lower() for token in tokenized_words if token.isalnum()]
        text_words = [word for word in text_words if word not in stop_words]
        text_joined = " ".join(text_words)
        data_prep.append(text_joined)
    return data_prep
 

результаты: теперь он возвращает маркированные предложения и, по-видимому, в цикле.

в чем моя ошибка на этот раз?

см. Изображение

Комментарии:

1. Это явно ошибка : for data in data . Вы хотите что-то вроде for row in data . В цикле вы должны получить доступ только row к .

2. Кроме того, вы ввели textwords вместо text_words в text_joined = " ".join(textwords) строке.

3. Можете ли вы добавить свою текущую конфигурацию? Версия Python, IDE и команда, с помощью которой вы пытаетесь запустить эту функцию.

4. спасибо всем! @JavadBahoosh Я работаю на Python 3.8.3 в ноутбуке Jupyter. Я обновил свои коды, но теперь он возвращает токены предложений и, похоже, зацикливается. Я все еще не уверен, что это неправильно.

Ответ №1:

У меня недостаточно репутации для комментариев, поэтому я вместо этого опубликую это в качестве ответа. Кажется, вы излишне перебираете все свои данные дважды, один раз в вашем внешнем цикле for ( for row in data ), а затем снова в вашем list comprehensions ( [token.lower() for token in tokenized_words if token.isalnum()] ), поскольку вы маркируете все данные ( nltk.word_tokenize(data) ), а не только текущую строку. То есть ваш код должен перестать возвращать одно и то же предложение несколько раз, если вы избавитесь от самого внешнего цикла for .