0

В sklearn.feature_extraction.text.TfidfVectorizer мы можем ввести собственный словарь, используя параметр модели vocabulary. но в этом случае для модели используются только мои собственные выбранные слова.Добавление словарного запаса в scikit-learn?

Я хочу использовать автоматически обнаруженные функции с помощью своего пользовательского словаря.

Одним из способов решения этой проблемы является создание модели и получить функции с помощью

vocab=vectorizer.get_feature_names() 

добавлением мой список на Vocab

vocab + vocabulary 

и снова построить модель.

Есть ли способ выполнить весь этот процесс за один шаг?

ответ

1

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

_count_vocab(self, raw_documents, fixed_vocab) 

вызывается с fixed_vocab=False.

Так что я предлагаю вам адаптировать следующий код (Source), чтобы создать словарь, прежде чем запускать TfidfVectorizer.

def _count_vocab(self, raw_documents, fixed_vocab): 
     """Create sparse feature matrix, and vocabulary where fixed_vocab=False 
     """ 
     if fixed_vocab: 
      vocabulary = self.vocabulary_ 
     else: 
      # Add a new value when a new vocabulary item is seen 
      vocabulary = defaultdict() 
      vocabulary.default_factory = vocabulary.__len__ 

     analyze = self.build_analyzer() 
     j_indices = _make_int_array() 
     indptr = _make_int_array() 
     indptr.append(0) 
     for doc in raw_documents: 
      for feature in analyze(doc): 
       try: 
        j_indices.append(vocabulary[feature]) 
       except KeyError: 
        # Ignore out-of-vocabulary items for fixed_vocab=True 
        continue 
      indptr.append(len(j_indices)) 

     if not fixed_vocab: 
      # disable defaultdict behaviour 
      vocabulary = dict(vocabulary) 
      if not vocabulary: 
       raise ValueError("empty vocabulary; perhaps the documents only" 
           " contain stop words") 

     j_indices = frombuffer_empty(j_indices, dtype=np.intc) 
     indptr = np.frombuffer(indptr, dtype=np.intc) 
     values = np.ones(len(j_indices)) 

     X = sp.csr_matrix((values, j_indices, indptr), 
          shape=(len(indptr) - 1, len(vocabulary)), 
          dtype=self.dtype) 
     X.sum_duplicates() 
     return vocabulary, X 
+0

Не могли бы вы объяснить немного дальше? –

+0

Надеюсь, это поможет! –

+0

да его очень чисто сейчас. –