Patrón de token en CountVectorizer, scikit-learn

Así que tengo la lista de palabras clave de la siguiente manera,

[u"ALZHEIMER'S DISEASE, OLFACTORY, AGING", u"EEG, COGNITIVE CONTROL, FATIGUE", u"AGING, OBESITY, GENDER", u"AGING, COGNITIVE CONTROL, BRAIN IMAGING"] 

Luego quiero usar CountVectorizer para CountVectorizer un CountVectorizer para que mi modelo tenga el siguiente diccionario:

 [{'ALZHEIMER\'S DISEASE': 0, 'OLFACTORY': 1, 'AGING': 2, 'BRAIN IMAGING': 3, ...}] 

Básicamente, quiero tratar la coma como mi patrón tokenize (excepto el último). Sin embargo, no dude en ponerse en contacto , al final de cada lista. Aquí hay un fragmento de código que tengo ahora:

 from sklearn.feature_extraction.text import CountVectorizer ls = [u"ALZHEIMER'S DISEASE, OLFACTORY, AGING", u"EEG, COGNITIVE CONTROL, FATIGUE", u"AGING, OBESITY, GENDER", u"AGING, COGNITIVE CONTROL, BRAIN IMAGING"] tfidf_model = CountVectorizer(min_df=1, max_df=1, token_pattern=r'(\w{1,}),') tfidf_model.fit_transform(ls) print tfidf_model.vocabulary_.keys() >>> [u'obesity', u'eeg', u'olfactory', u'disease'] 

Siéntase libre de comentarios si desea más información.

Aquí está la respuesta que hice. Primero transformo a cada documento a la lista de la lista (cada uno es términos).

 docs = list(map(lambda s: s.lower().split(', '), ls)) # list of list 

Creé una función para generar un diccionario a partir de palabras en una lista y luego transformar la lista de palabras en una matriz dispersa

 import collections from itertools import chain def tag_to_sparse(docs): docs_list = list(chain(*docs)) docs_list = [w for doc in docs for w in doc] counter = collections.Counter(docs_list) count_pairs = sorted(counter.items(), key=lambda x: -x[1]) vocabulary = dict([(c[0], i) for i, c in enumerate(count_pairs)]) row_ind = list() col_ind = list() for i, doc in enumerate(docs): for w in doc: row_ind.append(i) col_ind.append(vocabulary[w]) value = [1]*len(row_ind) X = sp.csr_matrix((value, (row_ind, col_ind))) X.sum_duplicates() return X, vocabulary 

Solo puedo poner X, vocabulary = tag_to_sparse(docs) para obtener una matriz dispersa y un diccionario de vocabulario.

Acabo de encontrar la respuesta para que puedas engañar a scikit: aprender a reconocer , usando el tokenizer

 vocabulary = list(map(lambda x: x.lower().split(', '), ls)) vocabulary = list(np.unique(list(chain(*vocabulary)))) from sklearn.feature_extraction.text import CountVectorizer model = CountVectorizer(vocabulary=vocabulary, tokenizer=lambda x: x.split(', ')) X = model.fit_transform(ls)