Tfidfvectorizer - как я могу проверить обработанные токены? - PullRequest
1 голос
/ 26 марта 2019

Как я могу проверить токенизированные строки внутри TfidfVertorizer()?Если я ничего не передам в аргументах, TfidfVertorizer() будет токенизировать строку с некоторыми предопределенными методами.Я хочу посмотреть, как он разбивает строки на строки, чтобы мне было проще настраивать мою модель.

from sklearn.feature_extraction.text import TfidfVectorizer
corpus = ['This is the first document.',
          'This document is the second document.',
          'And this is the third one.',
          'Is this the first document?']
vectorizer = TfidfVectorizer()
X = vectorizer.fit_transform(corpus)

Я хочу что-то вроде этого:

>>>vectorizer.get_processed_tokens()
[['this', 'is', 'first', 'document'],
 ['this', 'document', 'is', 'second', 'document'],
 ['this', 'is', 'the', 'third', 'one'],
 ['is', 'this', 'the', 'first', 'document']]

Как я могу это сделать?

Ответы [ 3 ]

2 голосов
/ 26 марта 2019

build_tokenizer() точно послужит этой цели.

Попробуйте это!

tokenizer = lambda docs: [vectorizer.build_tokenizer()(doc) for doc in docs]

tokenizer(corpus)

Вывод:

[['This', 'is', 'the', 'first', 'document'],
 ['This', 'document', 'is', 'the', 'second', 'document'],
 ['And', 'this', 'is', 'the', 'third', 'one'],
 ['Is', 'this', 'the', 'first', 'document']]

Одно решение для лайнера будет

list(map(vectorizer.build_tokenizer(),corpus))
2 голосов
/ 26 марта 2019

Я не уверен, что есть встроенная функция sklearn для получения выходных данных в этом формате, но я уверен, что встроенный экземпляр TfidfVectorizer имеет атрибут vocabulary_, который возвращает словарь сопоставления терминов с индексами объектов.Подробнее здесь.

Комбинация этого и результата метода get_feature_names может сделать это за вас.Надеюсь, это поможет.

1 голос
/ 26 марта 2019

Это может быть не синтаксически правильно (делать это в памяти), но это общая идея:

Y = X.to_array()
Vocab = vectorizer.get_feature_names()
fake_corpus = []
for doc in Y:
    l = [Vocab[word_index] for word_index in doc]
    fake_corpus.append(l)

С Y у вас есть индексы ваших слов для каждого документа в корпусе, с vocab у вас есть слова, которым соответствует данный индекс, поэтому вам просто нужно их объединить.

...