Я пишу программу на C#, которая сравнивает строки так же, как Google ищет документы по ключевым словам.Как я могу увидеть, если одна строка свободно содержит другую (случай, лишние пробелы и пунктуация игнорируются)?
Я хочу поискать «переполнение стека», чтобы вернуть true для «переполнения стека» (plain), «Это переполнение стека». (посередине), «Добро пожаловать в переполнение стека». (без учета регистра), «Мне нравится переполнение стека». (переменная пробел) и «Кто ставит тире в переполнении стека?», но не «stackoverflow» (без пробелов).
Я думал, что могу использовать регулярное выражение типа «stack ([-] |.) + Overflow», кажется, слишком сложно заменить каждое место в каждом ключевом слове набором символов для каждого нового ключевого слова. Поскольку «переполнение стека» - это не единственная строка, которую я ищу, я должен сделать это прагматично.
Похоже, вам понадобятся алгоритмы с нечеткой логикой. Быстрый поиск вызывает расстояние Левенштейна как один из способов измерения количества изменений, необходимых для преобразования одной строки в другую. –
Этот связанный вопрос предоставляет некоторые возможности: http://stackoverflow.com/questions/1358687/what-are-some-good-methods-to-find-the-relatedness-of-two-bodies-of-text –