Comments 16
Не дает он «достаточно хорошие результаты», это выдача желаемого за действительное. В свое время я работал в паре компаний, которые занимались фильтрацией спама. Он и спам отфильтровать толком не может, но что хуже, количество ложных срабатываний тоже достаточно велико.
В теории все красиво, на практике толку от такого фильтра немного.
Для меня честно говоря, самое интересное, как работают фильтры в GMail. Лучше я не видел, и это явно не наивный байес. Хотя большую часть спама они отсеивают прямо-таки фашистскими методами: чтобы отправить письмо на gmail со своего сервера, надо очень много времени потратить на настройку всяких dkim, dmarc и т.д.
А «наивный Байес» у аналитика должен от зубов отскакивать — это «хелло ворлд» классификации, ну или как в ардуино светодиодами поморгать.
Он не может устареть. Это основы.
Я только про вот этот фрагмент:
test_letter <- str_replace_all(test_letter, "[[:punct:]]", "")
test_letter <- tolower(test_letter)
test_letter <- unlist(strsplit(test_letter, " "))
test_letter <- test_letter[! test_letter %in% stopwords("ru")]
Не секрет, что люди со склонностью к функциональщине могли бы записать так
test_letter <- unlist(strsplit(tolower(str_replace_all(test_letter, "[[:punct:]]", "")), " "))
test_letter <- test_letter[! test_letter %in% stopwords("ru")]
И это не склонность к беспорядку. Такой код у меня получается постоянно, когда (в стиле R) программируешь с данными.
Кстати, последняя строчка не влезла в потенциальный однострочник.
Ведь, нужно две ссылки на test_letter (думаете вы).
Обойдемся.
(просто освоим команду setdiff)
test_letter <- setdiff(unlist(strsplit(tolower(str_replace_all(test_letter, "[[:punct:]]", "")), " ")), stopwords("ru")])
Мда.
Читаемость в последнем варианте, как говорится" оставляет желать.
Если вы планируете и дальше работать в R, настоятельно рекомендую освоить piping.
Не в последнюю очередь моя непреходящая любовь к R поддерживается его адаптивностью.
Я, даже, не говорю здесь о «крутых» библиотеках типа Keros, Tensflow etc. — все, ценное что есть для Python, уже есть и для R (как, впрочем, и наоборот).
На сей пространный комментарий меня подтолкнула сравнительно свежая фича — piping.
Сам освоил сравнительно недавно — до сих пор радует.
Аналогично X-ам теперь результат одного функции можно передавать в другую, используя вместо многократного вложения в скобочки лаконичную нотацию "%>%"
Эта нотация появилась сравнительно недавно — 5-6 лет назад в пакетах magrittr или dplyr, но очень активно используется в пакетах последних лет, например — для обработки изображений, AI, ML.
Код, выполняющий те же функции, что и выше, но теперь с использованием pipe нотации
require(dlypr)
test_letter<-test_letter %>%
str_replace_all("[[:punct:]]", "") %>%
tolower() %>%
strsplit(" ") %>%
unlist() %>%
setdiff(stopwords(«ru»))
Однострочник того же самого будет выглядеть так
test_letter<-test_letter %>% str_replace_all("[[:punct:]]", "") %>% tolower() %>% strsplit(" ") %>% unlist() %>% setdiff(stopwords(«ru»))
Еще, кажется, скобочки в функциях тоже можно не ставить, если передаваемый параметр единственный.
Любите R! :)
К тому же имеется общедоступная книга от авторов пакета: www.tidytextmining.com.
require(dlypr)
тут не ошибка случаем, может dplyr?
хотя честно говоря давно на R ничего не делал, то может отстал от жизни :)
Извиняюсь за опечатку.
Просто этот пакет вместе с другими фундаментальными пакетами за авторством Hadley Wickham во многом определяют лицо современного R и его конкурентоспособность.
Его пакеты ggplot2, plyr/dplyr, reshaper, RStudio — в принципе, «подрастающе поколение» дата саентистов думают, что это и есть R.
Поэтому, кстати, получается, что явно библиотеку dplyr в своем коде почти не приходится вызывать — его подгружают другие частные библиотеки.
Так, что вы уж на меня не серчайте за опечатки в названии пакетов.
В моем коде все они написаны правильно.
Странно подгрузить tm что бы взять оттуда только stopwords в этой задаче. В нем надо было и делать очистку от пунктуации, и от стопслов, и нижний регистр и конвертацию в document-terms-matrix, и все в одну строку кода. Многоэтажные циелы в статье выглядят как: давайте возьмём штурвал вот от той мощной яхты с полыми баками, и приделаем его к плоту который соберем из спичек перемотанных шнурками
выглядят как: давайте возьмём штурвал вот от той
А я, знаете ли, этому уже перестал удивляться.
По моим наблюдениям «этим» уже заполнились первые 3 страницы гугловыдачи.
Я думаю, что следующей задачей текстового поиска будет поиск не «просто ответов», а «оригинальных ответов», потом «полезных ответов» и т.д. по мере того, как серая масса (не путать с «серым веществом» будет делать предыдущий уровень непригодным для жизни.
Ну это примерно как водоемы, в которых селится лещ, становятся непригодны для проживания рыб сиговых пород.
И правда! Кому нужны эти сиги?! Лещ — это вещь!
(if you understand what I am talking about)
Наивный Байес, или о том, как математика позволяет фильтровать спам