Хорошо, ребята, я действительно повредил свой мозг из-за этого, и мне любопытно, если вы, ребята, можете дать мне какие-либо указатели в правильном направлении, я должен идти.
Ситуация такова:
Допустим, у меня есть коллекция строк (пусть будет ясно, что структура этих строк неизвестна. Фактически, я могу сказать, что строка содержит только знаки из таблицы ASCII, и поэтому я не надо беспокоиться о странных китайских знаках).
В этом примере я возьму следующую коллекцию строк (обратите внимание, что строки не должны иметь никакого человеческого смысла, поэтому не пытайтесь их выяснить :)):
"[001].[FOO].[TEST] - 'foofoo.test'",
"[002].[FOO].[TEST] - 'foofoo.test'",
"[003].[FOO].[TEST] - 'foofoo.test'",
"[001].[FOO].[TEST] - 'foofoo.test.sample'",
"[002].[FOO].[TEST] - 'foofoo.test.sample'",
"-001- BAR.[TEST] - 'bartest.xx1",
"-002- BAR.[TEST] - 'bartest.xx1"
Теперь мне нужно найти способ найти логические группы (и подгруппы) из этого набора строк, поэтому в приведенном выше примере, просто рациональным мышлением, вы можете объединить первые 3, 2 после этого и последние 2. Также результирующие группы из первых 5 могут быть объединены в одну основную группу с 2 подгруппами, это должно дать вам что-то вроде этого:
{
{
"[001].[FOO].[TEST] - 'foofoo.test'",
"[002].[FOO].[TEST] - 'foofoo.test'",
"[003].[FOO].[TEST] - 'foofoo.test'",
}
{
"[001].[FOO].[TEST] - 'foofoo.test.sample'",
"[002].[FOO].[TEST] - 'foofoo.test.sample'",
}
}
{
{
"-001- BAR.[TEST] - 'bartest.xx1",
"-002- BAR.[TEST] - 'bartest.xx1"
}
}
Извините за макет выше, но отступ в 4 пробела, кажется, не работает правильно (или я не в порядке).
В любом случае, я не уверен, как решить эту проблему (как получить желаемый результат, как указано выше).
Прежде всего, я подумал о создании огромного набора регулярных выражений, которые бы анализировали большинство известных шаблонов, но количество различных шаблонов слишком велико, что это нереально.
Еще одна мысль, о которой я подумал, - это анализ каждого отдельного слова в строке (поэтому уберите все не алфавитные или числовые символы и разделите их по ним), и если X% совпадает, я могу предположить, что строки принадлежат одной и той же группе. (где Х, вероятно, будет около 80/90). Тем не менее, я нахожу область спекуляции довольно большой. Например, при сопоставлении строк с каждыми 20 словами изменение попадания выше 80% является довольно большим (это означает, что 4 слова могут отличаться), однако при сопоставлении только 8 слов могут различаться не более 2 слов.
Мой вопрос к вам: каков логичный подход в вышеуказанной ситуации?
Что касается примера reallife:
Заранее спасибо!