Regex для замены мусора

Я запустил бы путем рассмотрения спектрального. Я сделал это на этих двух звуковых файлах, которые Вы дали и там, кажется, некоторое подобие, которое Вы могли использовать. Например, основное различие между этими двумя, кажется, вокруг 40-50Hz. Мои.02.

ОБНОВЛЕНИЕ

у меня была другая идея после регистрации этого. Если Вы можете, добавить акселерометр на устройство. Затем коррелируют вибрационные и акустические сигналы . Это должно помочь с перекрестным дверным обнаружением механизма. Я думаю, что это должно хорошо коррелироваться, так как звук vibrationally управляется, где стерео, например, не. У меня было устройство, которое смогло обнаружить моего об/мин механизма с лобовым стеклом, монтируются (присоска), таким образом, чувствительность могла бы быть там. (Я не делаю обещаний, это работает!)

alt text
(источник: charlesrcook.com )

%% Test Script (Matlab)
clear
hold all %keep plots open
dt=.001

%% Van driver door
data = wavread('van_driver_door_closing.wav');

%Frequency analysis
NFFT = 2^nextpow2(length(data));
Y = fft(data(:,2), NFFT)/length(data);
freq = (1/dt)/2*linspace(0,1,NFFT/2);
spectral = [freq'  2*abs(Y(1:NFFT/2))];

plot(spectral(:,1),spectral(:,2))

%% Repeat for van sliding door
data = wavread('van_driverdoorclosing.wav');

%Frequency analysis
NFFT = 2^nextpow2(length(data));
Y = fft(data(:,2), NFFT)/length(data);
freq = (1/dt)/2*linspace(0,1,NFFT/2);
spectral = [freq'  2*abs(Y(1:NFFT/2))];

plot(spectral(:,1),spectral(:,2))

11
задан Tomalak 18 August 2009 в 13:15
поделиться

12 ответов

Не знаю, насколько хорошо это будет работать, но я праздно рассматривал эту проблему в прошлом. Иногда я играл с маленьким программным устройством, называемым цепочкой Маркова

. Теперь статья в Википедии, вероятно, не будет иметь большого смысла, пока вы не увидите некоторые другие вещи, для которых цепочка Маркова хороша. Одним из примеров работы марковской цепи является этот греческий генератор . Другой пример - чат-бот MegaHAL.

Греческий язык - это тарабарщина, похожая на слова. Цепи Маркова предоставляют способ случайной генерации последовательности букв, но с взвешиванием случайных вариантов для имитации частотных паттернов исследуемого корпуса. Так, например, учитывая букву «Т», буква h с большей вероятностью появится рядом, чем любая другая буква. Итак, вы исследуете корпус (скажем, некоторые газеты, или сообщения в блогах), чтобы создать своего рода отпечаток языка, на который вы ориентируетесь.

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

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

Это похоже на нечеткое регулярное выражение.

2
ответ дан 3 December 2019 в 10:44
поделиться

Простая эвристика, похожая на анонимный ответ:

listA = [0,1,2..9, a,b,c..z, A,B,C,..Z , ...] // alphanumerical symbols
listB = [!@$%^&...] // other symbols

Na = number_of_alphanumeric_symbols( line )
Nb = number_of_other_symbols( line )

if Na/Nb <= garbage_ratio then
  // garbage
2
ответ дан 3 December 2019 в 10:44
поделиться

Одно из простых решений (не связанных с регулярными выражениями):

#pseudopython

number_of_punct = sum ([1 if c.ispunct () else 0 for c in line])

, если number_of_punct> len (line) / 2: line_is_garbage ()

хорошо. Или грубое регулярное выражение s / [!, '"@ # ~ $% ^ &] {5,} // g

1
ответ дан 3 December 2019 в 10:44
поделиться

Я выполнил комбинацию удаления строк, которые не содержат хотя бы двух трехбуквенных слов или одного шестибуквенного слова.

([az | AZ] {3,} \ s ) {2,} | ([az | AZ] {6,})

http://www.regexpal.com/

1
ответ дан 3 December 2019 в 10:44
поделиться

Вот реализация эвристики garbage_ratio на Perl:

#!/usr/bin/perl

use strict;
use warnings;

while ( defined( my $chunk = read_chunk(\*DATA) ) ) {
    next unless length $chunk;

    my @tokens = split ' ', $chunk;
    # what is a word?
    my @words  = grep {
        /^[A-Za-z]{2,}[.,]?$/
            or /^[0-9]+$/
            or /^a|I$/
            or /^(?:[A-Z][.])+$/
    } @tokens;

    # completely arbitrary threshold
    my $score = @words / @tokens;
    print $chunk, "\n" if $score > 0.5;
}

sub read_chunk {
    my ($fh) = @_;
    my ($chunk, $line);

    while ( my $line = <$fh> ) {
        if( $line =~ /\S/ ) {
            $chunk .= $line;
            last;
        }
    }

    while (1) {
        $line = <$fh>;
        last unless (defined $line) and ($line =~ /\S/);
        $chunk .= $line;
    }

    return $chunk;
}


__DATA__

Вставьте текст выше после __ DATA __ выше (без повторения текста здесь для экономии места). Конечно, использование раздела __ DATA __ предназначено для публикации автономного скрипта. В реальной жизни у вас будет код для открытия файла и т. Д.

Вывод:

Federal prosecutors on Monday charged a Miami man with the largest
case of credit and debit card data theft ever in the United States,
accusing the one-time government informant of swiping 130 million
accounts on top of 40 million he stole previously.

Gonzalez is a former informant for the U.S. Secret Service who helped
the agency hunt hackers, authorities say. The agency later found out that
he had also been working with criminals and feeding them information
on ongoing investigations, even warning off at least one individual,
according to authorities.
1
ответ дан 3 December 2019 в 10:44
поделиться

Ну, группа символов будет соответствовать некоторой чепухе. Возможно, проверка слов по словарю?

Кажется, там много разрывов строк там, где есть тарабарщина, так что это тоже может быть индикатором.

0
ответ дан 3 December 2019 в 10:44
поделиться

Интересная проблема.

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

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

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

0
ответ дан 3 December 2019 в 10:44
поделиться

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

0
ответ дан 3 December 2019 в 10:44
поделиться

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

Так что в .NET это, возможно, что-то вроде

.Replace("\\p{1,}[a-zA-Z0-9]{1,}", "");

Тогда вы бы рассмотрели " любое слово с двумя или более знаками препинания подряд:

.Replace(" \\p{2,} ", "");

В любом случае, похоже, хорошее начало.

0
ответ дан 3 December 2019 в 10:44
поделиться

Еще один хороший метод - использовать средство проверки правописания / словарь и искать «слова» после того, как вы устранили нечитаемый материал с помощью регулярного выражения.

0
ответ дан 3 December 2019 в 10:44
поделиться

Мне нравится ответ @Breton - я бы предложил использовать его подход Corpus также с библиотекой известных «плохих сканирований», которые может быть легче идентифицировать, потому что «мусор» имеет большую внутреннюю согласованность, чем «хороший текст», если он исходит из плохих сканирований OCR (например, количество отдельных глифов меньше ).

0
ответ дан 3 December 2019 в 10:44
поделиться

Regex здесь не поможет. Я бы сказал, что если у вас есть контроль над частью распознавания, тогда сосредоточьтесь на лучшем качестве: http://www.neurogy.com/ocrpreproc.html

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

1
ответ дан 3 December 2019 в 10:44
поделиться
Другие вопросы по тегам:

Похожие вопросы: