2010-05-12 6 views
10

J'ai un ensemble d'objets Livres, Classs livre est défini comme suit:problème de classification Java texte

Class Book{ 

String title; 
ArrayList<tags> taglist; 

} 

titre est le titre du livre, par exemple: Javascript pour les nuls.

et taglist est une liste de balises pour notre exemple: Javascript, JQuery, "dev web", ..

Comme je l'ai dit avoir un ensemble de livres parler de choses différentes: IT, BIOLOGIE, HISTOIRE, ... Chaque livre a un titre et un ensemble de balises décrivant ..

Je dois classer ces livres dans automaticaly ensembles séparés par sujet, par exemple:

LIVRES IT:

  • Java pour les nuls
  • Javascript pour les nuls
  • Apprendre Flash en 30 jours
  • C++ programmation

HISTOIRE LIVRES:

  • guerres mondiales
  • Amérique en 1960
  • Martin luther vie du roi

BIOLOGIE LIVRES:

  • ....

-vous les gars savent un algorithme de classification/méthode à appliquer pour ce genre de problèmes?

Une solution est d'utiliser une API externe pour définir la catégorie du texte, mais le problème ici est que les livres sont en différentes langues: français, espagnol, anglais ..

+0

Oui, mais il sont quelques balises communes entre les livres: ( – Youssef

+0

Question connexe: http://stackoverflow.com/questions/2781752/naive-bayesian-pour-les-detection-detection-du-copie-des-approches/2783356#2783356 – dmcer

+0

nice merci (y) – Youssef

Répondre

29

Cela ressemble à une tâche de classification raisonnablement simple basée sur un mot clé. Puisque vous utilisez Java, les bons paquets à prendre en compte sont Classifier4J, Weka ou Lucene Mahout.

Classifier4J

Classifier4J prend en charge la classification en utilisant naive Bayes et un modèle vector space.

Comme vu dans ce source code snippet sur l'entraînement et la notation en utilisant son classificateur bayésien naïf, le paquet est raisonnablement facile à utiliser. Il est également distribué sous le libéral Apache Software License.

Weka

Weka est un outil très populaire pour l'exploration de données. Un avantage de l'utiliser est que vous seriez en mesure d'expérimenter facilement en utilisant de nombreux different machine learning models pour classer les livres en catégories dont naive Bayes, decision trees, support vector machines, k-nearest neighbor, , et même rule set based learner.

Vous trouverez un didacticiel sur l'utilisation de Weka pour la catégorisation de texte here. Cependant, Weka est distribué sous la référence GPL. Vous ne pourrez pas l'utiliser pour les logiciels à source fermée que vous souhaitez distribuer. Mais, vous pouvez toujours l'utiliser pour sauvegarder un service Web.

Lucene Mahout

Mahout est conçu pour faire l'apprentissage automatique sur des jeux de données très volumineux. Il est construit au-dessus de Apache Hadoop et prend en charge la classification supervisée en utilisant Bayes naïf.

Vous trouverez un tutoriel sur l'utilisation de Mahout pour la classification de texte here. Comme Classifier4J, Mahout est distribué sous le Apache Software License libéral.

+0

Bon indice merci – Youssef

+0

utilisé classfier4j, VectorClassifier a travaillé le meilleur pour moi – Indraneel

-1

Vous pouvez consulter fuzzy matching algorithms tels que Soundex et Levenshtein.

+0

Cool, c'est un excellent moyen de calculer la distance entre 2 chaînes, merci – Youssef

+0

Pourriez-vous nous expliquer comment utiliser Soundex et Levenshtein pour mapper des listes de mots-clés sur des sujets? – dmcer

0

Alors vous cherchez à faire une carte d'étiquettes contenant une collection de livres?

EDIT:

On dirait que vous voudrez peut-être jeter un oeil à un Vector Space Model d'appliquer la classification des catégories.

Lucene ou Classifier4j offrent un cadre pour cela.

+0

Je cherche à faire une carte d'objets livres où la clé est le nom de la catégorie. – Youssef

+0

@yox: Crée cette carte. C'est ta réponse. –

+0

Je ne veux pas de livres par étiquette .. Je veux des livres par sujet (la clé de la carte) qui n'est pas présent ici, ce sera une chaîne générée artificiellement – Youssef

0

Vous ne voulez pas quelque chose d'aussi simple que cela?

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

Maintenant m.get("IT") retournera tous les livres informatiques, etc ...

Bien sûr, certains livres apparaissent dans plusieurs catégories, mais ce qui se passe dans la vraie vie aussi ...

+0

Non, les étiquettes est si vous voulez une liste de mots significatifs dans le livre .. il aidera pour le regroupement de livres. – Youssef

+0

@yox: ah donc vous voulez classer le sujet en fonction de l'ensemble des tags du livre? ou basé sur le texte du livre? et les étiquettes/livre livre peuvent être dans différentes langues? – Claudiu

+0

exaclty, je veux classifier en utilisant seulement des étiquettes et les étiquettes sont dans des langues différentes. – Youssef

Questions connexes