2013-06-24 2 views
2

저는 Delphi/Sql Server로 작성된 클라이언트 서버 DMS를 관리합니다.가능한 한 많은 파일 유형의 txt 콘텐츠를 검색합니다.

사용자가 db에 저장된 모든 문서 내에서 문자열을 검색 할 수있게하고 싶습니다. (파일은 blob로 저장되며 공간을 절약하기 위해 압축 파일로 저장됩니다).

내 아이디어는 "checkin"에 색인을 붙이는 것이므로 nwe 파일을 저장하면 텍스트 정보가 모두 추출되어 새로운 DB 필드에 저장됩니다. 그래서 어떻게 든 내 파일 테이블은 다음과 같습니다

ID_FILE integer 
ZIPPED_FILE blob 
TEXT_CONTENT text field (nvarchar in sql server) 
나는 그런 적어도 가장 일반적인 텍스트와 같은 파일의 "색인"을 지원하고자

: PDF, TXT, RTF, 문서, DOCX, PDF가 될 수를 xls와 xlsx, ppt, pptx를 추가합니다.

MS Office 파일의 경우 alerady가 내 응용 프로그램에서 ActiveX를 사용할 수 있으므로 txt 파일의 경우 파일을 읽을 수 있지만 pdf 및 odt는 읽을 수 있습니까?

"가장 두려워하지 않는"모든 파일 유형을 구문 분석하는 최고의 techinque 또는 타사 구성 요소 (무료가 아님)를 제안 해 주시겠습니까?

감사

+1

인덱싱이 클라이언트에서 수행되고 사용자가이 기능을 작동하도록 사무실을 설치하도록 강요하고 싶지 않기 때문에 이상적으로 ActiveX를 피하는 것이 꿈일 것입니다. 이것이 타사의 제안이 아닌 가난한 구성 요소를 요구하는 이유입니다 (btw 내가 "독자"구성 요소가 필요합니다) – LaBracca

+0

Gnostice PDFtoolkit 4.0 VCL PDF 파일을 당신을 위해 할 수 있거나, 파일을 사용하여 저를 위해 할 수 있습니다. – Despatcher

+0

코멘트 주셔서 감사합니다. 제게 "당신이 기대하는대로 텍스트를 얻지 못했습니다"에 대해 더 설명해 주시겠습니까? (단순한 아이디어이지 기술적 인 답변이 아닌가요?) – LaBracca

답변

2

귀하의 주요 문제는 데이터베이스 자체로 그들에게 헤아릴 수없는 수 데이터베이스에 BLOB로 퍼팅하기 전에 파일을 압축하는됩니다. 나는 다음을 제안 할 것이다.

데이터베이스에 넣은 파일을 압축하지 마십시오. 디스크 공간이 쌉니다.

파일을 텍스트 필드에 저장하는 한 다음과 같은 쿼리를 작성할 수 있습니다.

Select * from MyFileTable Where MyFileData like '%Thing I am looking for%' 

이것은 느리지 만 작동 할 것입니다. 대부분의 파일 유형에있는 텍스트가 2 진 파일이 아니기 때문에 작동합니다 (최신 파일 유형 중 일부가 바이너리 임에도 불구하고).

당신은 그것을 넣을까요

모든 파일 형식을 "두려움없이"파싱 하시겠습니까?

+0

많은 데이터베이스에는 BLOB 필드에 압축을 사용하는 옵션이 있으므로 아무 것도 포기할 필요가 없습니다. –

+1

NoSQL 데이터베이스는 일반 데이터베이스와 비교할 때 특히 전체 텍스트 검색에 적합한 좋은 솔루션입니다. Apache Solr, Elastic Search (둘 다 Lucene에서 작성)는 좋은 솔루션입니다 (그러나 많은 읽기/테스트가 필요합니다). 토비에게 +1. 그들 사이에 테이블과 관계가 필요하면 SQL 서버를 사용하고, Solr/Elastic에서는 문서 내용을 색인화하십시오. –

+0

@ GregM. 나는 동의한다. 그러나 SQL Server는 제거 할 수없는 제약 요소입니다. 그래서 저는 지금 "트릭 도메인"에 있습니다. 저는 종종 일부 기능 (Windwos 보안, SQL 서버 아키텍처)을 악용하여 문제를 해결했습니다. 마침내 더 관심이있는 것은 호르도 왕성이 아닌 해결책을 찾는 것입니다. – LaBracca

3

이 방법으로 문서를 검색하는 것은 매우 느리고 불편하여 사용하기에 TEXT_CONTENT 필드 대신 두 개의 추가 테이블을 생성합니다.

텍스트를 구문 분석 할 때 귀중한 단어를 추출하여 표준화하여 - 대소 문자 문제를 제거하십시오. - 서로 교환 할 수있는 문자를 제거하십시오.
즉 터키에서는 c로 입력 할 수있는 ç 문자가 있습니다. - 다루는 언어에서 흔히 사용되는 동사를 제거하십시오. "내가 찾고있는 것", "존재하는 것" "찾고있는"것이 관심사가 될 수 있습니다. - 문제가있는 얼굴을 제거하십시오.

이미 테이블에 항목이있는 각 단어는 string_search 테이블에 이미 지정된 ID를 다시 사용해야합니다.

레코드는 다음과 같이 보일 수 있습니다. original_file_table zip_id 번호 zip_file 블롭

string_search str_id 번호 standardized_word 텍스트 (또는 적절한 보조 인덱스 문자열 타입)

file_string_reference zip_id 번호 str_id 번호

나는 내가 줄 수 있기를 바란다. 너 내가 생각하고있는 생각이야.

+0

제안에 감사드립니다. 이것은 내 문제를 해결하는 방법 (= 모든 주요 "텍스트 파일"에서 텍스트를 추출 할 수있는 고유 한 구성 요소가없는 경우)보다 응용 프로그램 디자인에 관한 것입니다. – LaBracca

+0

나는 내 문제가 완전히 해결되지 않은 경우에도 현상금을 수여했습니다. 250 포인트를 사용했기 때문에, 당신을 잃어 버렸을 때보 다 더 잘 줄 것입니다. – LaBracca