Наивный Байесовский классификатор для текстов, написанный на Python 2.7. Использует сглаживание Лапласа.
NLTK. Нужно, чтобы в NLTK был загружен словарь русских стоп-слов.
Для обучения модели нужен файл, который описывает соответствие документов тренировочного корпуса и меток классов. В этом файле на каждой строке указаны сначала метка класса, потом путь к текстовому файлу.
Пример команды:
python classify.py -t -i training_metadata.txt -o model_file
# ^
# |
# +-----------------+
# |
# +---- опция, которая говорит, что мы обучаем классификатор (--train)
Эта команда сохранит обученную модель в файл model_file
с помощью pickle
. Чтобы потом классифицировать новые документы, нужно вместо ключа -t
(--train
) подать ключ -c
(--classify
), и подать на вход список путей к текстовым файлам:
python classify.py -c -i testing_docs/* -m model_file
# ^
# |
# +----------------------------------+
# |
# +- используем ранее обученную модель для классификации
testing_docs/culture_aa: culture ([('culture', -155.94790737138553), ('politics', -164.41798949884225)])
testing_docs/culture_ab: culture ([('culture', -66.33612028993655), ('politics', -68.57505533871336)])
testing_docs/culture_ac: culture ([('culture', -170.61995356126374), ('politics', -176.31906095815015)])
testing_docs/culture_ad: culture ([('culture', -140.15210471103813), ('politics', -143.7349020698124)])
testing_docs/culture_ae: culture ([('culture', -122.56454258146266), ('politics', -125.94218639867874)])
testing_docs/politics_1.txt: culture ([('culture', -114.39153126973768), ('politics', -119.6450770787448)])
testing_docs/politics_2.txt: culture ([('culture', -133.36538776043304), ('politics', -136.0514983887586)])
testing_docs/politics_3.txt: culture ([('culture', -149.56665552888865), ('politics', -156.04143863722848)])
testing_docs/politics_4.txt: politics ([('culture', -127.96496517094785), ('politics', -126.75865679527068)])
testing_docs/politics_5.txt: politics ([('culture', -140.15210471103813), ('politics', -138.25426314647044)])
testing_docs/politics_6.txt: politics ([('culture', -97.49711632072217), ('politics', -95.67857530370915)])
Программа для каждого входного файла выведет класс, к которому она его отнесла, и веса разных классов (log-вероятности).