У меня есть набор объектов Books, классы Книга определяется следующим образом:
Class Book{
String title;
ArrayList<tags> taglist;
}
Где title - название книги, например: Javascript для макетов.
и taglist - это список тегов для нашего примера: Javascript, jquery, "web dev",..
Как я уже сказал, есть множество книг, рассказывающих о разных вещах: ИТ, БИОЛОГИЯ, ИСТОРИЯ,...
Каждая книга имеет название и набор тегов, описывающих ее.
Мне приходится классифицировать автоматически эти книги в отдельные наборы по темам, например:
ЭТО КНИГИ:
- Java для чайников
- Javascript для макетов
- Узнать flash за 30 дней
- Программирование на С++
ИСТОРИЧЕСКИЕ КНИГИ:
- Мировые войны
- Америка в 1960 году
- Жизнь короля Мартина Лютера
БИОЛОГИЧЕСКИЕ КНИГИ:
Вы, ребята, знаете алгоритм/метод классификации для применения к таким проблемам?
Решение состоит в том, чтобы использовать внешний API для определения категории текста, но проблема в том, что книги находятся на разных языках: французский, испанский, английский.
Ответ 1
Это выглядит как довольно простая задача классификации на основе ключевых слов. Поскольку вы используете Java, хорошие пакеты для рассмотрения будут Classifier4J, Weka, или Lucene Mahout,
Classifier4J
Classifier4J поддерживает классификацию с использованием наивных байесов и векторное пространство.
Как показано в этом фрагменте кода при обучении и подсчете с использованием его наивного классификатора Байеса, пакет разумно легко использовать. Он также распространяется под лицензией Apache Software License.
Weka
Weka - очень популярный инструмент для интеллектуального анализа данных. Преимущество использования этого заключается в том, что вы сможете легко экспериментировать с использованием многочисленных различных моделей машинного обучения, чтобы классифицировать книги по темам, включая наивный Байес, деревья решений, поддерживающие векторные машины, k-ближайший сосед, логистическая регрессия и даже установленный на основе набора правил.
Вы найдете руководство по использованию Weka для категоризации текста здесь.
Weka, однако, распространяется под GPL. Вы не сможете использовать его для программного обеспечения с закрытым исходным кодом, которое вы хотите распространять. Но вы все равно можете использовать его для поддержки веб-службы.
Lucene Mahout
Mahout предназначен для машинного обучения на очень больших наборах данных. Он построен поверх Apache Hadoop и поддерживает контролируемую классификацию с использованием наивных байесов.
Вы найдете учебное пособие, посвященное использованию Mahout для классификации текста здесь.
Подобно Classifier4J, Mahout распространяется под лицензией Apache Software License.
Ответ 2
Итак, вы хотите создать карту тегов, в которой содержится коллекция книг?
EDIT:
Похоже, вы можете взглянуть на Vector Space Model, чтобы применить классификацию категории.
Либо Lucene или Classifier4j предлагают основу для этого.
Ответ 3
Вам не нужно что-то простое?
Map<Tag, ArrayList<Book>> m = {};
for (Book b : books) {
for (tag t : b.taglist) {
m.get(t).add(b);
}
}
Теперь m.get("IT")
вернет все ИТ-книги и т.д.
Конечно, некоторые книги появятся в нескольких категориях, но это происходит и в реальной жизни...
Ответ 4
Возможно, вам захочется найти алгоритмы нечеткого сопоставления, такие как Soundex и Levenshtein.