2014-09-16 4 views
0

어떤 종류의 문자열/텍스트 일치를 구현해야합니다.
나는 일치해야하는 비디오 게임 타이틀 (이름)의 두 목록이 있습니다.
목록은 EntityFramework6을 사용하여 다른 데이터 중에서 DB에서 가져옵니다. 하나의 레코드는 두 개의 유니 코드 문자열, 분리 된 제목 접두어 및 나머지 제목을 포함합니다. 목록 A의게임 제목 문자열의 1000 개 레코드를 일치시키는 좋은 방법은 무엇입니까?

예 :

prefix title 
An  | Amazing race 
An  | Amazing Race 2 
     | Super Racer 
The | Death race: Revenge 
     | reveng of Björn the Dead racer: game with really long title 
... 

오타 및 불일치 데이터의 특성을 보여 의도적이다.
List A는 손으로 입력 한 새 레코드를 포함하여 사용자가 편집 할 수 있으므로 오타, 붙어있는 단어 등이있을 수 있습니다.
처음에는 목록 B를 한 번에 하나씩 건너 뛰고 A에서 일부 레코드와 일치 시키거나 '일치하지 않음'을 얻으려고합니다. 대소 문자를 구분하지 않는 간단한 비교가 있습니다. 분명히 훌륭한 해결책은 아닙니다.

목록 B는 할 수있는 일이 같은 :

 | AmazingRace 
     | Amazing Race 
An  | amazing race 2: Even More Amazing 
     | AmazingRace3 
     | Gatez of C'thu'thotz: You will die every minute or possibly more 
... 

기록이 아닌 고유하며 가능한 한 A : 많은 B.
내가 약 1000 각 목록의 레코드에 100 단위에 볼 수 있습니다.

나는 데이터 그리드에 데이터가 표시되기 때문에 자신의 간단한 단어 인덱싱 시스템을 만들려고 생각하고 있습니다. 그래서 빠른 필터링과 검색을 위해 나중에 필요할 것입니다. 인덱싱을 구현 한 경험이 거의 없습니다. (내 경험은 char Trie에 끝납니다.)
또 다른 옵션은 Lucene.net과 같은 기존의 강력한 시스템을 사용하는 것입니다. 그러나 전체 텍스트를 대상으로하므로 내 경우에 잘 작동하는지 잘 모르겠습니다. 게임 세계 나 영어 이외의 제목에서 흔히 볼 수있는 자연 언어 단어에 문제가있을 수 있습니다.
플러스가 있을지도 모르지만 지금은 더 좋은 옵션이 있습니다.

이 방법에 최선의 방법에 대한 조언 크게 감사하겠습니다.
(제발 그렇게 위대한 영어를 용서해주십시오)

답변

1

아주 효율적인 방법으로 두 데이터 세트를 비교하는 훌륭한 방법이 있습니다. 이 기술은 SimHash이라고합니다. 요약하면 텍스트에 포함 된 하위 문자열을 기반으로 텍스트의 지문 (정수 값)을 만듭니다. 좋은 점은이 지문을 사용하여 전체 텍스트 대신 문서를 비교할 수 있으며 정수 값이므로 훨씬 빠릅니다.

은 여기에서 시작하는 몇 가지 링크가 있습니다

PS합니다. 의심이 있거나 더 많은 정보가 필요하면 답을 업데이트 할 수 있습니다.

+0

좋은 생각입니다. 감사. 내 구체적인 데이터가 어떻게 작동하는지 궁금해. 나는 지금 그것을 구현하려고 노력하고 돌아올 것이다. – Riva

관련 문제