Нечеткий текст (предложения/заголовки), соответствующие в C#

В дополнение к @assylias answer вы также можете использовать новый поток api, если вы используете Java 8:

List l = Arrays.asList(4, 5, 6);

static boolean condition(Integer i) {
    return i == 5;
}

static Predicate predicate = YourClassName::condition;

l.stream()
    .filter(predicate.negate())
    .forEach(System.out::println);

Если вы инвертируете условие, решение становится еще более кратким, поскольку вам не нужно negate() предикат, что позволяет использовать только ссылку на метод:

List l = Arrays.asList(4, 5, 6);

static boolean condition(Integer i) {
    return i != 5;    // <-- condition has been negated
}

l.stream()
    .filter(YourClassName::condition)
    .forEach(System.out::println);

Один из красотой этого является то, что поток лениво оценивается, т. е. операция filter() фактически не оценивается до тех пор, пока она не будет использована терминальной операцией, такой как forEach(). Подробнее об этом можно найти в учебнике для Oracle .

22
задан Community 23 May 2017 в 11:47
поделиться

3 ответа

Ваша проблема здесь может различать шумовые слова и полезные данные:

  • Rolling_Stones.Best_of_2003.Wild_Horses.mp3
  • Super.Quality.Wild_Horses.mp3
  • Tori_Amos.Wild_Horses.mp3

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

6
ответ дан Keith 29 November 2019 в 05:26
поделиться

Это походит на то, что Вы хотите, может быть самое долгое соответствие подстроки. Таким образом, в Вашем примере двух файлах как

trash..thash..song_name_mp3.mp3 и garbage..spotch..song_name_mp3.mp3

закончили бы тем, что выглядели одинаково.

Вам была бы нужна некоторая эвристика там, конечно. Одна вещь, которую Вы могли бы попробовать, проводит строку через soundex преобразователь. Soundex является "кодеком", используемым, чтобы видеть, "звучат" ли вещи как то же (как Вы могли бы сказать телефонному оператору). Это - более или менее грубое фонетическое и транслитерация полудоказательства неправильного произношения. Это определенно более плохо, чем расстояние редактирования, но очень, намного более дешево. (Служебное пользование для имен, и только использует три символа. Нет никакой причины остановиться там, тем не менее, просто используют отображение для каждого символа в строке. См. Википедия для деталей)

, Таким образом, мое предложение было бы к soundex Вашими строками, прервало бы каждого в несколько частей длины (скажите 5, 10, 20), и затем просто посмотрите на кластеры. В кластерах можно использовать что-то более дорогое как расстояние редактирования или макс. подстрока.

6
ответ дан Greg 29 November 2019 в 05:26
поделиться

Существует большая работа, сделанная на несколько связанной проблеме выравнивания последовательностей DNA (поиск "локального выравнивания последовательностей") - классический алгоритм, являющийся "Needleman-Wunsch" и более сложными современными, также легкими найти. Идея - подобна ответу Greg - вместо того, чтобы определить и сравнить попытку ключевых слов найти самые длинные свободно соответствующие подстроки в длинных строках.

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

3
ответ дан ima 29 November 2019 в 05:26
поделиться
Другие вопросы по тегам:

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