2010-05-12 9 views
10

Ich habe eine Reihe von Büchern Objekten, classs Buch wie folgt definiert ist:Java Textklassifikation Problem

Class Book{ 

String title; 
ArrayList<tags> taglist; 

} 

Wo Titel den Titel des Buchs ist, Beispiel: Javascript für Dummies.

und taglist ist eine Liste von Tags für unser Beispiel: Javascript, jQuery, "Web-Entwickler", ..

Wie gesagt ein eine Reihe von Büchern haben sprechen über verschiedene Dinge: IT, Biologie, Geschichte, ... Jedes Buch hat einen Titel und eine Reihe von Tags beschreiben, es ..

ich automaticaly diese Bücher in voneinander getrennten Gruppen thematisch zu klassifizieren haben, Beispiel:

es Bücher:

  • Java für Dummies
  • Javascript für Dummies
  • Erfahren Sie in 30 Tagen blinken
  • C++ Programmierung

Geschichtsbücher:

  • Weltkriege
  • Amerika im Jahr 1960
  • Martin Lebens Luther King

BIOLOGIE BOOKS:

  • ....

Sie weiß, dass ihr ein Klassifikationsalgorithmus/Methode für diese Art von Problemen zu bewerben?

Eine Lösung ist eine externe API zu verwenden, um die Kategorie des Textes zu definieren, aber das Problem hier ist, dass Bücher in verschiedenen Sprachen sind: Französisch, Spanisch, Englisch ..

+0

Ja, aber es sind einige häufige Tags zwischen den Büchern :( – Youssef

+0

Verwandte Frage: http://stackoverflow.com/questions/2781752/naive-bayesian-for-topic-detection-using-bag-of-words-approach/2783356#2783356 – dmcer

+0

nett Danke (y) – Youssef

Antwort

29

Dies sieht wie eine ziemlich einfache keyword-basierte Klassifizierungsaufgabe aus. Da Sie Java verwenden, wären dafür geeignete Pakete Classifier4J, Weka oder Lucene Mahout.

Classifier4J

Classifier4J unterstützt Klassifizierung naive Bayes und vector space Modell.

Wie in diesem source code snippet auf Training und Scoring mit seinem naiven Bayes-Klassifikator gesehen, ist das Paket relativ einfach zu bedienen. Es ist auch unter dem liberalen Apache Software License verteilt.

Weka

Weka ist ein sehr beliebtes Werkzeug für Data Mining. Ein Vorteil der Verwendung ist, dass Sie in der Lage sein, mit zahlreichen different machine learning models zu experimentieren, um die Bücher in Themen wie naive Bayes, , k-nearest neighbor, , und sogar eine rule set based learner zu kategorisieren.

Sie finden eine Anleitung zur Verwendung von Weka zur Textkategorisierung here.

Weka ist jedoch unter der GPL vertrieben. Sie können es nicht für Closed-Source-Software verwenden, die Sie verteilen möchten. Aber Sie können es immer noch verwenden, um einen Webdienst zu sichern.

Lucene Mahout

Mahout ist dafür Maschine entwickelt, um sehr große Datenmengen Lernen auf. Es ist auf Apache Hadoop gebaut und unterstützt die überwachte Klassifizierung mit naiven Bayes.

Sie finden eine Anleitung zur Verwendung von Mahout für die Textklassifikation here.

Wie Classifier4J wird Mahout unter dem liberalen Apache Software License vertrieben.

+0

Guten Tipp danke – Youssef

+0

verwendet classfier4j, VectorClassifier arbeitete das beste für mich – Indraneel

-1

Vielleicht möchten fuzzy matching algorithms nachschlagen Soundex und Levenshtein.

+0

Cool, das ist ein guter Weg, um die Entfernung zwischen 2 Strings zu berechnen, danke – Youssef

+0

Könnten Sie näher erläutern, wie Sie Soundex und Levenshtein verwenden würden, um Listen mit Schlüsselwörtern zu Themen zuzuordnen? – dmcer

0

Sie suchen also nach einer Karte mit Tags, die eine Sammlung von Büchern enthält?

EDIT:

Klingt wie Sie einen Blick auf ein Vector Space Model nehmen möchten Klassifizierung der Kategorien anzuwenden.

Entweder Lucene oder Classifier4j bieten einen Rahmen dafür.

+0

Ich bin auf der Suche nach einer Karte von Bücher Objekte, wo der Schlüssel ist der Name der Kategorie. – Youssef

+0

@yox: Machen Sie diese Karte. Das ist deine Antwort. –

+0

Ich will keine Bücher nach Tag .. Ich möchte Bücher nach Thema (der Kartenschlüssel), die hier nicht vorhanden ist, wird es eine künstlich erzeugte Zeichenfolge – Youssef

0

Wollen Sie nicht etwas so Einfaches wie dieses?

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

Jetzt m.get("IT") werden alle IT-Bücher zurückgeben, etc ...

sicher einige Bücher in mehreren Kategorien erscheinen wird, aber das passiert im wirklichen Leben auch ...

+0

Nein, Tags ist, wenn Sie eine Liste von signifikanten Wörtern in dem Buch wollen .. wird es für die Gruppierung von Büchern helfen. – Youssef

+0

@yox: ah, also möchtest du das Thema basierend auf der Menge der Tags klassifizieren, die das Buch hat? oder basierend auf dem Buchtext? und die Tags/Buchtext kann in verschiedenen Sprachen sein? – Claudiu

+0

exaclty, ich möchte klassifizieren nur mit Tags und die Tags sind in verschiedenen Sprachen. – Youssef