Векторизация документа на основе словаря и регулярных выражений - PullRequest
1 голос
/ 20 апреля 2020

Я пытаюсь обучить классификатор текста, используя CountVectorizer от sklearn. Проблема в том, что в моих учебных документах есть много токенов, которые указаны для документа c. Так, например, есть обычные слова на английском языке sh, с которыми метод CountVectorizer.fit_transform отлично работает, но есть некоторые отформатированные токены, которые бы соответствовали регулярному выражению: '\ w \ d \ d \ w \ w \ d ', например,' d84ke2 '. Как и сейчас, метод fit_transform просто взял бы «d84ke2» по номиналу и использовал бы его как функцию.

Я хочу иметь возможность использовать эти указанные c токены, которые соответствуют этому заданному c регулярному выражению, в качестве своей собственной функции, и оставить обычные слова engli sh в качестве собственных функций, поскольку создание функции такой как 'd84ke2', будет бесполезен, так как он больше не появится в любом другом документе.

Мне еще предстоит найти способ сделать это, а тем более «лучший». Ниже приведен пример кода, который у меня есть, и вы можете видеть, что токены 'j64ke2', 'r32kl4', 'w35kf9' и 'e93mf9' все превращены в свои собственные функции. Я повторяю для ясности: я хочу в основном объединить эти функции в одну и сохранить другие.

docs = ['the quick brown j64ke2 jumped over the lazy dogs r32kl4.', 
        'an apple a day keeps the w35kf9 away', 
        'you got the lions share of the e93mf9']

import numpy as np
# define target and target_names  
target_names = ['zero', 'one', 'two']
target = np.array([0, 1, 2])

# Create message bunch. 
from sklearn.utils import Bunch
doc_info = Bunch(data=docs, target=target, target_names=target_names)


# Vectorize training data
from sklearn.feature_extraction.text import CountVectorizer
count_vect = CountVectorizer()
count_vect.fit(doc_info.data)

vocab = count_vect.vocabulary_
vocab_keys = list(vocab.keys())
#vocab_vals = list(vocab.values())

X_train_counts = count_vect.transform(doc_info.data)
X = X_train_counts.toarray()        
import pandas as pd
df = pd.DataFrame(X, columns=vocab_keys)

1 Ответ

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

Комментарий yatu - хорошее решение. Я смог очистить документ перед подачей его на CountVectorizer, подставив слово для каждого соответствующего регулярного выражения.

...