내 질문은 두 문자열을 비교하는 가장 빠른 (품질도 중요하지만 조금 덜 중요) 방법은 무엇입니까?더 나은 문자열 비교 방법
두 문자열을 비교하는 가장 효율적인 방법을 찾고 있습니다. 비교할 문자열 중 일부는 5000자를 초과 할 수 있습니다. 저는 약 80 개의 문자열 목록을 약 200 개의 문자열 목록과 비교하고 있습니다. 내가 쓰레딩 할 때조차도 영원히 필요합니다. 나는 Apache Commons의 StringUtils.getLevenshteinDistance(String s, String t)
메소드를 사용하고있다. 내 방법은 다음과 같습니다. 이 작업을 수행하는 더 좋은 방법이 있습니까?
문자열 1 :
SELECT
CORP_VENDOR_NAME as "Corporate Vendor Name",
CORP_VENDOR_REF_ID as "Reference ID",
MERCHANT_ID as "Merchant ID",
VENDOR_CITY as "City",
VENDOR_STATE as "State",
VENDOR_ZIP as "Zip",
VENDOR_COUNTRY as "Country",
REMIT_VENDOR_NAME as "Remit Name",
REMIT_VENDOR_REF_ID as " Remit Reference ID",
VENDOR_PRI_UNSPSC_CODE as "Primary UNSPSC"
FROM DSS_FIN_USER.ACQ_VENDOR_DIM
WHERE VENDOR_REFERENCE_ID in
(SELECT distinct CORP_VENDOR_REF_ID
FROM DSS_FIN_USER.ACQ_VENDOR_DIM
WHERE CORP_VENDOR_REF_ID = '${request.corp_vendor_id};')
문자열 2 :
SELECT
CORP_VENDOR_NAME as "Corporate Vendor Name",
CORP_VENDOR_REF_ID as "Reference ID",
MERCHANT_ID as "Merchant ID",
VENDOR_CITY as "City",
VENDOR_STATE as "State",
VENDOR_ZIP as "Zip",
VENDOR_COUNTRY as "Country",
REMIT_VENDOR_NAME as "Remit Name",
REMIT_VENDOR_REF_ID as " Remit Reference ID",
VENDOR_PRI_UNSPSC_CODE as "Primary UNSPSC"
FROM DSS_FIN_USER.ACQ_VENDOR_DIM
WHERE VENDOR_REFERENCE_ID in
(SELECT distinct CORP_VENDOR_REF_ID
FROM DSS_FIN_USER.ACQ_VENDOR_DIM
WHERE CORP_VENDOR_REF_ID = 'ACQ-169013')
당신은 만 알 수 있습니다 여기에
private void compareMe() {
List<String> compareStrings = MainController.getInstance().getCompareStrings();
for (String compare : compareStrings) {
int levenshteinDistance = StringUtils.getLevenshteinDistance(me, compare);
if (bestScore > levenshteinDistance
&& levenshteinDistance > -1) {
bestScore = levenshteinDistance; //global variable
bestString = compare; //global variable
}
}
}
는 좋은 점수를 가지고 있어야 두 문자열의 샘플입니다 차이는 문자열 끝에
'${request.corp_vendor_id};'
입니다. 이로 인해
LevenshteinDistance
메서드에서
26
의 점수를 갖게됩니다.
"비교"가 의미하는 것을 정의하십시오. "Compare"는 일반적으로 == /! = 또는>/==/<을 의미하지만 거리 함수를 사용하고 있으므로 분명히 이진 비교를 원하지 않습니다. –
문자열의 내용에 대해 알지 못하면 실제로 최적화 할 수 없습니다 (AB와 BA를 비교하지 않기 위해 다른 것) –
당신이 할 수있는 일은 비교 방법의 소스를 얻고 " "어떻게 든. 모든 "거리"비교는 비쌀 것입니다. 하지만 모든 경우 실제 스코어 대신에 "go/no-go"결과 만 필요하면 데이터의 특성에 따라 사전 컨디셔닝 테스트를 사용할 수 있습니다. –