2010-05-12 4 views
10

У меня есть набор объектов Книги, classs Книга определяется следующим образом:Java проблема текст классификации

Class Book{ 

String title; 
ArrayList<tags> taglist; 

} 

Где название является название книги, например: Javascript для чайников.

и taglist список тегов для нашего примера: Javascript, JQuery, «веб-разработчика», ..

Как я сказал, есть множество книг, говорящих о разных вещах: IT, биологии, истории, ... Каждая книга имеет название и набор тегов, описывающих его ..

я должен классифицировать автоматически эти книги в отдельные наборы по темам, например:

IT BOOKS:

  • Java для чайников
  • Javascript для чайников
  • Узнать флэш через 30 дней
  • C++ программирование

История Книги:

  • Мировой войны
  • Америка в 1960 году
  • жизнь
  • Мартина Лютера Кинга

БИОЛОГИЯ КНИГИ:

  • ....

Знаете ли вы, ребята, алгоритм классификации/метод применить для такого рода проблем?

Решение состоит в том, чтобы использовать внешний API для определения категории текста, но проблема в том, что книги на разных языках: французский, испанский, английский ..

+0

Да, но там некоторые общие теги между книгами: ( – Youssef

+0

Связанный вопрос: http://stackoverflow.com/questions/2781752/naive-bayesian-for-topic-detection-using-bag-of-words-approach/2783356#2783356 – dmcer

+0

nice спасибо (y) – Youssef

ответ

29

Это похоже на достаточно простую задачу классификации на основе ключевых слов. Поскольку вы используете Java, хорошие пакеты для рассмотрения для этого будут Classifier4J, Weka, или Lucene Mahout.

Classifier4J

Classifier4J поддерживает классификацию с использованием naive Bayes и vector space модели.

Как видно из этого source code snippet при обучении и подсчете очков, используя свой наивный классификатор Байеса, пакет достаточно прост в использовании. Он также распространяется под либералом Apache Software License.

Weka

Weka является очень популярным инструментом для интеллектуального анализа данных. Преимущество использования его в том, что вы будете в состоянии легко экспериментировать с использованием многочисленных different machine learning models классифицировать книги на темы, включая naive Bayes, decision trees, support vector machines, k-nearest neighbor, logistic regression, и даже rule set based learner.

Вы найдете руководство по использованию Weka для категоризации текста here.

Weka, однако, распространяется под кодом GPL. Вы не сможете использовать его для программного обеспечения с закрытым исходным кодом, которое вы хотите распространять. Но вы все равно можете использовать его для поддержки веб-службы.

Lucene Mahout

Mahout предназначен для выполнения машинного обучения на очень больших наборов данных. Он построен поверх Apache Hadoop и поддерживает контролируемую классификацию с использованием наивных байесов.

Вы найдете учебное пособие, посвященное использованию Махута для классификации текста here.

Подобно Classifier4J, Mahout распространяется под либералом Apache Software License.

+0

Хороший совет спасибо – Youssef

+0

использовали classfier4j, VectorClassifier работал лучше всего для меня – Indraneel

-1

Вы можете посмотреть fuzzy matching algorithms таких как Soundex и Levenshtein.

+0

Прохладный, это отличный способ рассчитать расстояние между двумя струнами, спасибо – Youssef

+0

Не могли бы вы рассказать о том, как использовать Soundex и Levenshtein для сопоставления списков ключевых слов по темам? – dmcer

0

Итак, вы ищете, чтобы создать карту тегов, в которой хранится коллекция книг?

EDIT:

Похоже, вы могли бы хотеть взглянуть на Vector Space Model применять классификацию категорий.

Либо Lucene, либо Classifier4j предлагает основу для этого.

+0

Я ищу, чтобы создать карту предметов книг, где ключ - это название категории. – Youssef

+0

@yox: Сделайте эту карту. Это ваш ответ. –

+0

Мне не нужны книги по тегам .. Мне нужны книги по теме (ключ карты), которых нет здесь, это будет искусственно созданная строка – Youssef

0

Вам не нужно что-то простое?

Map<Tag, ArrayList<Book>> m = {}; 
for (Book b : books) { 
    for (tag t : b.taglist) { 
     m.get(t).add(b); 
    } 
} 

Теперь m.get("IT") будет возвращать все ИТ книги, и т.д ...

Конечно некоторые книги будут появляться в нескольких категориях, но это происходит в реальной жизни тоже ...

+0

Нет, теги - это если вы хотите, чтобы список значимых слов в книге ... это поможет сгруппировать книги. – Youssef

+0

@yox: ах, поэтому вы хотите классифицировать тему на основе набора тегов, которые есть в книге? или на основе текста книги? и текст тегов/книг может быть на разных языках? – Claudiu

+0

exaclty, я хочу классифицировать, используя только теги и теги на разных языках. – Youssef