2010-05-13 2 views
4

давая таблицу базы данных с большими объемами данных в нем, что лучшая практика для удаления текста шума, такие как:Обнаружение и удаление текст шума

  • fghfghfghfg
  • qsdqsdqsd
  • rtyrtyrty

, что шум сохраняется в поле «имя».

Я работаю над данными со стандартными структурами Java.

+10

Разрешить пользователям stackoverflow.com с 3k rep удалить их? – bmargulies

+0

+2 bmargulies :-) –

ответ

7

Ну, вы можете построить классификатор, используя методы НЛП, и обучить его примерам шума и нешумности. Одним из примеров этого может быть детектор языка от Apache Tika. Если детектор языка говорит «бьет меня», это может быть достаточно хорошим.

3

Получить словарь с таким количеством имен, который вы можете найти и отфильтровать свои данные, чтобы отобразить те, которые не находятся в словаре. Затем вы должны удалить их по очереди, чтобы убедиться, что вы не удаляете действительные данные. Сортировка списка по имени может помочь вам удалить больше строк за раз.

2

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

Возможно, вы захотите установить порог, например, 5 слов, чтобы предотвратить удаление сообщений типа «LOL».

На большинстве установок Linux, вы можете извлечь список слов из проверки орфографии aspell так:

aspell --lang en dump master 
+0

«Джордж Буш ненавидит Барака Обаму». 80% не-слов, и все же это имеет смысл. –

+0

«Буш» - это слово, поэтому 60% –

+0

Вы можете получить список имен и добавить его обратно, до 100% – BCS

2

Вы будете нуждаться, чтобы начать с определения «текст шума» более эффективно. Определение проблемы - сложная часть здесь. Вы не можете написать код, который скажет: «Избавьтесь от строк, которые похожи на _____». Похоже, что шаблон, который вы идентифицировали, представляет собой «последовательный набор из трех символов в строке, и набор повторяется хотя бы один раз, но может не заканчиваться чисто (он может заканчиваться на символе из середины набора)».

Теперь напишите регулярное выражение, соответствующее этому шаблону, и протестируйте его.

Но я держал пари, есть и другие модели, которые вы ищете ...

8

Удаление вещи, как это не так просто, как может показаться.

Для нас, людей, легко увидеть, что «djkhfkjh» не имеет никакого смысла. Но как компьютер обнаружил бы такой шум? Как он узнает, что «Эйяфьялладжокулл» ​​- это кто-то, кто разбивает клавиатуру или самую завуалированную гору в последние пару лет?

Вы не можете сделать это надежно без множества ложных срабатываний, поэтому в конце концов он снова фильтрует ложные срабатывания и истинные срабатывания вручную.

2

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

+0

Еще одна полезная эвристика - отношение гласных к соглашению. –

+0

@Justin: но диапазон допустимых значений варьируется от языка к языку. Например, в хорватии есть красивый остров, который называется [Крк] (http://en.wikipedia.org/wiki/Krk). –

1

Обучение классификатору НЛП, вероятно, будет лучшим способом. Однако более простым методом может быть просто проверка того, что каждое слово существует в списке всех известных «правильных» слов. В большинстве систем Unix есть файл с именем/usr/share/dict/words, который вы можете использовать для этой цели. Кроме того, Ubuntu расширяет это с помощью/usr/share/dict/american-english,/usr/share/dict/american-huge и/usr/share/dict/american-insane, каждый из которых содержит более подробный, чем последний. Эти списки также включают в себя множество распространенных орфографических ошибок, поэтому вы не будете отфильтровывать текст, который не является технически словом, но четко распознаваемым как слово.

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

+1

+1 для байесовского, идеально подходит для такого рода классификаций да/нет. – Pindatjuh

1

Здесь есть много хороших ответов. Какие из них будут работать на вас, зависит от специфики вашей проблемы, например, это ввод, который должен быть английским словом, именами пользователей, фамилиями людей и т. Д.

Один подход: написать программу проанализировать то, что вы считаете «действительным». Следите за тем, как часто появляется всевозможная трехбуквенная последовательность в законном тексте. Затем, когда у вас есть вход для проверки, посмотрите на каждую трехбуквенную последовательность ввода и посмотрите ее ожидаемую частоту. Что-то вроде «xzt», вероятно, имеет частоту около нуля. Если у вас слишком много подпоследовательностей, отметьте это как мусор.

Проблемы с этим:

  1. Вы можете лечить плохое правописание как мусор, например, если кто-то забывает положить «и» после «д» в слове.
  2. Вы не поймаете ввод, как «thethethethe».
0

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

Создайте таблицу исходных значений поля, указав флаг, если он прошел тест или нет, и просмотрите.

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

1

Выложите фрагменты текста в Google и посмотрите, сколько результатов вы получите.

+0

Пожалуйста, не надо. Я ненавижу это, когда мне дают такой поиск, чтобы ответить. Http: //kaitlynsays.wordpress.ком/2009/03/31 /, если-The-Интернет-техника его подводит-EXIST / – BCS

0

Примеры # 1 и # 2 могут быть удалены парсером, который пытается выяснить, как произносится текст. Независимо от языка, они невыразимы и, следовательно, не слова.

Смежные вопросы