동적 데이터

F #에서 데이터베이스 레코드에 대 한 패턴 매칭

Ambar Ray

코드 샘플 다운로드

응용 프로그램에서 사용 되는 데이터도 더 이상 나타나지 않습니다. 결국 데이터베이스에서 유용한 데이터를 만족 시키기 위해서는 여러 단계를 통해 이동 해야 합니다. 먼저, 차원 데이터 컬렉션에 대 한 추출, 변환 및 로드 (ETL) 프로세스를 실행할 수 있습니다. 여기에는 일반적으로 데이터 정리 및 표준화, 제거를 포함 합니다. 이는 데이터베이스에서 사용할 수 있는 형식으로 데이터를 정돈 하는 과정에 불과합니다.

ETL 프로세스가 완료 된 후에는 레코드를 확인 하 여 레코드에서 일관성을 유지 하 고 있는지 확인 합니다. 여기에는 일반적으로 매칭 및 중복 제거 프로세스를 구현 하는 것입니다. 그런 다음 이름 및 주소를 구문 분석을 수행 합니다. 이 정보가 준비 되 면 일치 하는 프로세스를 시작 후에 갈 수 있습니다.

There are four common matching algorithms used for attribute deduplication processes: absolute match, partial match, Soundex and lookup match. 이러한 알고리즘을 해당 데이터에 대해 실행할 수 있습니다. 일단 일치 점수 (백분율)을 계산 하 고 나면 데이터를 폐기 또는 저장할지 여부를 결정할 수 있습니다.

이번에는 연습으로 F # 기능으로 패턴 매칭 비동기 프로그래밍 기능을 사용 하 여이 네 개의 매칭 알고리즘을 구현 하 여 신속 하 게 대응 점수를 계산할 수 있도록 하 여 보았습니다. 이 문서에서는이 매칭 알고리즘 구현을 소개 하 고 요약 일치 점수를 계산 하는 방법을 설명 합니다. 이 문서의 궁극적인 목적은 함수형 프로그래밍과 명령형 프로그래밍 형식 유추 시스템과 같은 F # 기능 중 일부를 소개 하는 것은 F #을 사용 하 여 중요 한 데이터 관리 작업을 빠르고 쉽게 수행 하는 방법을 예시를 바탕으로 하는 것입니다.

데이터 준비

먼저 차원의 데이터를 다양 한 시스템에서 트랜잭션을 준비 테이블에 로드 합니다. 데이터 원본으로는 관계형 데이터베이스, 플랫 파일, 엑셀 파일 또는 XML 파일을 사용할 수 있습니다. ETL 프로세스에서는 SQL Server Integration Services (SSIS) 2008와 같은 도구를 사용 하 여 입력 데이터를 정리 하거나 배제, 정규화, 데이터를 준비 테이블에 로드 합니다. 준비 테이블을 마스터 데이터베이스는 마스터 데이터 허브에 유지 됩니다.

앞서 언급 했 듯이 매칭 및 중복 제거의 과정에는 F # 및 Windows Presentation Foundation (WPF)에서 만든 개별 응용 프로그램을 사용 합니다. 실제 프로젝트에서는 데이터 액세스 계층에 ADO. NET Entity Framework 모델을 생성 합니다. 이러한 모델은 마스터가 데이터 허브의 모든 조회 테이블 데이터와 함께 마스터 테이블을 모델링 합니다.

그런 다음 위의 계층에서 기본 모델을 Windows Communication Foundation (WCF) 서비스를 이용 하 여 게시 합니다. 게다가 비즈니스 논리 계층의 경우, 일치 및 중복 제거 루틴과 구문 분석 메서드를 구현 합니다. 마지막으로, 프레젠테이션 계층에서 데이터 관리자와 다양 한 그래픽 사용자 인터페이스를 제공 합니다. Figure 1 depicts the architecture of the application.

image: Master Data Management Application Architecture

그림 1마스터 데이터 관리 응용 프로그램의 아키텍처

이 항목에서는 응용 프로그램 전체를 소개 하는 것 없이 매칭 및 분석 알고리즘 구현에 대해서만 설명 합니다. 그런 다음 구문 분석 알고리즘에 대 한 검색 및 비즈니스 논리 계층에 구현에 대해 설명 합니다.

회사 소개

이 시나리오에서는 데이터 행을 데이터 액세스 계층을 통해 얻을 후 후속 처리를 위해 데이터 서비스가 WCF List <t>개체에 포함 되어야 합니다. 이러한 List <t>개체에 적합 한 알고리즘을 구현 하는 데 필요한 테스트 데이터를 포함 합니다.

마스터 데이터베이스에는 모든 원본 테이블과 준비 테이블 및 기록 테이블에 보관 됩니다. 예를하 여그림 2 에 Customer 데이터 엔터티의 구성을 보여 줍니다.

그림 2Customer 엔터티

CUSTFIRSTNAME
CUSTLASTNAME
CUSTHOUSENO
CUSTSTREETNAME
CUSTSTREETTYPE
CUSTCITY
CUSTSTATE
CUSTPOSTCODE
CUSTMOBILE
CUSTCOUNTRY
CUSTID
CUSTACTIVEFLAG

매칭 알고리즘는그림 3 순서도로 표현할 수 있습니다.

image: The Matching Process

그림 3일치 프로세스

1 단계실제로는 매칭 과정에서 보다는 오히려 전 처리할 수 있습니다. 구문 분석에 보내기 전에 데이터를 정리 하 고 바람직한 형식으로 표준화 합니다.

이름 구문 분석

2 단계구문 분석 과정을 전처리 일치 프로세스 중 하나입니다. 이 실습에서는 데이터에서 개인의 이름을 추출 하 고 분석 합니다. Assuming that a salutation may be entered along with the first name, it should be broken down (parsed) into individual elements: salutation and first name. 즉, 이름 필드에 「 Mr.John 」 라는 데이터가 있고 호칭이 「 Mr. 」가 「 John 」가 실제 이름 이라고 하면 알고리즘은 다음과 같이 처리 합니다.

  1. 영역 (여기서 A) 종료 된 첫 번째 단어가 W1로 가져옵니다.
  2. 조회 목록 처럼 일치 시킴, W1이 호칭 인지 여부를 확인 합니다. 경칭 직함 그 부분을 무시 하 고 4 단계로 이동 하십시오.
  3. W1 경칭이 아닌 이름으로 간주 합니다. 이 문자열에 대 한 더 이상 분석 하지 않습니다.
  4. W1가 경칭 이라고 판단 되 면 다음 공백 또는 문자열의 끝 위치 (B)를 확인 합니다. A와 B 위치의 위치 사이에 있는 단어를 이름으로 간주 합니다. 이 문자열에 대 한 더 이상 분석 하지 않습니다.

예를 들어 「 Mr.John 」 "가는그림 4 같이 구문 분석 됩니다.

그림 4이름 구문 예제

이름 M r .   J o h n
위치 1 2 3 4 5 6 7 8

위치 1에서 3으로 호칭입니다. 호칭은 선택적 때문에 첫 번째 단어가 전체 호칭 목록에 해당 하는 경우에만 사용 합니다. (여기서는 호칭을 비롯 하 여 이름의 각 구성 요소 앞에는 공백 문자가 오는 것입니다. 그러나 성 필드에는 예외를 마련 하 고 있습니다). In Figure 4, position 5 to position 8 would constitute the first name.

이 F # 구문 분석 알고리즘이 구현 방식은 다음과 같습니다.

let ParseName(strName : string)=
  let input = strName.Trim()
  let splitNames = input.Split([|" "|], StringSplitOptions.None)
  match splitNames.[0] with
    | "Mr" | "Mr." | "Mrs" | "Mrs." | "Dr" | "Dr." | "Kum" | "Kum." 
      -> splitNames.[1]
    | _-> splitNames.[0]

이 코드에서는 F #의 "match"및 "with"키워드, 패턴 일치 규칙에 "->"기호를 사용 하 여 패턴 일치를 수행 하 고 있습니다.

주소 구문 분석

다음은 주소에 구문 분석을 수행 합니다. 주소 1과 2 (이러한 바인딩 처리)는 건물 번호, 거리, 거리 이름 유형, 집합 주택 유형 (옵션, Apt, Flat, Suite 등), 방 번호 (옵션)로 분해 구문 분석 합니다. 도시, 주 및 국가 정보를 주소 1 및 2에 포함 되어 있는 경우 삭제 해야 합니다.

병합 된 주소는 건물 번호, 거리 이름, 유형, 그리고 거리에 해당 하는 경우 집합 주택 유형 및 방 번호를 구문 분석 합니다. 설명을 위해 예제를 살펴보겠습니다.

421, East Drachman St, Suite 5A, Tucson, Arizona, beside McDonald’s

이 경우, 주소는의 요소그림 5 같이 구문 분석 됩니다.

그림 5주소 구문 예

건물 번호 거리 이름 집합 주택 유형 집합 주택 유형 집합 주택 번호 위치 설명
421 East Drachman Street Suite 5A beside McDonald’s

도시 및 국가 정보는 {country, city, state, zip} = {‘ Tucson’, ‘’, AZ ‘USA’, ‘85705’}으로 따로 알아내서 주소에서 삭제할 유의 하십시오.

주소를 구문 분석 하는 데 필요한 단계를 살펴보겠습니다.

  1. 거리의 종류와 집합 주택 종류에 대 한 전체 조회를 정의 합니다.
  2. 국가/지역에 적합 한 주 나 도시의 전체 조회를 정의 합니다. 주에 대 한 조회는 AZ와 Arizona 같은 것으로 인식 될 수 있도록 정의 합니다 (그러나 철자 오류가 포함 되지 않음).
  3. 주소 1, 주소 2에 연결 하 여 주소 한 줄로 설정 합니다.
  4. 적절 한 조회를 사용 하 여 올바른 국가, 주 또는 우편 번호로 주소 문자열의 오른쪽에서 찾을 수 있습니다. 이 정보를 찾을 수 있다면 5 단계찾을 수 없는 경우에, 단계 6.로 이동 하십시오.
  5. 도시, 주 및 우편 번호 정보를 찾을 수 있다면, 주소 문자열에서 해당 정보를 삭제 합니다.
  6. Street {[Number] [Name] [Type]}, Apartment {[Type] [Number]} 이라는 구문을 사용 하 여 거리에 대 한 토큰 집합 주택에 대 한 토큰을 찾습니다. 토큰은 거리의 종류와 집합 주택 유형의 조회 값을 사용 하 여 [Type]을 검색 하 여 확인할 수 있습니다.
  7. 6 단계나머지 문자열은 위치 설명으로 간주 합니다.

이 알고리즘을 구현을그림 6 입니다. 이 코드는 while 루프를 사용 하 여, 도시, 주 및 우편 번호는 조회 테이블을 검색 하 여 일치 하는 값을 검색 합니다. 주 함수는 ParseAddress를 사용 하 여 도시, 주 및 우편 번호 정보를 주소를 삭제 합니다.

그림 6주소 구문 분석

let MatchCityStateZip (addressPart : string) = 
  // Match with a state
  let stateMatchFound = stateNameTable |> 
    List.exists (fun (part1,part2) -> 
    part1 = addressPart || part2 = addressPart) 
  // Match with a city
  let cityMatchFound = cities |> List.exists (fun city -> 
    city = addressPart)
  // Match with a ZIP code
  let zipMatchFound = zipCodes |> List.exists (fun zipCode -> 
    zipCode = addressPart)
  stateMatchFound || cityMatchFound || zipMatchFound

// The main parsing address algorithm is as follows:
let ParseAddress (strAddress : string) = 
  let mutable finalAddress = strAddress
  // Split the address
  let addressParts = strAddress.Split([|","|], 
    StringSplitOptions.None)
  // Remove city, state and ZIP information from the address
  for i = 0 to addressParts.Length - 1 do
    let currPart = addressParts.[i].Trim()
    if MatchCityStateZip currPart then
      // Index of current address part in original string
      let currIndex = finalAddress.IndexOf currPart
      // Remove city, state, ZIP information along with the 
      // following whitespace or comma
      finalAddress <- finalAddress.Remove(currIndex, currPart.Length)
  let finalAddress = finalAddress.Replace(", ,",",")
  let finalAddress = finalAddress.TrimEnd([|','; ' '|])
  finalAddress

매칭 및 중복 제거

3 단계일치 하는 중복 제거의 과정 (그림 3 참조)에서는 다음과 같은 세 가지 속성을 식별 합니다.

  • Cust_ID, 명명 (Last_Name, First_Name), 주소 (House_no, Street_Name, Zip_Code, State, City, Country), Mob_Phone 등의 ID 특성입니다.
  • 생일 (DOB) 등을 식별 하는 특성입니다.
  • 국가, 지역 및 우편 번호와 같이 레코드를 수정 하는 특성입니다.

사용자가 이러한 특성을 선택 해야 합니다. ID 식별 특성, 특성 및 레코드 정규화 된 특성을 최소한 하나 선택 해야 합니다. 정리 및 표준화 프로세스 ID 및 식별 특성에 모순이 나 오류가 있으면 레코드에 플래그를 지정 하는 경우 해당 레코드는 매칭 프로세스도 적용 하지 않음을 유의 하십시오.

As mentioned previously, matching will be performed based on four routines: absolute match, partial match, Soundex and lookup match. 각 특성에 대해 사용 하는 루틴을 선택 하 라는 메시지를 표시 합니다. 각 특성에 대해 적어도 하나의 일상적인 선택 해야 하지만 네 가지 모두를 하나의 특성으로 선택할 수 있습니다.

비즈니스 프로세스 (예: 고객의 식별 등)에 대 한 중요도에 따라 ID 특성에 적합 한 가중치를 할당 해야 합니다 (4 단계). 마찬가지로, 각 특성의 각 루틴에 가중치를 할당 하는 것도 필요 합니다. 사용자에 게 1-15의 15 단계에서 가중치를 정의 해야 합니다.

마지막으로, 단계 5.먼저 식별 특성에 따라 비교를 수행 하 여 해당 데이터를 표시 하는 창을 생성 합니다. 따라서 DOB 식별 특성으로 정의 되어 있으면 DOB를 기반으로 별도의 창을 만들 수 있습니다. 즉, 같은 창에 레코드가 DOB 값이 동일 합니다. 다음 절차에서는 여러 창에 걸쳐 레코드 간의 비교를 수행 하는 것이 아니라 개인적인 창 안에서 일치 프로세스를 수행 합니다.

완전 일치

6 단계모든 특성에 대 한 절대 비교를 실행 합니다. 이 루틴에서는 두 필드를 비교 하 여 정확히 일치 하는 검색을 제한 합니다. 정확한 일치 성과 100을 할당 합니다. 다른 결과는 점수를 0으로 합니다.

예를 들어 필드 1에 "John" 필드 2 "John"유지 되는 경우 이것은 정확 하 게 일치 이며, 점수를 100으로 하 되, 필드 1에 "Lisa" 필드 2 "Laura"유지 되는 경우에는 정확히 일치 하지 않기 때문에 점수를 0으로 합니다.

이 절대 일치 알고리즘의 구현은 다음과 같습니다.

let AbsoluteMatch (attrOfFirstRec : string) (attrOfSecondRec : string) =
  let attrRec01 = attrOfFirstRec.Trim().ToLower()
  let attrRec02 = attrOfSecondRec.Trim().ToLower()
  match attrRec01, attrRec02 with
    | "", "" -> 100
    | _, _ -> if attrRec01 = attrRec02 then 100 else 0

확장 검색

다음은 특성을 대상에 확장 검색 루틴을 실행 합니다. 부분적으로 일치 하는 값의 관계를 확인 하는 데 사용 됩니다. 그것은, 예를 들어 고객 이름이 있어도 성이 없거나 그 반대의 레코드가 있는 경우 유용 합니다. 경우에 따라서는 두 레코드의 한 필드를 비어 있을 수 있습니다. 확장 검색 알고리즘은 중요 한 필드 중 하나가 비어 있는 레코드를 검색에 사용할 수 있습니다.

공백 및 0 값으로 간주 됩니다. 부분 일치에 완전 일치 경우에는 점수를 100으로 합니다. 빈 필드 값이 비어 있지 않은 필드 값의 점수는 75 빈 필드 사이의 점수는 65입니다. 자세한 결과 점수는 0입니다.

이 부분은 일치 알고리즘의 구현은 다음과 같습니다.

let PartialMatch (attrOfFirstRec : string) (attrOfSecondRec : string) =
  let attrRec01 = attrOfFirstRec.Trim().ToLower()
  let attrRec02 = attrOfSecondRec.Trim().ToLower()
  match attrRec01, attrRec02 with
    | "", "" -> 65
    | _, "" | "", _-> 75
    | _, _ -> if attrRec01 = attrRec02 then 100 else 0

이 코드는 꼭 맞는 코드와 비슷합니다.

SOUNDEX 일치

이번에는 이름, 성, 이름, 도시, 거리, 각 나라의 특성에 대해 SOUNDEX 알고리즘을 수행 합니다. SOUNDEX 알고리즘은 다음과 같은 알고리즘에 따라 소리가 비슷한 단어를 검색 합니다.

  1. 문자열의 모든 문자를 대문자로 변환 합니다.
  2. 문자열의 첫 문자를 유지 합니다.
  3. After the first position, convert all occurrences of the following letters to blank: A, E, I, O, U, W, Y.
  4. Change letters from the predetermined sets to corresponding number as shown in Figure 7.
  5. 4 단계처리 된 문자열은 해당 숫자와 빈 칸을 이중으로 사용 되었는데 그 부분을 모두 제거 합니다.
  6. 텍스트의 처음 네 문자를 반환 하 고 필요에 따라 그 뒤에 0을 채웁니다.

그림 7SOUNDEX 용 비교

문자 해당 하는 번호
B、F、P、V 1
C、G、J、K、Q、S、X、Z 2
D、T 3
L 4
M、N 5
R 6

SOUNDEX 루틴 점수 설정은 조금 불규칙 하다. 마찬가지로 지금까지 모두 같다면, 점수는 100입니다. 하나의 문자열이 비어 있고 다른 하나는 비어 있지 않은 경우에, 점수는 50입니다. 두 문자열은 비어 있는 경우에, 점수는 0입니다. 그리고 두 문자열 또는 공백이 아닌 동일한 없으면 점수는 0이 됩니다.

이 알고리즘의 구현을 F #에서을그림 8 입니다.

그림 8SOUNDEX 일치

let SoundexMatch (attr1:string, attr2:string) = 
  let conv c = 
    match c with
    | 'A' | 'E' | 'I' | 'O' | 'U' | 'W' | 'Y' -> ' '
    | 'B' | 'F' | 'P' | 'V' -> '1'
    | 'C' | 'G' | 'J' | 'K' | 'Q' | 'S' | 'X' | 'Z' -> '2'
    | 'D' | 'T' -> '3'
    | 'L' -> '4'
    | 'M' | 'N' -> '5'
    | 'R' -> '6'
    | _ -> c

  let convertSoundex (inp:string) = 
    // Capitalize all letters in the string
    let chars = inp.ToUpper().ToCharArray() 
    let chars = 
      [| // Retain the first letter of the string
      yield chars.[0] 
      // Keep the first character, and remove pairwise-duplicates
      // Change letters from the predetermined sets to 
      // corresponding number 
      for (c1,c2) in Seq.pairwise (Seq.map conv chars) do
        // Remove all consecutive pairs of duplicate digits 
        // and blanks from the string 
        if c1 <> c2 && c2 <> ' ' then yield c2 |]
    // Convert back to a string
    String chars

  // Retain first four characters of resultant strings padded 
  // with trailing zeros if needed; leave unchanged if any 
  // string is blank
  let adjustResult (result:string) = 
    match result.Length with 
    | n when n >= 4 -> result.Substring(0, 4)
    | 0 -> result
    | n -> result + String.replicate (4 - n) "0"

  let attr1Result = attr1 |> convertSoundex |> adjustResult
  let attr2Result = attr2 |> convertSoundex |> adjustResult

  match attr1Result, attr2Result with
  | "", "" -> 0
  | "", _ | _, "" -> 50
  | _, _ -> if (attr1Result = attr2Result) then 100 else 0

이 코드는 첫 번째 문자를 포함 하 여 패턴 일치를 사용 하 여 SOUNDEX 변환을 수행 합니다. 두 개의 for 루프를 사용 하면 연속 된 중복 단어를 검색 하 고 그 같은 문자가 두 번째 문자를 공백으로 바꿉니다. 두 개의 for 루프에서 공백을 삭제 하 여 중복을 제거 하 고 있습니다. 따라서,이 4 개의 for 루프에서 반복 되는 동일한 문자를 삭제 합니다.

다음 두 번째 if 문은 첫 번째 4 개 문자를 추출 하 고 필요에 따라 0을 사용 하 여 최소 4 자리에 있다. 마지막으로, SOUNDEX 패턴 검색 루틴의 표시를 구현 합니다.

조회 일치

마지막으로, 스트리트 형식 특성에 대 한 조회 비교를 수행 합니다. 다음과 같이, 거리의 조회 테이블을 참조 하 여 거리의 형식을 표준화 합니다.

let LookupMatch (streetName : string) =
  let mutable streetMatchFound = false
  let mutable i = 0
  while ((no streetMatchFound) && (i < streetNames.Length)) do
    if (streetName = streetNames.[i]) then
      streetMatchFound <- true
  match streetMatchFound with
  | true -> 100
  | false -> 0

이 코드는 while 루프를 사용 하 여 거리의 조회 테이블에서 일치 하는 거리의 이름을 검색 하 여 일치 하는 항목이 발견 되 면 점수를 반환 합니다.

점수 계산 결과

7 단계일치 프로세스는 각 특성에 대해 일치 프로세스의 점수를 반환할 수 있습니다. 따라서 이름이 면 절대 일치 루틴에 일치 하지 않고, SOUNDEX 루틴에서 일치 하는 경우이 이름에 대 한 대응 루틴의 점수는 각각 0과 100이 됩니다.

8 단계에서는 각 특성에 대 한 가중치 점수를 결정 하 고, 특성에 대해 1-5의 점수를 할당 합니다. 예를 들어, 해당 점수 별 가중치가 0에서 SOUNDEX 점수 100의 가중치가 4 인 경우에는 집계의 이름 점수는 다음과 같습니다.

[(0x5)+(100x4)]/(5+4) ~ 44%

모든 일치 알고리즘이 선택 되어 있다고 가정 하면이가 중 된 점수를 계산를 구현그림 9 와 같습니다.

그림 9점수 집계

let WeightedAverage results = 
  let cumulativeWeight = results |> 
    Array.sumBy (fun (r, weight) -> r * weight) 
  let totalWeight = results |> 
    Array.sumBy (fun (r, weight) -> weight) 
  cumulativeWeight / totalWeight

// Aggregate match score
// Calling the match routine which in turn calls absolute match, 
// Partial Match and Soundex Match routines in parallel
let FindAggregateMatchScore row = 
  let resultsWithWeights = 
    Async.Parallel [ async { return AbsoluteMatch row, 5 } 
                     async { return PartialMatch row, 5 } 
                     async { return SoundexMatch row, 4} ]
    |> Async.RunSynchronously

  WeightedAverage resultsWithWeights

이 코드에서는 세 가지 루틴을 모든 각 특성에 대해 호출 될 것으로 기대 하 고 있습니다. (단, 거리에는 조회 특성 비교 기능을 제공 하므로 스트리트 특성은 제외). 먼저 Func 대리자를 해당 루틴에 선언 합니다. 그런 다음 BeginInvoke 메서드를 사용 하 여이 대리자를 비동기적으로 호출 합니다. WaitHandle.WaitAll를 통해 작업이 완료 되기를 기다리는 면 BeginInvoke 호출 하는 동안 반환 된 IAsyncResult 매개 변수를 받아들이는 EndInvoke 메서드를 통해 결과를 수집 합니다. 마지막으로,이 함수의 마지막 식에 의해 계산 된 점수가 일치 반환 됩니다.

9 단계각 특성에 대해 계산 된 점수와 일치 하는 각 특성의 가중치를 곱한 후 합산 하 고 두 레코드 간의 일치 점수로 백분율을 표시 합니다 (그림 10 참고).

그림 10가 중 된 점수 계산

// Percentage match score
let FindPercentageMatchScore(rows : seq<string * string>) = 
  let results = 
    Async.Parallel [ for row in rows -> 
    async { return FindAggregateMatchScore row } ] 
    |> Async.RunSynchronously

  // Apply a weight of 5 for the first attribute and a weight 
  // of 4 for second and a weight of 3 for all other attributes
  let resultsWithWeights = results |> 
    Array.mapi (fun i r -> 
    r, (match i with 0 -> 5 | 1 -> 4 | _ -> 3)) 

  WeightedAverage resultsWithWeights

F #의 Task Parallel 라이브러리의 Task.Factory.StartNew 메서드를 사용 하 여 비교할 두 특성 집합에 대해 계산 된 점수를 호출 일치 다음 for 루프에서 총합계를 계산 합니다. 마지막으로, 일치 백분율 점수를 반환 합니다.

일치 임계값 (점수 임계값 상한 및 하 한)는 사용자가 정의 합니다. 시스템에 의해, 상한 및 하 한 임계값을 정의 하 라는 메시지가 나타납니다. 해당 점수가 상한 임계값을 초과 하는 레코드는 자동으로 일치 시킵니다 일치 점수가 낮은 임계값 미만임 레코드가 거부 하 고 새로운 고객 레코드로 간주 합니다. 상한 임계값 보다 낮은 바인딩 임계값 보다 크거나 같은 점수는 검토 중인 것으로 표시 합니다.

이제 레코드의 일치 및 중복 제거 프로세스가 완료 됩니다. 명백한 중복 항목은 제거 하 고 검토할 것으로 표시 된 레코드는 인간이 나 보다 자세한 프로그램 검토 프로세스에 전달 될 수 있습니다.

Ambar Ray is a solution architect working on Microsoft technologies. Ray has nearly 12 years of experience in the IT industry.

Thanks to the following technical experts for reviewing this article: Don Syme, Technical Excellence Group of TechMahindra Ltd.