Spring 2014. Speech Technology Center
Algorithm from "Diverse Keyword Extraction from Conversations"
Алгоритм Diverse Keyword Extraction позволяет получить набор слов, которые представляют смысловое содержание текстов. Поощряется как сходство слов, для извлечения наиболее репрезентативных слов, так и разнообразие слов, чтобы покрыть несколько тем, если это необходимо. Diverse Keyword Extraction использует Topic Model (LDA).
На вход DiverseKeyword
подается экземпляр класса TopicModel
и количество ключевых слов.
TopicModel
работает с текстами собранными в одном файле. Формат этого файла:
Имя_файла1(без_пробелов) X текст файла в одной строке ...
Имя_файла2(без_пробелов) X текст файла в одной строке ...
Имя_файла3(без_пробелов) X текст файла в одной строке ...
...
Для преобразования базы в один файл можно использовать функцию convert
. Она принимает путь до каталога, в котором хранится база. Ожидается, что база состоит из папок – предполагаемых тем, в которых находятся файлы относящиеся к соответствующим темам. Файлы могут содержать текст как в одной строке, так и в нескольких. При конвертации можно удалять начальные теги, например, в реализации convert
, удаляется в начале каждого текста Sentence=
, если оно, конечно, присутствуют. Можно добавить свои игнорируемые начальные теги. Для этого надо добавить их в множество ignoredTags
в convert.cpp
. Имя каждого файла в получаемом файле-базе формируется из имени папки и имени файла, например, TOPIC:имя_папки_FILENAME:имя_файла
. Сейчас convert
ожидает файлы в кодировке cp1251, для работы с форматом utf-8 нужно самостоятельно закомментировать/раскомментировать соответствующие строки в convert.cpp
. На выходе файл-база в utf-8. Сам файл-база сохраняется под именем Имя_базы_convert_out.txt
в data/results
.
Возвращает convert
количество обнаруженных не пустых папок в базе.
#####TopicModel
возвращает:
- top-words – наиболее характерные слова для каждой темы, формат файла:
1 Dirichlet_alpha_parameter
word frequency
word frequency
...
2 Dirichlet_alpha_parameter
word frequency
word frequency
...
- doc-topics – распределение тем по каждому документу, формат файла:
#doc name topic proportion ...
1 filename1 topic max_proportion othertopic less_proportion ...
2 filename2 topic max_proportion othertopic less_proportion ...
...
#####DiverseKeyword
возвращает:
- doc-keywords – ключевые слова для каждого документа, формат файла:
#doc name keywords ...
1 filename1 word word ...
2 filename2 word word ...
...
handle.cpp
содержит обработчик, который создает TopicModel
и DiverseKeyword
для заданной базы, а также выводит результат в стандартный выходной поток (по умолчанию) или в указанные файлы в виде: Имя_базы_top-words_log_info.txt
, Имя_базы_doc-topics_log_info.txt
, Имя_базы_doc-keywords_log_info.txt
, где _log_info
это информация о количестве тем, которые выделил TopicModel
из текстов, о том было ли приведение слов к нижнему регистру, и исключались ли стоп-слова из текста при обработке. Сейчас все эти файлы сохраняются в data/results
.
TopicModel
во время обработки текста удаляет пунктуацию, кроме дефисов, также, если активны флаги to_lowercase
и del_stop_words
, то все слова приводятся к нижнему регистру, и удаляются стоп-слова соответственно. Списки стоп-слов лежат в папке data
. Сейчас используется список стоп-слов взятый из voyant для русского языка ru_stopwords_from_voyant.txt
, который вручную расширен. Указать другой файл для стоп-слов можно в методе getStopWords
из utils.cpp
.
В main.cpp
находятся примеры работы с алгоритмом. Предполагается, что в корне проекта расположены папка data
c базами и списком стоп-слов, и папка data/results
для результатов.
Дополнительные параметры для компилятора gcc: -lboost_filesystem -lboost_system -g -ITopicModelingSources -std=c++11
.