2010-07-11 2 views
1

미리 정의 된 문자열의 퍼지 일치에 대한 모든 항목을 검사하여 텍스트 기사의 스트림을 필터링해야합니다 (맞춤법이 틀린 제품 이름을 검색하고 있으며 때로는 단어의 순서가 다르며 문자가 아닌 문자가 포함되어 있음) ":"또는 ",").데이터베이스를 사용하지 않고 퍼지 런타임 검색

나는이 기사를 스핑크스 색인에 넣고 검색을 수행함으로써 훌륭한 결과를 얻었지만, 불행히도 모든 기사를 얻은 후 매초마다 수백 개의 기사를 얻었고 모든 기사를 얻은 후에 색인을 업데이트하는 것이 너무 느리다. (그리고 나는 그렇게 설계되지 않았다는 것을 이해한다. 태스크). 작은 ~ 100kb 텍스트의 메모리 인덱스를 구축하고 퍼지 검색을 수행 할 수있는 라이브러리가 필요합니다.이 같은 것이 있습니까?

답변

1

이 문제는 Bayesian spam filtering과 거의 동일하며 이미 작성된 도구는 기준에 따라 인식하도록 훈련 할 수 있습니다.

코멘트에 대한 응답으로 추가 :

은 어떻게 당신은 지금 쓰레기통에 스트림을 분할하는? 이미 분리 된 기사로 구성된 코퍼스가있는 경우 분류 기준으로 피드를 보내십시오. 베이지안 분류자는 문맥에서 퍼지 (fuzzy) 콘텐츠 일치를 수행하는 방법이며 스팸에서부터 뉴클레오티드, 천문학적 스펙트럼 카테고리에 이르기까지 모든 것을 분류 할 수 있습니다.

당신은 덜 확률적인 방법 (예 : Levenshtein)을 사용할 수 있지만, 어느 시점에서는 히트와 미스의 차이점을 설명해야합니다. 베이지안 방법의 장점은 특히 이미 분리 된 코퍼스가있는 경우 분류하는 방법을 명시 적으로 명시 할 필요가 없다는 것입니다.

+0

들으, 이것은 매우 밝은 생각하지만, 불행히도 지금은 (6-7 단어) 긴 검색 문자열을 위해 좋은 작동하지 않습니다 필터와 AFAIK 베이지안 필터링을 훈련 할 수 없다. – Riz

+0

FAYK가 잘못되었습니다. 분명히 필터를 훈련 할 시간이 없을뿐만 아니라 RTFWA에 시간이 없습니다. – msw

+0

LOL, 틀리게하지 마라. 내가 필터를 훈련 시키기에는 게으르다거나 (위키 백과를 읽지는 않는다), 그러나이 필터의 양은 꽤 클 수있다. 그래서 나는 모든 사람을 위해 훈련 된 필터 세트를 준비 할 수 없다.) 그리고 "add filter - check - train - repeat"루프를 만드는 것이 내 작업을위한 최선의 해결책이 아닙니다. 최종 사용자는 훈련 필터에 더 많은 시간을 소비하는 대신 잘못된 결과를 얻는 것을 선호합니다. 긴 검색 문자열에 관해서는 내가 틀릴 수도 있습니다. 내 이메일 클라이언트에서 베이지안 스팸 필터링을 사용하는 것은 개인적인 경험입니다 :) – Riz

1

sqlite fts3 확장자를 사용하는 것은 어떻습니까?

가상 테이블 만들기 enrondata1 USING fts3 (content TEXT);

는 (당신은 열이 원하는 개수만큼 생성 할 수 있습니다 - 모두 인덱싱 할 것이다) 그 후

을 당신이 원하는대로 삽입하고 인덱스 재 구축없이 검색 할 수 있습니다 - 특정 열 또는 전체 중 하나와 일치 열.

(http://www.sqlite.org/fts3.html)

+0

Thx 제안을 위해 sqlite를 약간 사용하여, porter tokenizer로 fts3을 사용하면 정말 좋은 결과를 얻을 수 있지만 검색 문자열이 "Toy Story 3 something"이고 텍스트가 포함 된 경우에는 작동하지 않습니다. "토이 스토리 3 some_other_word":( – Riz

관련 문제