Как игнорировать короткие документы с помощью Sklearn?

Я использую Sklearn CountVectorizer() для преобразования моего текстового документа в матрицу совпадения артиклей и слов. Это отлично сработало, однако я хочу, чтобы он исключал строки, соответствующие документам, содержащим менее k слов.

Я попытался сделать это с помощью простого цикла for, однако, поскольку я работаю с запасными массивами, он не работает. Это также не самый элегантный код — должен быть способ получше!

Приведенный ниже код находит матрицу совпадений X, цикл перебирает каждую строку и проверяет, есть ли более k слов.

from sklearn.feature_extraction.text import CountVectorizer
vectorizer = CountVectorizer()
X = vectorizer.fit_transform(doc)

for i in range(len(data)):
if sum(X[i,:])<k:
    count += 1

person George    schedule 08.08.2019    source источник
comment
Вы имеете в виду разреженные массивы? Если да, то какую фактическую структуру данных вы используете? Это, например, scipy разреженная матрица?   -  person Charles    schedule 09.08.2019


Ответы (1)


Вы можете использовать getnnz как показано ниже:

from sklearn.feature_extraction.text import CountVectorizer
vectorizer = CountVectorizer()
X = vectorizer.fit_transform(doc)
k = 100
X_reduced = X[X.getnnz(axis=1)>=k]

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

person Parthasarathy Subburaj    schedule 09.08.2019