2010-06-20 7 views
5

나는 각각 6 ~ 7 단어 미만의 대다수가 5 개 미만인 문구가 많으며 (~ 수백만 개), "문구 일치 "합니다. 이것은 검색 엔진 마케팅 용어입니다. 본질적으로 A는 B가 A에 포함되어 있으면 B와 일치합니다. 지금은 db (포스트 그레스)에 저장되어 있으며 정규 표현식에 대한 참여를 수행하고 있습니다 ( this question 참조). 모든 기본적인 최적화 기법 (색인 생성 등)을 시도하고 제공된 제안을 시도한 후에도 천천히 실행됩니다.
더 쉬운 방법이 있나요? 나는 비 DB 해결책에 싫어하지 않다. 정규 표현식이 잔인하고 다른 해결책보다 오래 걸릴 것으로 생각하는 이유가 있습니까?문구가 서로 일치하는지 확인하기

+0

당신이 더 자세히 "A가 B에 포함되어있는"무엇을 의미합니까 설명 할 수 있습니까? 정확한 문자열 또는 개별 단어를 의미합니까? –

+0

나는 당신의 링크 된 게시물을 보았다. A에 얼마나 많은 기록이 있고 B에 얼마나 많은 기록이 있습니까? –

+0

찾고 계신 답변을 받으셨습니까? 그렇다면 그것을 받아 들일 수 있습니까? 그렇지 않다면, 당신이 찾고있는 것을 명확히 할 수 있습니까? 일반적으로 제공하는 정보가 많을수록 누군가가 당신을 도울 가능성이 커집니다. – MaasSql

답변

1

하위 문자열 일치를 수행하는 이상적인 알고리즘은 AhoCorsick입니다.

데이터베이스를 사용하려면 데이터를 읽어야하지만 더 순진한 방법과 비교해 볼 때 매우 빠릅니다.

는 문자열 매칭에 관련된 질문에 대한 here 참조 : 자바의 AhoCorsick 구현을위한

그리고 here :

1

어떤 구절이 다른 부분 집합인지 알아야하는 이유에 대해 좀 더 자세히 알아야합니다. 예를 들어 DB가 그런 식으로 만들어지는 것이 이상하게 보입니다. DB가 적절한 형식이 아니기 때문에 지금 작업을 수행해야하므로 DB 또는 DB가 작성되는 방식을 '수정'해야합니다.

이것은 데이터로 무엇을하고 있는지, 왜 그랬는지에 따라 크게 달라 지지만 과거에는 단일 단어와 단어 쌍으로 분류하고 리소스 또는 구문을 해당 단일/쌍으로 연결하는 것이 유용하다는 것을 알았습니다.

예를 들어 내가 수행 한 검색 구현하는 경우 :

소스 텍스트 :

Testing phrases to see

항목 :

  • 테스트
  • 테스트 문구
  • 문구
  • 문구
  • 다른 문구 유사한 (부여에 포함되지 않음) 같은 방법으로 다른 문구를 분해 및 어구의 수를 세는 것 인 경우

볼을 참조하십시오 볼 수 그들 사이의 공통점.

"테스트 단계를 참조하십시오"를 사용하는 경우에도 여전히 일치하는 좋은 부작용이 있습니다. 개별 단어가 일치하기 때문입니다.하지만 순서가 다르기 때문에 쌍이 다를 수 있으므로 그것은 동시에 (연속적인 단어들)을 고려하여, 매치의 수는 매칭에서 '스코어'로 사용하기에 좋지 않을 것입니다.

내가 말한 것처럼, - 어떤 것이 나에게 효과적 이었지만 더 많은 배경/컨텍스트를 듣는 것이 좋을 것이므로 더 나은 해결책을 찾을 수 있는지 알 수 있습니다.

1

MaasSQL의 이전 답변에서 '정리 된 열'을 사용하면 "구문 일치"가 정확히 작동하는 방식에 따라 포함 된 문자열의 길이에 따라이 열을 정렬 할 수 있습니다.

그런 다음 플랫 쿼리 대신 프로 시저에서 비교 쿼리를 실행하고 WHERE 문을 통해 비교할 후보를 제거하고 이미있는 후보를 삭제하는 방법으로 확인하십시오 테스트를 마쳤습니다. 이 작업을 수행하려면 임시 테이블이 필요할 수 있습니다.

이전에 'WHERE'문은 무엇을 의미합니까? 비교 값이 길이에 따라 정렬 된 열에 있으면 짧은 문자열 내에서 긴 문자열이 일치하는지 테스트 할 필요가 없습니다.

후보를 삭제할 때 : 가장 짧은 문자열부터 시작하여 특정 길이의 모든 문자열을 테스트 한 후에는 비교 테이블에서 해당 문자열을 제거 할 수 있습니다. 다음 테스트에서는 시합.

물론 하나의 SQL 문을 프로그래밍하는 것보다 더 많은 프로그래밍이 필요합니다. 그리고 "phrase match"가 정확하게 작동하는 방식에 의존합니다.

DTS 또는 SSIS도 여기에 친구가 될 수 있습니다.

관련 문제