2017-02-19 6 views
4

Я ищу способ нечеткой функции substring. Что я имею в виду:fuzzy .substring функция текстового сопоставления

  • Даны две строки.
  • Один из них часто длиннее другого. Назовем тогда «короткий» и «длинный»
  • Мы хотим забить, сколько «коротких» появилось в «длинном».
  • Мы хотим принять во внимание близость и другие. Подобно тому, как элементы «короткого» появляются в «длинном», они предпочитают появляться в одном порядке и близко друг к другу.

Пример 1:

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

Это точное совпадение и должно иметь счет 1.0.

Пример 2:

  • Короткие: "сорняки будут уничтожены"
  • Длинные: То же самое, что и выше.

Это нечеткое совпадение, так как в тексте появляются «сорняки» и «уничтожены», но без «будет». Тем не менее он должен получить высокий балл (скажем 0,8).

Пример 3:

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

Любая предлагаемая реализация по этому вопросу?

Последнее, что нет единственного способа сделать это. Но я ищу алгоритм AN. Параметры этого алгоритма могут быть настроены на основе потребностей и требований.

+0

Остановить слова, возможно, позаботиться о детерминантах и ​​статьях. N-граммы могут пролить свет на грамматику. Мой прием. – arjun

+0

A) это не вопрос scala. B) Конечно, он запрашивает «ресурс вне сайта» и так не в тему. C) Если это не так, это слишком широко! D) многие «связанные» вопросы справа, похоже, охватывают одно и то же место. –

ответ

2

Вот один из возможных подходов:

  1. для первого слова коротким (0), хранить первый IndexOf в длинном
  2. для каждого последующего слова короткого (п), хранить оба: а) первый indexOf в длинном и b) (предпочтительный) первый shortOn indexOf (n), который встречается не позже, чем предпочтительный short (n-1) indexOf.
  3. счет соответственно
+0

Хороший ответ. Повторения («коротких» терминов в «длинном» абзаце) могут усложнить этот подход. – Daniel

2

Я бы разделить обе строки в дереве зависимостей (что-то вроде this). Затем рекурсивно пройденное меньшее дерево из корня и проверено, присутствует ли токен в большом дереве. Если да, то добавьте оценку similarity_of_dependency_kind.Необязательно, что можно умножить на similarity_of_destination_words (в терминах синонимичности, что-то вроде wordnet).

Этот подход менее эффективен, но более точен.

Кроме того, не забудьте очистить предварительные данные, например, коррекцию опечаток.

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