2009-12-15 2 views
4

웹 응용 프로그램의 클라이언트 측에서 자동 완성/제안을 위해 사용할 수있게하려는 키워드 사전이 있습니다. Ajax 처리 시간이 길어지면 전체 단어 목록을 클라이언트에 저장하는 것이 좋습니다.지향 비순환 단어 그래프 (dawg)의 공간 효율성은 얼마입니까? 거기에 자바 스크립트 구현 무엇입니까?

목록은 수십만 단어, 어쩌면 몇 백만 개가 될 수 있습니다. 나는 약간의 연구를했는데, 그것은 구조가 공간과 검색 효율을 제공한다는 것을 솔기 웁니다. 그러나 실제 숫자를 찾을 수는 없습니다.

또한 동일한 기능을 수행하기위한 다른 가능성을 제안하십시오.

+0

더 자세히 살펴보면 아론의 답변을 읽은 후 아약스 대기 시간이 문제가되지 않을 가능성이 높습니다. dawg 또는 다른 어휘 저장에 대한 질문은 여전히 ​​남아 있습니다. 덕분에 –

답변

4

저는 최근에 워드 게임 프로그램을 위해 DAWG를 구현했습니다. 그것은 폴란드어에서 2,700 만 단어로 구성된 사전을 사용합니다. 소스 일반 텍스트 파일의 크기는 약 33MB입니다. 바이너리 파일에서 DAWG로 표현 된 동일한 단어 목록은 단지 5MB 밖에 걸리지 않습니다. 실제 크기는 구현에 따라 다르므로 정점 수 - 154k 및 가장자리 수 - 411k가 더 중요한 수치입니다.

여전히 데이터 양은 너무 커서 위의 설명처럼 JavaScript로 처리 할 수 ​​없습니다. 몇 MB의 데이터를 처리하려고하면 몇 분 동안 JavaScript 인터프리터가 중단되어 전체 브라우저를 효과적으로 매달리게됩니다.

0

당신의 솔루션은 실용적으로 들리지만, jQuery의 자동 완성 구현을보고 대기 시간을 어떻게 처리하는지 확인할 수도 있습니다.

+0

. 실제로 jQuery의 자동 완성 기능과 함께 더 나은 저장소/조회 메커니즘을 결합 할 계획입니다. –

0

메모리의 2 억 단어 (브라우저의 JavaScript)? 어떤 유형의 구조를 저장하든 상관없이 큰 소리입니다. 입력 된 문자를 기반으로 단어 목록의 하위 집합을로드하는 대신 다른 종류의 최적화를 고려할 수 있습니다.

예를 들어 사용자가 "a"를 입력하면 "a"로 시작하는 모든 단어를 검색하기 시작합니다. 그런 다음 더 일반적인 단어를 먼저 반환하여 단어 목록을 최적화 할 수 있으므로 일반적이지 않은 단어는 조금 느리게로드되는 반면 더 많은 단어는 "즉시"일치하게됩니다.

1

2 개의 사실 "2 천만"과 "자바 스크립트"에 나의 마음이 움츠 리다. JS는 메가 바이트가 아닌 작은 조각의 데이터를 섞어 버리기위한 것입니다. 얼마나 오래 사용자가 귀하의 페이지가로드 될 때까지 기다려야하는지 상상해보십시오!

귀하의 경우 AJAX 처리 시간이 너무 느려야하는 이유가 있어야합니다. Google은 매일 수십억 건의 AJAX 요청을 처리하며 그 유형은 매우 좋습니다 (www.google.com에서 시도해보십시오). 따라서 설정에 문제가있는 것이 틀림 없습니다. 그것을 찾아서 고쳐라.

+0

아론, 훌륭한 지적입니다. 구글의 제안은 100 밀리 초 미만으로 돌아서 충분히 빠릅니다. 그래도 건물의 효율성 수치는 궁금합니다. –

0

DAWG는 저장 및 단어 검색에 적합하지만 일치 목록을 생성해야하는 경우에는 적합하지 않습니다. 접두어를 찾으면이 접두어로 시작하는 단어를 다시 구성하기 위해 모든 자식을 통해 브라우저를 사용해야합니다.

다른 사람들의 의견에 동의 함, 당신은 서버 측 검색을 고려해야합니다.

관련 문제