문제

여기에서 작품,우리는 종종 찾아야하는 문자열의 목록에서 문자열에 가장 가까운 경기를 다른 어떤 입력 문자열입니다.현재 우리가 사용하는 Needleman-를 설립시켰 알고리즘이 있습니다.알고리즘을 자주 반환한 많은 잘못(로 설정할 경우에는 최소한의 점수를 너무 낮),때로는 그렇지 않기 때 그것을 해야 합니다(때 최소한의 점수는 너무 높이)및 대부분의 시간,우리는 결과를 확인합니다.우리는 생각은 우리가 시도해야 다른 대안을 찾기 시작했습니다.

당신은 어떤 경험으로 알고리즘?당신은 얼마나 알고리즘을 비교하니까?

정말 감사드리겠습니다.

PS:우리는 코딩에서는 C#,하지만 당신은 걱정하지 말고 그것에 대해-나에 대해 묻는 알고리즘에서는 일반적이다.


Oh,난 언급하는 것을 잊었니다.

아니오,우리는 그것을 사용하지 않을 중복 데이터입니다.우리의 목록이 있는 문자열을 우리가 찾고있-우리는 그것을 검색 목록이다.그리고 우리는 필요한 프로세스에서 텍스트를 다양한 소스(예 RSS 피드 웹 사이트,포럼,etc.) -우리은 부분을 그들의 텍스트(가 전체 세트에 대한 규칙의는,그러나는 관련이 없는)그리고 우리가 일치해야들에 대한 검색 목록이다.는 경우 문자열과 일치 하나의 문자열에서 검색-목차-우리는 몇 가지 작업을 수행해야의 추가 처리한 것(는 또한 무관).

우리는 할 수 없을 수행하는 정상적인 비교하기 때문에,이 문자열에서 추출 외부 원본,대부분의 시간을 포함하는 몇 가지 추가 단어 등등.

어쨌든,그것의 중복을 탐지합니다.

도움이 되었습니까?

해결책

OK,Needleman-를 설립시켰(NW)고전적인 end-to-end("global")얼라이너로서의 생물정보학 문학.그것은 오래 전으로 사용할 수 있"align"및"align0"에 FASTA 패키지입니다.차이었다"0"버전지 않았으로 편견에 대해를 피하고 최종 갭는 허용되는 종종 선호하는 높은 품질의 내부 경기 쉽습니다.스미스-워터,나는 당신을 의심하고,지역 동기기와 원래의 기초를 폭발합니다.FASTA 그것의 자신의 지역 aligner 뿐만 아니라는 약간 다릅니다.모든 이들의 본질적으로 추론 방법에 대한 추정 Levenshtein 거리에 관련된 점수는 메트릭에 대한 개별적인 캐릭터 쌍(바이오정보학,종종에 의해 주어진 Dayhoff/"PAM",Henikoff&Henikoff,또는 다른 매트릭스 보통 대체로 무언가가 간단하고 합리적으로 반사체에서 언어 단어 형태에 적용하면 자연어).

Let's 되지 않을 소중에 대해 레이블:Levenshtein 거리에서 참조하는 실천에서 적어도 기본적으로 편집하거리고 당신은 그것을 평가하기 때문에 그것은 가능하지 않은 컴퓨팅 그것은 일반적으로,그리고 비용을 계산하는 정도에서 흥미로운 특별한 경우:은 물을 가져옵 깊은 빠른이며,따라서 우리가 경험적 방법을의 오래와 좋은 평판.

지금 당신의 자신의 문제는:몇 년 전에 나의 정확성을 확인하기 위해 짧은 DNA 읽기에 대한 시퀀스에 참조로 알려져 정확하고 나는 뭔가라"고정형".

아이디어를 참고 문자열을 설정하고,"digest"그것에 의해 발견되는 모든 지역 주어진 N-문자 하위 문자열이 발생합니다.선택 N 는 표를 구축할이 너무 크지 않지만 또한 그렇게는 하위 문자열의 길이는 N 하지 않은 너무 일반적입니다.을 위한 작은 알파벳과 같은 DNA 기초,그것은 가능한 완벽한 해시의 문자열 N 캐릭터와 테이블이 체인의 일치에 연결 목록에서 각 bin.목록 항목을 확인해야 한 시퀀스를 시작하의 위치를 하위 문자열을 매핑되는 빈에서는 그의 목록을 그들이 발생합니다.이들은"앵커 목록에"문자열을 검색는 NW 맞춤 가능성이 높은 유용합니다.

쿼리를 처리할 때 문자열을 가지고,당신을 데려 N 에서 시작하는 문자 중 일부는 오프셋에서 K query string,해시 그들에게,자신의 bin 면,목록에 대한 그 궤는 다음이 비어 있지 않은 가을 통해 모든 목록을 기록하고 수행렬 사이의 값을 검색 문자열에서 참조하는 기록이다.을 할 때 이러한 선형,을 쿼리 문자열과 문자열 검색 앵커를 추출의 하위 문자열을 검색하는 문자열은 동일한 길이가 쿼리로 문자열을 포함하는 것을 앵커에 같은 오프셋,K.

선택하면 충분히 앵커 N 길이,그리고 합리적인 설정 값의 오프셋 K(할 수 있 확산에서 쿼리를 문자열 또는 제한한 낮은 오프셋)당신이 가야 하위 집합이 가능한 선형 및 종종을 얻을 것이 명확하게 승리입니다.일반적으로 사용하고 싶을 것이 더 적은 끝에-바이어스 align0 같은 NW aligner.

이 방법을 시도를 높일 수 NW 트로 제한하여 그것의 입력이 있는 성능을 얻기 때문에 당신이 적은 선형 및 그들은 더 자주 사이에 유사한다.또 다른 좋은 것과 함께 할 NW aligner 하도록 허용 후 금액 또는 일부의 길이 빈틈이 발생하는 비용을 절감하기 위해,특히 알고 있는 경우에 당신은하지 않을 보거나 관심이에서 중간 제품 품질의 일치합니다.

마지막으로,이 방법이 시스템에서 사용하는 작은 알파벳,함께 K 한 첫 번째 100 도 위치에서 쿼리 문자열을 검색과 문자열을 보다 훨씬 더 큰 쿼리(DNA 를 읽었 약 1000 베이스와 검색 문자열의 순서에 10000,한 대략적인 부분과 일치하는 정당화에 의해 예상의 편집 거리히).이 방법론을 적응하는 자연 언어요 일부는 주의 생각:당신에게 알파벳 크기는 하지만 당신은 이득하는 경우 쿼리 문자열을 검색 문자열의 길이 있습니다.

어느 쪽이든 할 수 있도록,하나 이상의 닻에서 서로 다른의 끝을 쿼리 문자열을 동시에 사용될 수 있습에 도움이 될 더욱 데이터 필터링을 먹을 제공하지 않습니다.이렇게 하면 준비를 보낼 가능성이 겹치는 각 문자열을 포함하는 두 가지 중 하나 앵커를 얼라이너 및 그 조정 선형...또는 아마도 더 수정 NW 을 강조한 유지의 앵커 대부분 그대로 유지되는 동안 정렬이 사용하여 벌금 수정하는 동안 알고리즘의 실행합니다.

희망을 이해하는데 도움 또는 적어도 재미있다.

다른 팁

관련 Levenstein 거리:수도 있을 정규화하여 결과를 분할 길이의 긴 문자열이다,그래서 당신은 항상을 얻을 수가 0 과 1 사과 비교할 수 있도록의 거리는 한 쌍의 문자열이 의미 있는 방식으로(식 L(A,B)>L(A,C)-예를 들어-은 의미가 없지 않는 한 당신은 정상화의 거리).

대체하는 알고리즘을 보는 판도라- (위키백과 입장에서 판도라-), FASTA 발 생물 시퀀스를 매칭 알고리즘이 있습니다.이들의 특별한 경우 대략적인 문자열치, 또한,에 스토니 브룩 알고리즘 repositry.는 경우 지정할 수 있는 방법은 문자열이 서로 다르다,당신은 아마에 초점을 맞는 알고리즘이 있습니다.예를 들어,aspell 사용하여 어떤 변형의"soundslike"(사운 덱스-메타 폰)거리에서와 함께"키보드"거리를 수용 나쁜 명의 참가자들과 나쁜 변화합니다.

우리가 사용하는 Levenshtein 리 는 방법을 확인에 대한 중복된 고객 데이터베이스에서.그것은 확실히 잘 작동한다.

FM Index 으로 되돌아와 유사한 Bowtie 퍼지 aligner

을 최소화하기 위해서는 불일치로 인해 약간의 변형 또는 오류를 맞춤법,내가 사용한 메타 폰 알고리즘,다음 Levenshtein 거리(확장 0-100 백분율로 경기에서)메타 폰 인코딩에 대한 측정의 친밀감.는 것으로 보인 일입니다.

에 확장하기 위하여 Cd-는 남자의 응답,당신을 마주하고 있는 정상화 문제입니다.그것은 분명하지 않을 처리하는 방법에 점수를 사이에 선형 다양한 길이 있습니다.

주어진에 관심이 무엇인지,당신할 수 있습을 얻으려는 p 값을 정렬합니다.를 사용하는 경우 Needleman-를 설립시켰을 얻을 수 있습니다 이들 p-값을 사용하여 카를린-알트츌 통계 http://www.ncbi.nlm.nih.gov/BLAST/tutorial/Altschul-1.html

폭발할 수 있습니다 로컬 정렬하고 평가를 사용하여 이러한 통계입니다.에 대한 관심이 있는 경우 속도,이 것은 좋은 도구를 사용하실 수 있습니다.

또 다른 옵션은 사용하는 디스크.디스크 사용하여 프로필의 숨겨진 마르코프 모델을 맞춥니다.개인적으로,저는 이것을 생각하는 더 강력한 접근 방식 때문에 그것은 위치 정보 또한 제공합니다. http://hmmer.janelia.org/

나는 작업에 사용되는 몇 가지의 더러운 데이터는 당신이 이제까지 발견 할 것이다.평균에 대해 5000 행의 데이터(이에 상응하는 수백 수천 달러)이 필요합니다 일치하는 완전히 소모됩니다.내 첫 경험이 퍼지와 일치하는 알고리즘을 했에서 미스터 엑셀에서 작성 VBA.그것은 특정 문제에 일관성 있는 것을 내가 될 것으로 예상된 제로 퍼센트지 않은 타고 들었다 약 60%를 보였다 더 다음과 같이 90%입니다.그래서 나는 이동 Levenshtein 그리고 나중에와 교신할 수 Levenshtein.이것은 주요 개선이지만 매우 느리게됩니다.다음을 생략하 Jaro-Winkler 그러나 신속하게 떨어졌다 그것은 곧 나.마지막으로,2016 년 나는 나 자신의(기반으로 n-gram)정제를 통해 다음 2 년입니다.오늘은 추가라는 Flookup;당신은 그것을 얻을 수 있습니다 구글에 시트와 어떻게 보유하고있다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top