2014-04-18 3 views
0

제품 이름이있는 거대한 데이터베이스가 있습니다. 데이터베이스에 새 제품을 삽입하기 전에 제품이 이미 존재하는지 (즉, 동일하거나 매우 유사한 항목의 ID를 얻음) 같은지 알아 내기 위해 데이터베이스에 제품을 일치 시키려고합니다. 다른 설명이, 예를 들면 :PHP의 일치 이름

  • 아이폰 4S
  • 아이폰 4S
  • 아이폰-4

은 내가에만 생성 할, automatically 일치에 해당 항목이 필요하지 않습니다 매칭 제안을 한 다음 감독하도록하십시오.

몇 가지 아이디어가 있습니다. 데이터베이스에서 관련 항목을 찾으려는 단일 제품 이름을 예로 들자. "apple iphone-4s".

  1. 아이폰-4
  2. 은하 S4
  3. 아이폰 3G
  4. 사과 나노
  5. 삼성 아무것도 정

  1. 특별한 교체 : 내 DB가 같은 것은 볼 수 있었다 "-", ","등의 문자 (apple iphone-4s -> apple iphone 4s 사과)을 입력 한 다음 문자열을 폭발시켜 array('iphone', '4s')으로 만든 다음이 배열의 각 항목을 반복하여 데이터베이스에서 하나의 product-name과 비교하고 안타. 결과 :

    • iphone-4s 2는
    • galaxy s4 0 안타
    • iphone 3g는 1
    • apple nano는 1
    • samsung anything 4s 1은
    충돌 제공 명중 제공 명중 제공을 제공 명중 제공 apple iphone 4s < =>array('apple', 'iphone', '4s')

    에 일치
  2. 은 가장 많은 조회수에 대해 일치 항목을 정렬합니다. 즉, 관리자에게 제안 할 가능성이 가장 높은 일치는 iphone-4s입니다.

  3. 다음과 같은 시나리오로 인해 데이터베이스에 이미 저장된 이름에서 모든 공백과 특수 문자를 제거하는 것이 더 효과적 일 수 있습니다. 내 새 제품 이름은 apple iphone 일 수 있으며 저장된 데이터베이스 이름은. apple i-phone이되어야합니다. 따라서 두 개가 아닌 한 개의 히트가 있습니다. 이미 저장되어있는 영숫자가 아닌 문자를 모두 제거하면 적중률이 증가 할 수 있습니다. 이 예제에서 저장된 데이터베이스 항목은 appleiphone이 될 것이므로 새 제품 이름 apple iphone을 폭발시킨 후 두 번의 히트가 발생합니다.
  4. 또 다른 추가 사항으로 나는 그 (것)들을 걱정하지 않기 때문에 그 (것)들을 일치하기 전에 모든 이름에서 가능하게 색깔 etc.와 같은 재료를 제거하고 나가 가지고있다 어떤 색깔든지 2 개의 제품을 일치하고 싶으면 생각했다.

더 좋은 아이디어가 있습니까?

+0

php의 'soundex'기능과 levensthein 또는 methaphone과 비슷한 기능을 살펴보십시오. 필자는 단어를 철자하는 방법을 알지 못하는 "퍼지 (fuzzy)"검색을 구현하기 위해 자주 사용합니다. 기본적으로 그것은 그들이 소리 나는 방식으로 단어를 비교할 수 있습니다. 그래서 "아이폰"과 "아이폰"과 같은 것들은 사실상 동일합니다. 그것은 당신이 구현하고자하는 것에 매우 편리합니다. – arkascha

+0

그래, 그 기능을 알고, 거기에 'similar_text' 하나가 존재하지만 ... 단어의 순서가 다를 때 아주 다른 결과를 산출하기 때문에 나는 최고의 매너에 적용하는 방법을 모른다. '삼성 갤럭시 s4 미니'대'삼성 갤럭시 미니 -S4' 또는'갤럭시 미니 -S4' – tim

+0

물론, 그것이 사실이며 그것은 의미가 있습니다. 그냥 공백으로 문자열을 분해하고 그 결과 단어를 알파벳순으로 정렬 한 다음 시도해 보시기 바랍니다. "사운드 트릭"을 사용하지 않아도 어쨌든 그렇게해야합니다. – arkascha

답변

2
당신은 levenshtein 거리 함수를 고려할 수 있습니다

는 :.

http://www.php.net/manual/en/function.levenshtein.php

이 자연 텍스트 검색 엔진이 당신에게 당신이 입력 한 단어와 유사한 결과를 얻기 위해 사용하는 것입니다 내가 어떻게 할 수 모른다 mysql에서 이것을 지원하지만 솔라 색인과 함께 사용하는 것이 좋습니다. 희망이 도움이됩니다.