Как определить строковую ДНК для сходства с другим

Я думаю, что было бы лучше сделать это наоборот, имея UICollectionView в качестве родителя и UITableView в качестве дочернего. Поскольку первый более гибкий и настраиваемый.

В любом случае для вашего случая, я думаю, вам нужно взглянуть на две вещи:

1- Чтобы лучше контролировать размер ячейки, вы можете использовать эту функцию для UICollectionView:

func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAtIndexPath indexPath: IndexPath) -> CGSize { 

  // The desired size based on the value at that row (the name for example)

  if objects[indexPath.row].name == "some condition" {
    return CGSize(width: 150, height: 50)
  }
  else {
    return CGSize(width: UIScreen.main.bounds.width, height: 75)
  }


}

2- Значения инспектора размера для UICollectionView и UITableView (в одном из них может быть дополнительный интервал)

UICollectuinView UITableView

12
задан Paul Whelan 28 April 2009 в 14:17
поделиться

6 ответов

Вам нужен алгоритм LCS (см. Также Расстояние Левенштейна ). Вы также можете попробовать Soundex или какой-нибудь другой фонетический алгоритм .

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

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

Это успешно выполняется в информационно-поисковых системах путем обработки документов как N-мерных точек в пространстве . Каждое слово в языке является осью. Расстояние по оси определяется тем, сколько раз это слово появляется в документе. Подобные документы затем «рядом» друг с другом в пространстве.

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

6
ответ дан 2 December 2019 в 18:22
поделиться

Проверьте их Расстояние Левенштейна

В PHP у вас даже есть функция levenshtein () , которая делает именно это.

1
ответ дан 2 December 2019 в 18:22
поделиться

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

Это действительно зависит от того, что вы подразумеваете под «одинаковыми» или «разными». Например, если кто-то заменит «Соединенные Штаты Америки» на «США» в вашей строке, то будет ли это в основном та же самая строка (потому что США - это просто сокращение для чего-то более длинного), или это будет совсем другое (потому что изменилось много символов) )?

По сути, вам нужно либо разработать функцию, которая описывает, как вычислять «сходство», либо использовать ее ранее существующее определение. Например,

1
ответ дан 2 December 2019 в 18:22
поделиться

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

Однако вы можете использовать небольшое количество строк в качестве маркеров и хранить только это как строки.

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

1
ответ дан 2 December 2019 в 18:22
поделиться

Многие люди предлагают посмотреть на подходы типа расстояния / метрики, и я думаю, что формулировка вопроса ведет к этому. (Кстати, хеш, такой как md5, пытается сделать нечто прямо противоположное метрике, поэтому неудивительно, что это не сработает для вас. Существуют похожие идеи, которые мало меняются под небольшими дельтами, но я подозреваю, что они не не достаточно закодировать информацию для того, что вы хотите сделать)

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

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

Не зная больше о вашей проблеме, трудно быть более конкретным.

Я думаю, что этот тип подхода не очень полезен.

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

Не зная больше о вашей проблеме, трудно быть более конкретным.

Я думаю, что этот тип подхода не очень полезен.

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

Не зная больше о вашей проблеме, трудно быть более конкретным.

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

Не зная больше о вашей проблеме, трудно быть более конкретным.

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

Не зная больше о вашей проблеме, трудно быть более конкретным.

1
ответ дан 2 December 2019 в 18:22
поделиться
Другие вопросы по тегам:

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