Обнаружение и удаление шума текста
Дать таблицу базы данных с огромными данными, что является лучшим способом для удаления текста шума, таких как:
- fghfghfghfg
- qsdqsdqsd
- rtyrtyrty
этот шум сохраняется в поле "имя".
Я работаю над данными со стандартными структурами Java.
10 ответов
Ну, вы можете построить классификатор, используя методы НЛП, и обучить его на примерах шума и отсутствия шума. Одним из примеров, который вы можете использовать, является языковой детектор от Apache Tika. Если детектор языка говорит "бьет меня", это может быть достаточно.
Удаление таких вещей не так просто, как может показаться.
Для нас, людей, легко увидеть, что "джхфкдж" не имеет никакого смысла. Но как компьютер может обнаружить такой шум? Откуда ему знать, что "Eyjafjallajökull" - это просто кто-то, кто ломает свою клавиатуру, или самая перегруженная гора за последние пару лет?
Вы не можете сделать это надежно без множества ложных срабатываний, поэтому, в конце концов, это снова фильтрует ложные срабатывания и истинные срабатывания вручную.
Получите словарь с таким количеством имен, которые вы можете найти, и отфильтруйте ваши данные, чтобы отобразить те, которых нет в словаре. Затем вы должны удалить их один за другим, чтобы убедиться, что вы не удалите действительные данные. Сортировка списка по имени может помочь вам удалить больше строк одновременно.
Изучите каждое слово и посмотрите, сколько там избыточности. Если существует более трех последовательных повторяющихся групп букв, это хороший кандидат на шум. Кроме того, ищите группы букв, которые обычно не объединяются, и группы последовательных букв, которые также являются последовательными на клавиатуре. Если целое слово состоит из таких букв, которые являются соседями клавиатуры, оно также претендует на место в списке помех.
Если остальная часть текста на английском языке, вы можете использовать список слов. Если более определенного процента (скажем, 50%) слов в тексте нет в списке слов, это, вероятно, шум.
Возможно, вы захотите установить порог, скажем, 5 слов, чтобы предотвратить удаление сообщений, таких как "LOL".
В большинстве установок Linux вы можете извлечь список слов из проверки орфографии aspell
как это:
aspell --lang en dump master
Вам нужно начать с более эффективного определения "шумового текста". Определение проблемы - сложная часть здесь. Вы не можете написать код, который скажет: "Избавьтесь от строк, вроде _____". Похоже, что шаблон, который вы определили, является "последовательным набором из трех символов в строке, и набор повторяется по крайней мере один раз, но может не завершаться чисто (он может заканчиваться на символе с середины набора)".
Теперь напишите регулярное выражение, соответствующее этому шаблону, и протестируйте его.
Но я уверен, что есть и другие модели, которые вы ищете...
Обучение классификатору НЛП, вероятно, будет лучшим способом. Однако более простой способ может состоять в том, чтобы просто проверить, что каждое слово существует в списке всех известных "допустимых" слов. Большинство систем Unix имеют файл / usr / share / dict / words, который вы можете использовать для этой цели. Кроме того, Ubuntu расширяет это с помощью /usr/share/dict/american-english, /usr/share/dict/american-огромный и /usr/share/dict/american-insane, каждый список более полный, чем предыдущий. Эти списки также содержат много общих орфографических ошибок, поэтому вы не будете отфильтровывать текст, который технически не является словом, но четко распознается как слово.
Если вы действительно амбициозны, вы можете объединить эти подходы и использовать эти списки слов для обучения байесовского классификатора или классификатора максимальной энтропии.
Вставьте фрагменты текста в Google и посмотрите, сколько результатов вы получите.
Здесь много хороших ответов. Какой из них будет работать для вас, во многом зависит от специфики вашей проблемы - например, предполагается, что ввод должен быть английскими словами, именами пользователей, фамилиями людей и т. Д.
Один из подходов: написать программу для анализа того, что вы считаете "допустимым" вводом. Следите за тем, как часто каждая возможная трехбуквенная последовательность появляется в допустимом тексте. Затем, когда у вас есть вход для проверки, посмотрите на каждую трехбуквенную последовательность ввода и найдите его ожидаемую частоту. Что-то вроде "xzt", вероятно, имеет частоту около нуля. Если у вас слишком много подобных подпоследовательностей, пометьте их как мусор.
Проблемы с этим:
- Вы можете рассматривать плохое правописание как мусор, например, если кто-то забудет поставить "u" после "q" в слове.
- Вы не поймете ввод, как "thethethe".
Вы можете попытаться заставить базу данных вернуть поле, лишенное всего, кроме букв и пробелов, со всеми буквами в нижнем регистре. Затем в вашей программе создайте хеш на основе допустимых слов в нижнем регистре. Для заданного значения поля базы данных разделите его на символ пробела и проверьте, существует ли каждая подстрока в хэше.
Создайте таблицу исходных значений полей с флагом, указывающим, прошел ли он тест или нет, и просмотрите.
Похоже, вам нужно сделать что-то подобное в качестве предварительной проверки, прежде чем переходить к более сложным методам.
Примеры #1 и #2 могут быть удалены парсером, который пытается выяснить, как произносить текст. Независимо от языка, они невыразимы и, следовательно, не слова.