⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 natural-selection-0.3.diff

📁 使用具有增量学习的监控式学习方法。包括几个不同的分类算法。
💻 DIFF
📖 第 1 页 / 共 3 页
字号:
+	  for (text = ba->data, end = text + ba->len; text < end; text++)+	  if (!isspace ((unsigned char)*text))+	  break;++	  if (text >= end)+	  g_byte_array_free (ba, TRUE);+	  return NULL;+	*/+	return ba;+}++static gboolean+my_add_part (CamelMimeMessage *msg, CamelMimePart *part, void *data)+{+	CamelContentType *cct;+	CamelDataWrapper *cdw;+	GByteArray *ba;+	int len;++	cct = camel_mime_part_get_content_type (part);+	if (header_content_type_is (cct, "text", "plain")) {+		cdw = camel_medium_get_content_object (CAMEL_MEDIUM (part));+		ba = my_get_data_wrapper_text (cdw);+		if (ba) {+			if (ba->len > 10000)+				len = 10000;+			else+				len = ba->len;+			protocol_c_part (pdata, "text", "UTF-8",+					 (char *)ba->data, len);+		}+		g_byte_array_free (ba, FALSE);+	}++	return TRUE;+}++static int+my_open_message (CamelMimeMessage *msg)+{+	const char *text;+	int len;+	const CamelInternetAddress *iaddr;++	protocol_c_open (pdata);++	camel_mime_message_foreach_part (msg, my_add_part, pdata);++	text = camel_mime_message_get_subject (msg);+	len = strlen (text);+	if (len)+		protocol_c_part (pdata, "subject", "UTF-8", text, len);++	iaddr = camel_mime_message_get_from (msg);+	if (camel_internet_address_get (iaddr, 0, &text, NULL)) {+		len = strlen (text);+		if (len)+			protocol_c_part (pdata, "from", "UTF-8", text, len);+	}++	return 0;+}++int+select_initialize (void)+{+	pdata = protocol_c_new (15000, NULL);+	if (!pdata)+		return -1;++	htab = g_hash_table_new (g_direct_hash, g_direct_equal);+	folders = g_ptr_array_new ();++	return 0;+}++void+select_classify (CamelMimeMessage *message, SelectBar *sb)+{+	int *il;++	if (!pdata)+		return;++	if (!my_open_message (message)) {+		il = protocol_c_classify_rank (pdata, "0");+		protocol_c_close (pdata);+	} else+		il = NULL;++	if (il) {+		int i;++		if (il[0] == -1)+			i = 0;+		else if (il[1] == -1)+			i = 1;+		else if (il[2] == -1)+			i = 2;+		else+			i = 3;++		if (i > 0 && folders->len > 0)+			select_bar_set_button (sb, 0,+					       g_ptr_array_index (folders,+								  il[0]));+		else+			select_bar_set_button (sb, 0, NULL);+		if (i > 1 && folders->len > 1)+			select_bar_set_button (sb, 1,+					       g_ptr_array_index (folders,+								  il[1]));+		else+			select_bar_set_button (sb, 1, NULL);+		if (i > 2 && folders->len > 2)+			select_bar_set_button (sb, 2,+					       g_ptr_array_index (folders,+								  il[2]));+		else+			select_bar_set_button (sb, 2, NULL);++		free (il);+	} else {+		select_bar_set_button (sb, 0, NULL);+		select_bar_set_button (sb, 1, NULL);+		select_bar_set_button (sb, 2, NULL);+	}++	select_bar_update (sb);+}++void+select_learn (CamelMimeMessage *message, CamelFolder *folder)+{+	int box, *boxp;++	if (!pdata) {	/* FIXME should initialize earlier */+		CamelStore *cs;+		int i;++		if (select_initialize ())+			return;++		protocol_c_open (pdata);+		i = protocol_c_get_integer (pdata, "nof");+		protocol_c_close (pdata);+		if (i < 1) {+			cs = camel_folder_get_parent_store (folder);+			select_learn_store (cs);+			camel_object_unref (CAMEL_OBJECT (cs));+		}+		return;+	}++	boxp = (int *)g_hash_table_lookup (htab, folder);+	if (!boxp) {+		boxp = (int *)g_malloc (sizeof(int));+		*boxp = folders->len;+		camel_object_ref (CAMEL_OBJECT (folder));+		g_hash_table_insert (htab, folder, boxp);+		g_ptr_array_add (folders, folder);+	}+	box = *boxp;++	if (my_open_message (message))+		return;++	if (protocol_c_learn (pdata, box))+		return;++	protocol_c_close (pdata);+}++static void+my_learn_folder (CamelFolder *folder)+{+	GPtrArray *gpa;+	int i;+	const char *sname;++	/* FIXME not nice */+	sname = camel_folder_get_name (folder);+	if (!strcmp (sname, "Inbox") || !strcmp (sname, "Outbox") ||+	    !strcmp (sname, "Drafts"))+		return;++	gpa = camel_folder_get_uids (folder);+	for (i = 0; i < gpa->len && i < 50; i++) {+		CamelMimeMessage *message;++		message = camel_folder_get_message (folder,+						    g_ptr_array_index (gpa, i),+						    NULL);+		select_learn (message, folder);+		camel_object_unref (CAMEL_OBJECT (message));+	}+	g_ptr_array_free (gpa, FALSE);+}++void+select_learn_store (CamelStore *store)+{+	GPtrArray *gpa;+	int i;++	//CAMEL_STORE_LOCK (store, cache_lock);++	//void *camel_object_bag_get(CamelObjectBag *bag, const char *key);+	gpa = camel_object_bag_list(store->folders);+	for (i = 0; i < gpa->len; i++)+		my_learn_folder (g_ptr_array_index (gpa, i));+	g_ptr_array_free (gpa, FALSE);++	//CAMEL_STORE_UNLOCK (store, cache_lock);+}--- mail/select.h.orig	1970-01-01 01:00:00.000000000 +0100+++ mail/select.h	2003-02-13 17:32:12.000000000 +0100@@ -0,0 +1,20 @@+#ifndef SELECT_H+#define SELECT_H++#include "camel/camel-folder.h"+#include "camel/camel-mime-message.h"+#include "select-bar.h"++int+select_initialize (void);++void+select_learn (CamelMimeMessage *message, CamelFolder *folder);++void+select_classify (CamelMimeMessage *message, SelectBar *sb);++void+select_learn_store (CamelStore *store);++#endif--- mail/select-bar.c.orig	1970-01-01 01:00:00.000000000 +0100+++ mail/select-bar.c	2003-02-13 17:32:12.000000000 +0100@@ -0,0 +1,158 @@+/*+ * Copyright 2000,2001 Ximian, Inc. (www.ximian.com)+ *+ * This program is free software; you can redistribute it and/or+ * modify it under the terms of version 2 of the GNU General Public+ * License as published by the Free Software Foundation.+ *+ * This program is distributed in the hope that it will be useful,+ * but WITHOUT ANY WARRANTY; without even the implied warranty of+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the+ * GNU General Public License for more details.+ *+ * You should have received a copy of the GNU General Public License+ * along with this program; if not, write to the Free Software+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307+ * USA+ */++/**+ * @file+ * Classification select bar.+ *+ * @author  Mikael Ylikoski+ * @date    2002+ */++#include <gtk/gtk.h>+#include <gal/util/e-util.h>+#include <string.h>+#include "camel/camel-folder.h"+#include "camel/camel-store.h"	/* FIXME Should be included in mail-ops.h */+#include "mail-types.h"+#include "mail-ops.h"+#include "folder-browser.h"+#include "select-bar.h"++#define PARENT_TYPE (gtk_hbox_get_type ())++static GtkObjectClass *select_bar_parent_class;+++static void+select_bar_init (GtkObject *object)+{+	int i;+	SelectBar *select_bar = SELECT_BAR (object);++	for (i = 0; i < 3; i++) {+		select_bar->buttons[i] = NULL;+		select_bar->folders[i] = NULL;+	}+}++static void+select_bar_destroy (GtkObject *object)+{+	int i;+	SelectBar *sb = SELECT_BAR (object);++	for (i = 0; i < 3; i++) {+		if (sb->buttons[i])+			gtk_widget_destroy (sb->buttons[i]);+		if (sb->folders[i])+			camel_object_unref (CAMEL_OBJECT (sb->folders[i]));;+	}+	gtk_widget_destroy (sb->label);+	g_object_unref (GTK_OBJECT (sb->fb));+	select_bar_parent_class->destroy (object);+}++static void+select_bar_class_init (GtkObjectClass *object_class)+{+	object_class->destroy = select_bar_destroy;+	select_bar_parent_class = gtk_type_class (PARENT_TYPE);+}++GtkWidget *+select_bar_new (FolderBrowser *fb)+{+	SelectBar *select_bar;++	select_bar = g_object_new (select_bar_get_type (), NULL);+	g_object_ref (GTK_OBJECT (fb));+	select_bar->fb = fb;+	gtk_box_set_homogeneous (GTK_BOX (select_bar), FALSE);+	select_bar->label = gtk_label_new (_("Move to Folder"));+	gtk_widget_show (select_bar->label);+	gtk_box_pack_start (GTK_BOX (select_bar), select_bar->label,+			    FALSE, FALSE, 5);++	return GTK_WIDGET (select_bar);+}++void+select_bar_set_button (SelectBar *sb, int button, CamelFolder *folder)+{+	if (sb->folders[button])+		camel_object_unref (CAMEL_OBJECT (sb->folders[button]));+	camel_object_ref (CAMEL_OBJECT (folder));+	sb->folders[button] = folder;+}++static void+select_cb (GtkWidget *widget, SelectBar *sb)+{+	int i;+	char* uri;+	GPtrArray *uids;++	for (i = 0; i < 3; i++)+		if (widget == sb->buttons[i])+			break;+	if (i == 3)+		return;++	uri = malloc ((strlen (sb->folders[i]->full_name) + 9) * sizeof(char));+	strcpy (uri, "file:///");+	strcat (uri, sb->folders[i]->full_name);++	uids = g_ptr_array_new ();+	g_ptr_array_add (uids, sb->fb->loaded_uid);+	mail_transfer_messages (sb->fb->folder, uids, TRUE, uri, 0,+				NULL, NULL);+	//g_ptr_array_free (uids, FALSE);+	free (uri);+}++int+select_bar_update (SelectBar *sb)+{+	const char *label;+	int i;++	for (i = 0; i < 3; i++) {+		if (sb->buttons[i])+			gtk_widget_destroy (sb->buttons[i]);+		if (!sb->folders[i])+			continue;+		label = camel_folder_get_name (sb->folders[i]);+		/* FIXME shorten label if too long */+		sb->buttons[i] = gtk_button_new_with_label (label);+		gtk_widget_show (sb->buttons[i]);+		gtk_box_pack_start (GTK_BOX (sb), sb->buttons[i],+				    FALSE, FALSE, 5);+		g_signal_connect (GTK_OBJECT (sb->buttons[i]), "clicked",+				  GTK_SIGNAL_FUNC (select_cb), sb);+        }+	if (!sb->folders[0])+		gtk_widget_hide (GTK_WIDGET (sb));+	else+		gtk_widget_show (GTK_WIDGET (sb));++	return 0;+}++E_MAKE_TYPE (select_bar, "SelectBar", SelectBar, select_bar_class_init,+	     select_bar_init, PARENT_TYPE);--- mail/select-bar.h.orig	1970-01-01 01:00:00.000000000 +0100+++ mail/select-bar.h	2003-02-13 17:32:12.000000000 +0100@@ -0,0 +1,39 @@+#ifndef SELECT_BAR_H+#define SELECT_BAR_H++#include <gtk/gtkbutton.h>+#include <gtk/gtkhbox.h>+#include <gtk/gtklabel.h>++#include "camel/camel-folder.h"+#include "mail-types.h"++#define SELECT_BAR_TYPE        (select_bar_get_type ())+#define SELECT_BAR(o)          (G_TYPE_CHECK_INSTANCE_CAST ((o), SELECT_BAR_TYPE, SelectBar))+#define SELECT_BAR_CLASS(k)    (G_TYPE_CHECK_CLASS_CAST((k), SELECT_BAR_TYPE, SelectBarClass))+#define IS_SELECT_BAR(o)       (G_TYPE_CHECK_INSTANCE_TYPE ((o), SELECT_BAR_TYPE))+#define IS_SELECT_BAR_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE ((k), SELECT_BAR_TYPE))++struct _SelectBar {+	GtkHBox parent;+	GtkWidget *label;+	GtkWidget *buttons[3];+	CamelFolder *folders[3];+	FolderBrowser *fb;+};++typedef struct {+	GtkHBoxClass parent_class;+} SelectBarClass;++GtkType        select_bar_get_type      (void);++GtkWidget     *select_bar_new           (FolderBrowser *fb);++void           select_bar_set_button    (SelectBar *sb,+					 int button,+					 CamelFolder *folder);++int            select_bar_update        (SelectBar *sb);++#endif

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -