Есть ли способ определить, добавляются ли ненужные символы в строки, чтобы обойти обнаружение спама?

Я создаю простой классификатор спама, и, бегло взглянув на мой набор данных, большинство спамов помещают пробелы между «спамными» словами, что, как я полагаю, предназначено для того, чтобы они обходили классификатор спама. Вот несколько примеров:

  • кредитная карта
  • ипотека

Я хотел бы иметь возможность взять их и закодировать в своем фрейме данных как правильные слова:

  • кредитная карта
  • ипотека

Я, кстати, использую Python.

Анализ настроения постов в Twitter с помощью Python, Tweepy и Flair
Анализ настроения постов в Twitter с помощью Python, Tweepy и Flair
Анализ настроения текстовых сообщений может быть настолько сложным или простым, насколько вы его сделаете. Как и в любом ML-проекте, вы можете выбрать...
7 лайфхаков для начинающих Python-программистов
7 лайфхаков для начинающих Python-программистов
В этой статье мы расскажем о хитростях и советах по Python, которые должны быть известны разработчику Python.
Установка Apache Cassandra на Mac OS
Установка Apache Cassandra на Mac OS
Это краткое руководство по установке Apache Cassandra.
Сертификатная программа "Кванты Python": Бэктестер ансамблевых методов на основе ООП
Сертификатная программа "Кванты Python": Бэктестер ансамблевых методов на основе ООП
В одном из недавних постов я рассказал о том, как я использую навыки количественных исследований, которые я совершенствую в рамках программы TPQ...
Создание персонального файлового хранилища
Создание персонального файлового хранилища
Вы когда-нибудь хотели поделиться с кем-то файлом, но он содержал конфиденциальную информацию? Многие думают, что электронная почта безопасна, но это...
Создание приборной панели для анализа данных на GCP - часть I
Создание приборной панели для анализа данных на GCP - часть I
Недавно я столкнулся с интересной бизнес-задачей - визуализацией сбоев в цепочке поставок лекарств, которую могут просматривать врачи и...
0
0
23
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Это во многом зависит от того, есть ли у вас список всех спам-слов или нет.

Если у вас есть список спам-слов, и вы знаете, что всегда есть только ДОБАВЛЕННЫЕ пробелы (например, give me your cred it card in formation), но никогда НЕ ПРОПУСКАЮТ пробелы (например, give me yourcredit cardinformation), тогда вы можете использовать простой подход, основанный на правилах:

import itertools

spam_words = {"credit card", "rolex"}
spam_words_no_spaces = {"".join(s.split()) for s in spam_words}

sentence = "give me your credit car d inform ation and a rol ex"

tokens = sentence.split()
for length in range(1, len(tokens)):
    for t in set(itertools.combinations(tokens, length)):
        if "".join(t) in spam_words_no_spaces:
            print(t)

Что печатает:

> ('rol', 'ex')
> ('credit', 'car', 'd')

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

Затем разбейте предложение на токены и, наконец, получите все возможные уникальные последовательные подпоследовательности в списке токенов (включая последовательности из одного слова и целое предложение без пробелов), а затем проверьте, есть ли они в списке спам-слов.

Если у вас нет списка спам-слов ваш лучший шанс, вероятно, состоит в том, чтобы сделать общую коррекцию пробелов в данных. Проверьте Посткоррекция оптического распознавания символов (OCR), для которого вы можете найти некоторые предварительно обученные модели. Также ознакомьтесь с эта тема, в котором рассказывается о том, как добавлять пробелы в текст без пробелов, и даже упоминается пакет Python для этого. Таким образом, теоретически вы можете удалить все пробелы, а затем попытаться снова разбить его на осмысленные слова, чтобы увеличить вероятность обнаружения спам-слов. Как правило, ваша проблема (и наоборот, отсутствующие пробелы) называется обнаружением границ слов, поэтому вы можете проверить некоторые ресурсы по этому поводу.

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

Тема, которую вы предоставили, очень помогла, спасибо! На моей модели работало безотказно.

kuntiechan 26.04.2022 08:05

Другие вопросы по теме