#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 .