#python #nltk #lemmatization
#python #nltk #лемматизация
Вопрос:
В настоящее время я работаю над лемантизацией слова из файла csv, где впоследствии я передал все слова строчными буквами, удалил все знаки препинания и разделил столбец.
Я использую только два столбца CSV: analyze.info()
:
<class 'pandas.core.frame.DataFrame'> RangeIndex: 4637 entries, 0 to 4636. Data columns (total 2 columns):
# Column Non-Null Count Dtype
0 Comments 4637 non-null object
1 Classification 4637 non-null object
import string
import pandas as pd
from nltk.corpus import stopwords
from nltk.stem import
analyze = pd.read_csv('C:/Users/(..)/Talk London/ALL_dataset.csv', delimiter=';', low_memory=False, encoding='cp1252', usecols=['Comments', 'Classification'])
lower_case = analyze['Comments'].str.lower()
cleaned_text = lower_case.str.translate(str.maketrans('', '', string.punctuation))
tokenized_words = cleaned_text.str.split()
final_words = []
for word in tokenized_words:
if word not in stopwords.words('english'):
final_words.append(word)
wnl = WordNetLemmatizer()
lemma_words = []
lem = ' '.join([wnl.lemmatize(word) for word in tokenized_words])
lemma_words.append(lem)
Когда я запускаю код, возвращаю эту ошибку:
Обратная трассировка (последний последний вызов):
файл «C:/Users/suiso/PycharmProjects/SA_working/SA_Main.py «, строка 52, в lem = ‘ ‘.join([wnl.lemmatize(word) для слова в tokenized_words])
Файл «C:/Users/suiso/PycharmProjects/SA_working/SA_Main.py «, строка 52, в lem = ‘ ‘.join([wnl.lemmatize(word) для слова в tokenized_words])
Файл «C:UserssuisoPycharmProjectsSA_workingvenvlibsite-packagesnltkstemwordnet.py «, строка 38, в файле lemmatize lemmas = wordnet._morphy(word, pos)
«C:UserssuisoPycharmProjectsSA_workingvenvlibsite-packagesnltkcorpusreaderwordnet.py «, строка 1897, в _morphy,
если форма в исключениях:
TypeError: unhashable тип: ‘список’
Комментарии:
1. какой тип данных
word
при вызовеwnl.lemmatize(word)
? . сделатьprint(type(word))
2.
print(type(word))
возвращает: <класс ‘список’>3. Это означает, что вы передаете
list
вlemmatize
, и он пытается добавить его вdict
илиset
. Это суть проблемы, с которой вы столкнулись. Прочитайте документыWordNetLemmatizer
и посмотрите, какие значения вы можете использовать. см. machinelearningplus.com/nlp/lemmatization-examples-python /…
Ответ №1:
tokenized_words
представляет собой столбец списков. Причина, по которой это не столбец строк, заключается в том, что вы использовали split
метод. Итак, вам нужно использовать цикл double for следующим образом
lem = ' '.join([wnl.lemmatize(word) for word_list in tokenized_words for word in word_list])