So far it works and im happy with it. But i want to add methods to "clear" the data in the database to reset the trained data before import and to clear the data from RemoteManager . I whould like to add it to JDBCBayesianAnalysis. Any problems with that ?
bye Norman Am Freitag, den 01.09.2006, 21:02 +0000 schrieb [EMAIL PROTECTED]: > Author: norman > Date: Fri Sep 1 14:02:51 2006 > New Revision: 439481 > > URL: http://svn.apache.org/viewvc?rev=439481&view=rev > Log: > Add methods to BayesianAnalyterManagment and RemoteManager to import and > export bayesian data. See JAMES-602 > > Modified: > > james/server/trunk/src/java/org/apache/james/management/BayesianAnalyzerManagement.java > > james/server/trunk/src/java/org/apache/james/remotemanager/RemoteManagerHandler.java > > james/server/trunk/src/java/org/apache/james/services/BayesianAnalyzerManagementService.java > > Modified: > james/server/trunk/src/java/org/apache/james/management/BayesianAnalyzerManagement.java > URL: > http://svn.apache.org/viewvc/james/server/trunk/src/java/org/apache/james/management/BayesianAnalyzerManagement.java?rev=439481&r1=439480&r2=439481&view=diff > ============================================================================== > --- > james/server/trunk/src/java/org/apache/james/management/BayesianAnalyzerManagement.java > (original) > +++ > james/server/trunk/src/java/org/apache/james/management/BayesianAnalyzerManagement.java > Fri Sep 1 14:02:51 2006 > @@ -25,10 +25,14 @@ > import java.io.BufferedReader; > import java.io.File; > import java.io.FileNotFoundException; > +import java.io.FileOutputStream; > import java.io.FileReader; > import java.io.IOException; > import java.io.InputStreamReader; > +import java.io.PrintWriter; > import java.sql.SQLException; > +import java.util.HashMap; > +import java.util.Map; > > import net.fortuna.mstor.data.MboxFile; > > @@ -48,6 +52,9 @@ > import org.apache.james.services.BayesianAnalyzerManagementService; > import org.apache.james.util.JDBCBayesianAnalyzer; > > +import com.thoughtworks.xstream.XStream; > +import com.thoughtworks.xstream.io.xml.DomDriver; > + > /** > * Management for BayesianAnalyzer > */ > @@ -61,7 +68,6 @@ > private Context context; > private String sqlFileUrl = "file://conf/sqlResources.xml"; > > - > /** > * @see > org.apache.avalon.framework.service.Serviceable#service(ServiceManager) > */ > @@ -147,16 +153,16 @@ > * @see > org.apache.james.services.BayesianAnalyzerManagementService#addHamFromMbox(String) > */ > public int addHamFromMbox(String file) throws FileNotFoundException, > IllegalArgumentException, IOException, SQLException, > BayesianAnalyzerManagementException { > - if (repos == null) throw new > BayesianAnalyzerManagementException("RepositoryPath not configured"); > - return feedBayesianAnalyzerFromMbox(file,HAM); > + if (repos == null) throw new > BayesianAnalyzerManagementException("RepositoryPath not configured"); > + return feedBayesianAnalyzerFromMbox(file,HAM); > } > > /** > * @see > org.apache.james.services.BayesianAnalyzerManagementService#addSpamFromMbox(String) > */ > public int addSpamFromMbox(String file) throws FileNotFoundException, > IllegalArgumentException, IOException, SQLException, > BayesianAnalyzerManagementException { > - if (repos == null) throw new > BayesianAnalyzerManagementException("RepositoryPath not configured"); > - return feedBayesianAnalyzerFromMbox(file,SPAM); > + if (repos == null) throw new > BayesianAnalyzerManagementException("RepositoryPath not configured"); > + return feedBayesianAnalyzerFromMbox(file,SPAM); > } > > /** > @@ -258,9 +264,93 @@ > return count; > } > > + /** > + * @see > org.apache.james.services.BayesianAnalyzerManagementService#exportData(String) > + */ > + public void exportData(String file) throws IOException, > BayesianAnalyzerManagementException, SQLException { > + if (repos == null) throw new > BayesianAnalyzerManagementException("RepositoryPath not configured"); > + > + synchronized(JDBCBayesianAnalyzer.DATABASE_LOCK) { > + analyzer.loadHamNSpam(component.getConnection()); > + > + int hamMessageCount = analyzer.getHamMessageCount(); > + int spamMessageCount = analyzer.getSpamMessageCount(); > + Map hamTokenCounts = analyzer.getHamTokenCounts(); > + Map spamTokenCounts = analyzer.getSpamTokenCounts(); > + > + XStream xstream = new XStream(new DomDriver()); > + xstream.alias("bayesianAnalyzer", BayesianAnalyzerXml.class); > + PrintWriter printwriter = new PrintWriter(new > FileOutputStream(file)); > + printwriter.println(xstream.toXML(new > BayesianAnalyzerXml(hamMessageCount,spamMessageCount,hamTokenCounts,spamTokenCounts))); > + printwriter.close(); > + } > + } > + > + /** > + * @see > org.apache.james.services.BayesianAnalyzerManagementService#importData(String) > + */ > + public void importData(String file) throws IOException, > BayesianAnalyzerManagementException, SQLException, FileNotFoundException { > + if (repos == null) throw new > BayesianAnalyzerManagementException("RepositoryPath not configured"); > + > + synchronized(JDBCBayesianAnalyzer.DATABASE_LOCK){ > + XStream xstream = new XStream(new DomDriver()); > + > + BayesianAnalyzerXml bAnalyzerXml = (BayesianAnalyzerXml) > xstream.fromXML(new FileReader(file)); > + > + // clear old data > + analyzer.clear(); > + analyzer.tokenCountsClear(); > + > + //TODO: Drop old corpus in database; > + > + // add the new data > + analyzer.setHamMessageCount(bAnalyzerXml.getHamMessageCount()); > + analyzer.setSpamMessageCount(bAnalyzerXml.getSpamMessageCount()); > + analyzer.setHamTokenCounts(bAnalyzerXml.getHamTokenCounts()); > + analyzer.setSpamTokenCounts(bAnalyzerXml.getSpamTokenCounts()); > + analyzer.updateHamTokens(component.getConnection()); > + analyzer.updateSpamTokens(component.getConnection()); > + } > + > + } > + > private JDBCBayesianAnalyzer analyzer = new JDBCBayesianAnalyzer() { > protected void delegatedLog(String logString) { > // no logging > } > }; > + > + /** > + * Inner class to represent the data in an xml file > + */ > + private static class BayesianAnalyzerXml { > + private int hamMessageCount = 0; > + private int spamMessageCount = 0; > + private Map hamTokenCounts = new HashMap(); > + private Map spamTokenCounts = new HashMap(); > + > + public BayesianAnalyzerXml(int hamMessageCount, int > spamMessageCount, Map hamTokenCounts, Map spamTokenCounts) { > + this.hamMessageCount = hamMessageCount; > + this.spamMessageCount = spamMessageCount; > + this.hamTokenCounts = hamTokenCounts; > + this.spamTokenCounts = spamTokenCounts; > + } > + > + public int getHamMessageCount() { > + return hamMessageCount; > + } > + > + public int getSpamMessageCount() { > + return spamMessageCount; > + } > + > + public Map getHamTokenCounts() { > + return hamTokenCounts; > + } > + > + public Map getSpamTokenCounts() { > + return spamTokenCounts; > + } > + > + } > } > > Modified: > james/server/trunk/src/java/org/apache/james/remotemanager/RemoteManagerHandler.java > URL: > http://svn.apache.org/viewvc/james/server/trunk/src/java/org/apache/james/remotemanager/RemoteManagerHandler.java?rev=439481&r1=439480&r2=439481&view=diff > ============================================================================== > --- > james/server/trunk/src/java/org/apache/james/remotemanager/RemoteManagerHandler.java > (original) > +++ > james/server/trunk/src/java/org/apache/james/remotemanager/RemoteManagerHandler.java > Fri Sep 1 14:02:51 2006 > @@ -157,6 +157,10 @@ > */ > private static final String COMMAND_ADDSPAM = "ADDSPAM"; > > + private static final String COMMAND_EXPORTBAYESIANDATA = > "EXPORTBAYESIANDATA"; > + > + private static final String COMMAND_IMPORTBAYESIANDATA = > "IMPORTBAYESIANDATA"; > + > /** > * The text string for the QUIT command > */ > @@ -343,7 +347,11 @@ > } else if (command.equals(COMMAND_ADDHAM)) { > return doADDHAM(argument); > } else if (command.equals(COMMAND_ADDSPAM)) { > - return doADDSPAM(argument); > + return doADDSPAM(argument); > + } else if (command.equals(COMMAND_EXPORTBAYESIANDATA)) { > + return doEXPORTBAYESIANDATA(argument); > + } else if (command.equals(COMMAND_IMPORTBAYESIANDATA)) { > + return doIMPORTBAYESIANDATA(argument); > } else if (command.equals(COMMAND_QUIT)) { > return doQUIT(argument); > } else if (command.equals(COMMAND_SHUTDOWN)) { > @@ -606,6 +614,8 @@ > out.println("deletespool [spoolrepositoryname] ([key]) delete > the mail assign to the given key. If no key is given all mails get deleted"); > out.println("addham dir/mbox [directory/mbox] feed the > BayesianAnalysisFeeder with the content of the directory or mbox file as > HAM"); > out.println("addspam dir/mbox [directory/mbox] feed the > BayesianAnalysisFeeder with the content of the directory or mbox file as > SPAM"); > + out.println("exportbayesiandata [file] export > the BayesianAnalysis data to a xml file"); > + out.println("importbayesiandata [file] import > the BayesianAnalysis data from a xml file"); > out.println("shutdown kills > the current JVM (convenient when James is run as a daemon)"); > out.println("quit close > connection"); > out.flush(); > @@ -1192,6 +1202,92 @@ > if (exception != null) { > getLogger().error("Error on feeding BayesianAnalysis: " + > exception); > out.println("Error on feeding BayesianAnalysis: " + exception); > + out.flush(); > + } > + return true; > + } > + > + > + > + private boolean doEXPORTBAYESIANDATA(String argument) { > + String exception = null; > + > + // check if the command was called correct > + if (argument == null || argument.trim().equals("")) { > + writeLoggedFlushedResponse("Usage: EXPORTBAYESIANALYZERDATA > [dir]"); > + return true; > + } > + > + try { > + > + // stop watchdog cause feeding can take some time > + theWatchdog.stop(); > + > + > theConfigData.getBayesianAnalyzerManagement().exportData(argument); > + out.println("Exported the BayesianAnalysis data"); > + out.flush(); > + > + } catch (SQLException e) { > + exception = e.getMessage(); > + } catch (FileNotFoundException e) { > + exception = e.getMessage(); > + } catch (IllegalArgumentException e) { > + exception = e.getMessage(); > + } catch (IOException e) { > + exception = e.getMessage(); > + } catch (BayesianAnalyzerManagementException e) { > + writeLoggedFlushedResponse("Command disabled. Configure > BayesianAnalyzerMangement to enable it"); > + return true; > + } finally { > + theWatchdog.start(); > + } > + > + // check if any exception was thrown > + if (exception != null) { > + getLogger().error("Error on exporting BayesianAnalysis data: " + > exception); > + out.println("Error on exporting BayesianAnalysis data: " + > exception); > + out.flush(); > + } > + return true; > + } > + > + private boolean doIMPORTBAYESIANDATA(String argument) { > + String exception = null; > + > + // check if the command was called correct > + if (argument == null || argument.trim().equals("")) { > + writeLoggedFlushedResponse("Usage: IMPORTBAYESIANALYZERDATA > [dir]"); > + return true; > + } > + > + try { > + > + // stop watchdog cause feeding can take some time > + theWatchdog.stop(); > + > + > theConfigData.getBayesianAnalyzerManagement().importData(argument); > + out.println("Imported the BayesianAnalysis data"); > + out.flush(); > + > + } catch (SQLException e) { > + exception = e.getMessage(); > + } catch (FileNotFoundException e) { > + exception = e.getMessage(); > + } catch (IllegalArgumentException e) { > + exception = e.getMessage(); > + } catch (IOException e) { > + exception = e.getMessage(); > + } catch (BayesianAnalyzerManagementException e) { > + writeLoggedFlushedResponse("Command disabled. Configure > BayesianAnalyzerMangement to enable it"); > + return true; > + } finally { > + theWatchdog.start(); > + } > + > + // check if any exception was thrown > + if (exception != null) { > + getLogger().error("Error on importing BayesianAnalysis data: " + > exception); > + out.println("Error on imporitng BayesianAnalysis data: " + > exception); > out.flush(); > } > return true; > > Modified: > james/server/trunk/src/java/org/apache/james/services/BayesianAnalyzerManagementService.java > URL: > http://svn.apache.org/viewvc/james/server/trunk/src/java/org/apache/james/services/BayesianAnalyzerManagementService.java?rev=439481&r1=439480&r2=439481&view=diff > ============================================================================== > --- > james/server/trunk/src/java/org/apache/james/services/BayesianAnalyzerManagementService.java > (original) > +++ > james/server/trunk/src/java/org/apache/james/services/BayesianAnalyzerManagementService.java > Fri Sep 1 14:02:51 2006 > @@ -82,4 +82,25 @@ > * @throws BayesianAnalyzerManagementException If the service is not > configured > */ > public int addHamFromMbox(String file) throws FileNotFoundException, > IllegalArgumentException, IOException, SQLException, > BayesianAnalyzerManagementException; > + > + /** > + * Export the data to a xml file > + * > + * @param file The filename to store the data > + * @throws IOException > + * @throws BayesianAnalyzerManagementException If the service is not > configured > + * @throws SQLException > + */ > + public void exportData(String file) throws IOException, > BayesianAnalyzerManagementException, SQLException; > + > + /** > + * Import the data from a xml file > + * > + * @param file The filename to export data from > + * > + * @throws IOException > + * @throws BayesianAnalyzerManagementException IF the service is not > configured > + * @throws SQLException > + */ > + public void importData(String file) throws IOException, > BayesianAnalyzerManagementException, SQLException; > } > > > > --------------------------------------------------------------------- > To unsubscribe, e-mail: [EMAIL PROTECTED] > For additional commands, e-mail: [EMAIL PROTECTED] > > !EXCUBATOR:1,44f8a01745113507111913!
signature.asc
Description: Dies ist ein digital signierter Nachrichtenteil