우리가 담당하는 마이크로서비스 중 하나는 회사의 각 사업 부문에 대한 전체 SMS 인터페이스를 제공합니다.
점점 강화되는 통신사업자의 정책으로 인해 문자 메시지 전송이 점점 더 어려워지고 있습니다.
각 SMS 서비스 제공업체는 보고 SMS 템플릿에 대해 유사한 요구 사항을 제시했습니다. 그렇지 않으면 SMS 전송 속도가 영향을 받게 됩니다.
일반적으로 각 시스템은 새 문자 메시지를 보낼 때 SMS 서비스 제공업체에 증분 보고서를 작성합니다.
하지만 서비스 제공업체를 변경한 후에는 모든 문자 메시지 템플릿을 정리해야 합니다.
과거 문자 메시지 템플릿을 수동으로 분류하려면 여러 비즈니스 라인 직원의 참여가 필요하며 이는 매우 노동 집약적이며 누출되기 쉽습니다.
SMS 템플릿 문서를 유지 관리하는 것은 향후 솔루션으로 사용될 수 있지만 처음 사용하려면 여전히 이전 SMS 템플릿을 수동으로 정렬해야 하므로 작업 부하를 피할 수 없습니다.
따라서 최근 1~3개월 동안의 문자 메시지를 수집하여 문자 메시지 템플릿을 자동으로 분석하는 것을 고려해보세요.
연구 결과, PHP는 텍스트 유사성을 계산하기 위해 유사한 텍스트()를 제공합니다. 단일 텍스트 메시지의 시간 복잡도는 O(n^3)입니다.
따라서 텍스트 메시지를 다음과 같이 순회할 수 있습니다. 합리적인 임계값 설정. 녹음 및 생성된 예제, 생성된 SMS 예제.
전체 스크립트의 시간복잡도는 O(m.n) m: SMS 레코드 수 n: SMS 템플릿 수
평균 템플릿 수는 200개로 변경하였습니다. 여러 가지 이유로 인해 6번이나 문자를 보냈습니다.
위 솔루션을 사용하면 각 중앙 집중식 보고에 대해 템플릿이 아닌 동적 콘텐츠를 수동으로 추출해야 하는데 이는 효율적이지 않습니다.
따라서 템플릿 분석 도구가 필요합니다.
SMS 템플릿의 동적 콘텐츠는 이름과 같은 일반적인 형식인 경우가 많기 때문에 정규식과 같은 전통적인 방법을 사용하여 분석할 수 없으며 관련 클래스 라이브러리, 도구 또는 방법을 찾을 수 없습니다.
유사도가 높은 유사한 문자열을 비교하고 지속적으로 공개 문자열을 추출하여 SMS 템플릿과 유사하게 만드는 것을 고려하세요.
길이가 n인 두 개의 문자열에 대해 기존의 이중 포인터 탐색 방법에 따라 가장 긴 공개 문자열을 계산합니다. 오프라인 환경 테스트 후에는 문자 메시지의 길이가 30을 초과하는 경우 더 이상 불가능합니다. 두 개의 문자 메시지 계산은 일반 시간 내에 완료됩니다. 즉, 긴 마케팅 문자 메시지에는 문자 메시지 분석을 사용할 수 없습니다.
실제로 두 개의 문자 메시지에 대한 공개 문자열을 계산하는 데 필요한 시간 복잡도는 O(2^n)이기 때문에 n이 다음과 같은 경우 n개의 문자 메시지의 평균 길이를 작은 상수 계수로 사용할 수 없습니다. 20보다 큼. 무시.
즉, 전체 스크립트의 시간 복잡도는 O(m.n.2^l)로 증가합니다. m: SMS 레코드 수 n: SMS 템플릿 수 l: 평균 SMS 길이
편의를 위해 아래에 계속 설명, 정의
SMS A는 문자열 A입니다. 해당 요소는 a1, a2...an..aN입니다.
SMS B는 문자열 B입니다. 해당 요소는 b1입니다. ,b2....bm..bM
a1~an 및 b1~bm에 해당하는 공개 문자열을 c(m,n)이라고 합니다.
O(2 ^n+ m) 겹치는 하위 문제 a1, a2....an..aN, b1, b2....bm..bM의 각 하위 집합의 공통 문자열을 계산하는 데 많은 시간이 소요됩니다. 반복되는 하위 항을 분리할 수 있으므로 dp 아이디어를 사용하여 시간 복잡도를 줄일 수 있습니다.
문자 메시지 A의 하위 문자열 a1~an과 B의 하위 문자열 b1~bm을 선택합니다.
이는 명백합니다.
즉, 실제로 an은 Known bm값의 경우 c(n-1,m-1), c(n-1,m), c(n,m)의 3가지 중간값에 대한 정보만 알면 된다. -1) 미리 c(n,m)을 직접 계산합니다. 즉, c(n,m)은 두 문자열을 완전히 순회하지 않고도 최대 n+m번까지 줄일 수 있어 반복 계산 비용이 제거됩니다.
이를 위해 c(n,m)의 모든 중간 값의 길이를 저장하기 위해 N*M 길이의 행렬을 저장합니다.
또한, 원자열의 성장방향을 복원하기 위해서는 각 c(n,m)이 c(n-1,m-1),c로 구성되어 있음을 기록할 필요가 있다. (n-1,m),c (n,m-1) 어느 것이 계산되나요?
행렬
위 행렬을 통해 두 개의 공개** * 문자열은 *좋은 Chen* Niu입니다. 이 알고리즘의 시간은 O(2^(M+N))에서 O(M*N)으로 최적화됩니다. M: 문자열 A의 길이, N 문자열 B의 길이
거시적으로 전체 스크립트의 시간은 O(m.n)으로 돌아갑니다. m: SMS 레코드 수 n: SMS 템플릿 수.
스크립트는 온라인에서 회색조로 또는 전체가 문제 없이 실행될 수 있으며 목표가 달성됩니다.