Как классифицировать и табулировать ответы в свободной форме на вопрос в опросе?
Я хочу проанализировать ответы на веб-опрос ( Git User's Survey 2008, если кому-то интересно). Некоторые из вопросов были в свободной форме, например, "Как вы узнали о Git?". С более чем 3000 ответов, анализ этих ответов полностью вручную исключен (особенно из-за того, что в этом обзоре довольно много вопросов в свободной форме).
Как я могу сгруппировать эти ответы (возможно, на основе ключевых слов, использованных в ответе) по категориям, по крайней мере, полуавтоматически (т. Е. Программа может запросить подтверждение), и позже, как табулировать (подсчитать количество записей в каждой категории) эти свободные Форма ответов (ответов)? Один ответ может принадлежать более чем одной категории, хотя для простоты можно предположить, что категории являются ортогональными / исключающими.
Я хотел бы знать, по крайней мере, ключевое слово для поиска или алгоритм (метод) для использования. Я бы предпочел решения в Perl (или C).
Возможное решение № 1. (частичное): байесовская категоризация
(добавлено 2009-05-21)
Одним из решений, о котором я подумал, было бы использование чего-то вроде алгоритма (и математического метода) для фильтрации байесовского спама, только вместо одной или двух категорий ("спам" и "ветчина") их было бы больше; и сами категории будут создаваться адаптивно / интерактивно.
4 ответа
Текст::Ngrams + Алгоритм:: Кластер
- Сгенерируйте некоторое векторное представление для каждого ответа (например, количество слов), используя Text:: Ngrams.
- Сгруппируйте векторы, используя Algorithm::Cluster, чтобы определить группировки, а также ключевые слова, которые соответствуют группам.
Вам это не понравится. Но: если вы проводите опрос и включаете много вопросов произвольной формы, лучше подготовиться к их классификации вручную. Если об этом не может быть и речи, почему у вас возникли эти вопросы?
В прошлом я перебирал такие грубые вещи с довольно большими корпусами. Lingua::EN::Tagger, Lingua::Stem::En. Кроме того, API Net:: Calais (к сожалению, поскольку Thomposon Reuters не совсем подходит для работы с открытым исходным кодом) довольно полезен для извлечения именованных объектов из текста. Конечно, как только вы очистите необработанные данные с помощью этого материала, фактическое извлечение данных остается за вами. Я был бы склонен подозревать, что для ваших потребностей будет достаточно подсчетов частоты и небольшой механической перекрестной проверки турок.
Ищите обычные слова в качестве ключевых слов, но пропускайте бессмысленные слова, такие как "the", "a" и т. Д. После этого вы попадаете на естественный язык, который мне недоступен.
Меня только что осенило, что идеальным решением для этого является AAI (искусственный искусственный интеллект). Используйте механический турок Амазонки. Привязки Perl: Net:: Amazon:: MechanicalTurk. По одному центу за ответ с приличным совпадением (скажем, три человека за ответ), что составит около 90 долларов США.