Ошибка с пробелами при попытке токенизации текста в Keras - PullRequest
0 голосов
/ 24 декабря 2018

У меня есть фрейм данных с 2 столбцами.Первый столбец (content_cleaned) содержит строки, содержащие предложения.Второй столбец (значимый) содержит связанную двоичную метку.

Проблема, с которой я столкнулся, связана с пробелами, когда я пытаюсь токенизировать текст в столбце content_cleaned.Вот мой код:

df = pd.read_csv(pathname, encoding = "ISO-8859-1")
df = df[['content_cleaned', 'meaningful']]
df = df.sample(frac=1)

#Transposed columns into numpy arrays 
X = np.asarray(df[['content_cleaned']])
y = np.asarray(df[['meaningful']])

#Split into training and testing set
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=21) 

# Create tokenizer
tokenizer = Tokenizer(num_words=100) #No row has more than 100 words.

#Tokenize the predictors (text)
X_train = tokenizer.sequences_to_matrix(X_train.astype(np.int32), mode="binary")
X_test = tokenizer.sequences_to_matrix(X_test.astype(np.int32), mode="binary")

#Convert the labels to the binary
encoder = LabelBinarizer()
encoder.fit(y_train) 
y_train = encoder.transform(y_train)
y_test = encoder.transform(y_test)

Строка кода, которую выдвигает на первый план ошибка:

X_train = tokenizer.sequences_to_matrix(X_train.astype(np.int32), mode="binary")

Сообщение об ошибке:

invalid literal for int() with base 10: "STX's better than reported quarter is likely to bode well for WDC results."

Предложениепосле "base 10:" приведен пример одной из строк в столбце, содержащем текст.Это было бы примером предложения, которое я пытаюсь разбить на токены.

Я был убежден, что это проблема с NumPy, но я также убежден, что это может быть ошибкой в ​​моем методе токенизации этого текстового массива.

Любая помощь будет отличной!

1 Ответ

0 голосов
/ 25 декабря 2018

Вы не токенизируете текст, метод sequences_to_matrix не токенизирует тексты, но преобразует список последовательностей в матрицы .Существует множество способов токенизации текстовых данных, поэтому, если вы хотите использовать Keras Tokenizer, вы можете пойти следующим образом:

from keras.preprocessing.text import Tokenizer

# Tip for you: the num_words param is not the max length of given sentences
# It is the maximum number of words to keep in dictionary
tokenizer = Tokenizer(num_words=100)

# Creates a word index dictionary in itself
# Do not fit on your test data it will mislead on your score
tokenizer.fit_on_texts(X_train)

# Now you can convert the texts to sequences
X_train_encoded = tokenizer.texts_to_sequences(X_train)
X_test_encoded = tokenizer.texts_to_sequences(X_test)

# You need to add pads to sentences to fix them to same size
from keras.preprocessing.sequence import pad_sequences
max_len = 100
X_train = pad_sequences(X_train_encoded, maxlen=max_len)
X_test = pad_sequences(X_test_encoded, maxlen=max_len)

Надеюсь, это поможет вам, посмотрите здесь тамотличный учебник по предварительной обработке текста с помощью keras.

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