Итак, я в противоречивой ситуации, и я хотел получить совет. В основном я просто выполняю сопоставление строк, используя извлеченную строку в качестве шаблонов для моего обычного выражения. Хотя в целом я могу сделать это довольно хорошо в целом с помощью поиска с нечетким регулярным выражением, иногда я сталкиваюсь с этой ситуацией:Regex - соответствие подстроки текста подстроке шаблона
Предположим, что я извлек следующий шаблон из некоторых данных (пакет регулярных выражений Python).
pattern = 'the quick brown fox jumps over the lazy dog'
Теперь мне нужно, чтобы он соответствовал строке, которая может быть похожа на любую из этих, хотя в основном первая.
string = 'quick brown fox jumps over the lazy'
string2 = 'and then a quick brown fox jumps onto the cat'
в связи с началом и задними символами, очевидно, я не получу матч, если я пытаюсь сделать что-то вроде того, что я делаю, что в настоящее время выглядит следующим образом:
if re.search("("+pattern+"){e<=2}", string):
print(True)
К сожалению, количество ошибок не является согласованным, и может быть много символов, ведущих и/или заканчивающих шаблон. Учитывая, что я не знаю a priori, если я столкнулся с этой проблемой, могу ли я что-нибудь сделать, чтобы получить соответствие, если достаточная подстрока шаблона соответствует ему? Я смотрел на расстояние Левенштейна, чтобы объяснить это, но для этого требуется установить некоторый порог, который кажется суперчувствительным к длине строк, чтобы соответствовать (после нормализации по длине), и поэтому он просто заканчивается тем, получить матч, когда я этого хочу. Есть ли другие варианты или лучшие способы нормализации результатов?
Кроме того, одна вещь, которую я не могу сделать, - всегда просто наилучшее совпадение, потому что иногда правильная запись на самом деле не появляется в тексте, который я проверяю.
Все, что я пропустил в пакете регулярных выражений, которое могло бы помочь в этом?
Вы проверили 'nltk'? Похоже, что вы хотите сравнить частоты стебля слова (с весом, зависящим от общей частоты слов), в своих строках и вернуть лучшие совпадения. Я думаю, что «nltk» поддерживает это. http://textminingonline.com/dive-into-nltk-part-iv-stemming-and-lemmatization – dashiell
Что такое * достаточная подстрока шаблона *? Это значение, которое вы обычно должны рассчитать и использовать вместе с функцией расстояния Левенштейна. –
Как насчет слов чередующихся, таких как 'string = 'quick blah brown blah fox blah blog jumps blow over blech the crazy''? – dawg