Формат файла Python для классификации электронной почты с помощью svm-light

Я работаю с темой электронного письма, поэтому у меня есть 20 писем, которые я хочу классифицировать, и файл с 20 строками - одна строка имеет одну тему письма. Я работал над этим, но не могу понять, к чему относятся эти функции и формат входного файла для svmlight. Любые советы по дальнейшим действиям будут полезны. Заранее спасибо!

Изменить: я взял tf-idf из первых 500 строк темы в качестве пробного. Однако по формату svm-light нам понадобятся:

<line> .=. <target> <feature>:<value> <feature>:<value> ... <feature>:<value> # <info>

У меня есть только tf-idf на 500 строк. К сожалению, svm-light не читает это, так как ему нужна пара «характеристики / значение». Есть идеи о том, какое значение может быть или как я могу изменить файл, чтобы его можно было прочитать?

Представление о файле, который у меня есть (первые 5 функций электронной почты):

1 201 1.0
2 280 0.123165672613
2 313 0.343915400191
2 515 0.157569797284
2 588 0.343915400191
2 652 0.343915400191
2 657 0.343915400191
2 774 0.23622904941
2 921 0.283118375032
2 1158 0.254849368195
2 1240 0.343915400191
2 1348 0.343915400191
2 1362 0.222321349873
3 57 0.342220321154
3 185 0.391349077827
3 244 0.391349077827
3 300 0.391349077827
3 693 0.391349077827
3 730 0.342220321154
3 1391 0.391349077827
4 57 0.342220321154
4 185 0.391349077827
4 244 0.391349077827
4 300 0.391349077827
4 693 0.391349077827
4 730 0.342220321154
4 1391 0.391349077827
5 32 0.323558487577
5 102 0.323558487577
5 157 0.364177022553
5 160 0.364177022553
5 718 0.151013895297
5 1171 0.364177022553
5 1277 0.323558487577
5 1308 0.364177022553
5 1336 0.364177022553

Пожалуйста помоги!


person student001    schedule 27.12.2013    source источник
comment
Что вы просите? Вы пытаетесь автоматически создавать строки темы для сообщений электронной почты? Вы пытаетесь сопоставить электронные письма со строками из этих писем? Приведите пример ввода и вывода и продемонстрируйте, что вы немного разбираетесь в Python.   -  person dg99    schedule 28.12.2013
comment
Я использовал библиотеку nltk для создания tf-idf строк темы. У меня есть 1000 писем, тематика которых я использую, и я разбил их на категории. В настоящее время я хочу использовать эти 1000 строк темы для обучения классификатора, но не знаю, как действовать дальше. Спасибо за любую помощь!   -  person student001    schedule 28.12.2013


Ответы (1)


Если вы делаете особенность из каждого слова, создайте список всех уникальных слов w (1) .. w (n). Теперь feature (i) получает значение 1, если w (i) существует в исследуемой вами выборке. (Вы также можете сделать значение равным количеству вхождений, чтобы функция, которая встречается несколько раз, получила больший вес.)

Предполагая следующие образцы:

1 My hovercraft is full of eels
2 Your account is suspended
3 This is it!

... вы можете извлечь следующий словарь;

001 My
002 hovercraft
003 is
 :
 :
009 suspended
010 This
011 it!

(Начальные нули предназначены только для того, чтобы элементы выглядели иначе, чем другие числа в этом описании. Обычно, вероятно, не должно быть никаких ведущих нулей.)

Характеристики для образца 1 - от 001 до 006; для образца 3 это 010, 003 и 011. Остальным функциям присваивается значение 0. Таким образом, полное представление образца 3 будет выглядеть как

3 001:0 002:0 003:1 004:0 005:0 ...

(хотя я не думаю, что вам нужно указывать нулевые, т.е. отсутствующие, функции).

Однако, учитывая небольшой размер выборки (только испытуемые), вряд ли вы получите очень хорошие результаты. Возможно, вам лучше использовать, например, функции биграммы или триграммы (разделите каждое слово с помощью скользящего окна; tri, rig, igr, gra, < em> баран).

Я не думаю, что имеет смысл смешивать tf-idf с SVM, это разные подходы к одной и той же фундаментальной проблеме.

person tripleee    schedule 27.12.2013
comment
Привет. Я увеличил размер выборки, так что в настоящее время у меня есть 1000 тем писем и их категорий. Я подумал взять tf-idf из слов и использовать его дальше. Звучит правильно? Спасибо за вашу помощь! - person student001; 28.12.2013
comment
Лучше, но все же мало, если вы ограничиваетесь только строкой «Тема». Почему вы игнорируете остальную часть сообщения? Как вы планируете справиться с пустой темой? - person tripleee; 28.12.2013
comment
В настоящее время я занимаюсь определением тем, поэтому пока использую только темы. Пустые строки темы помещены в категорию «Разное». Итак, просто для подтверждения, tf-idf строк темы будет принят в качестве ввода? Я делаю это впервые, поэтому хочу подтвердить. - person student001; 28.12.2013
comment
Привет, как уже упоминалось, я взял особенности tf-idf каждой темы. Однако я не знаю, что такое «значение» во входном формате, из-за чего он не читает мой файл. Есть идеи по этому поводу? Любая помощь будет очень высоко ценится! - person student001; 22.01.2014
comment
Немного обновил ответ. Маловероятно, что вы заставите новых людей взглянуть на это, прокомментировав старый ответ; возможно, попробуйте задать более конкретный новый вопрос, если вы все еще чувствуете себя застрявшим. - person tripleee; 22.01.2014
comment
Да конечно. Большое спасибо! Я кое-что понял :) - person student001; 22.01.2014