Как сравнить две строки с условиями?
У меня есть параграф, который содержит имя автора, как:
Гопи, К.П. и Виджай, С. (1997) Компьютерные системы управления: теория и дизайн, третье издание, Мак-Гроу-Хилл, Н.Д. Клиффс, IND.
и еще один абзац вроде этого:
Это вызовет численное затруднение (Гопи и Виджай, 1997). Более того, когда активируются технологические ограничения, будет заметно засвидетельствовано значительное ухудшение характеристик управления с обратной связью, так как в системе управления доминирует нелинейность (Tenny, Rawlings and Wright, 2004).
Итак, как сравнить эти два абзаца с несколькими авторами (Gopi & Vijay) с годом публикации.
Примечание. В первой справочной части все стили форматирования имени автора с информацией о году постоянны.
1 ответ
Сравнение (между этими строками) дает три возможных результата:
- первая строка "больше" чем вторая
- первая строка "меньше" чем вторая
- две строки "идентичны"
Значение "больше", "меньше" и "идентично" зависит от функции сравнения.
Вы, вероятно, не хотите "сравнивать". Что вообще означает "второй абзац меньше первого"? Возможно, вам интересно узнать, где в тексте используется ссылка на "Управляемые компьютером системы". (Что-то, что должно быть тривиально, если на статью ссылались должным образом...)
Если это то, что вам действительно нужно, то пришло время выяснить, как бы вы, как человек, справились с этой задачей.
Мой первый подход заключается в том, чтобы взять строку ссылки
string str = "Gopi, K.P., and Vijay, S. (1997) Computer Controlled Systems";
и посмотрим, что на самом деле актуально в нем
string[] substrings = str.Split(new char[] { ' ', ',', '(', ')' });
Параграф, ссылающийся на этот источник "Управляемые компьютером системы", вероятно, будет где-то в нем содержать "Gopi and Vijay, 1997".
string toFind = substrings[0] + " and " + substrings[5] + ", " + substrings[9];
Затем я открывал текст в моем любимом текстовом средстве поиска и выполнял поиск "Gopi and Vijay, 1997".
string text = "It will cause numerical difficulty (Gopi and Vijay, 1997). What’s more, when the process constraints are activated, the significant deterioration of closed-loop control performance will be clearly witnessed as kind of nonlinearity is dominating the control system (Tenny, Rawlings, and Wright, 2004).";
int pos = text.IndexOf(toFind);
А потом я бы где-то сохранил и позицию матча, и немного контекста.
string match = "[...]" + text.Substring(Math.Max(pos - 50, 0), Math.Min(text.Length - pos, pos + toFind.Length + 50)) + "[...]";
Затем я начал бы смотреть на регулярное выражение, потому что понял бы, что в тексте могут использоваться другие комбинации "гопи", "виджай", "1997" и знаков препинания.