2011-04-28 8 views
11

TL 요약 : 동의어 및 기타 관련 단어를 얻는 데 사용할 수있는 단일 명령 줄 응용 프로그램이 필요합니다. 다국어 지원이 필요하며 교차 플랫폼으로 작동합니다. 누구든지 나를 위해 적절한 프로그램을 제안하거나 내가 이미 찾은 프로그램을 도와 줄 수 있습니까? 감사.


긴 버전 : 나는 사용자가 입력 한 단어에 대한 대체 제안을 가지고 올 수 PHP에서 시스템을 작성하는 임무가 주어 왔습니다. 나는 시소러스 응용 프로그램/API 또는 유사점을 찾아서 이러한 제안을 생성 할 수 있어야합니다.PHP 용 Thesaurus 클래스 또는 API

중요하게 다국어 (영어, 덴마크어, 프랑스어 및 독일어) 여야합니다. 이는 내가 Google을 사용하여 찾을 수 있었던 대부분의 소프트웨어를 배제합니다. 또한 크로스 플랫폼이어야합니다 (Linux 및 Windows에서 작동해야 함).

내 연구에 따르면 2 명의 유망한 후보자 인 WordNetStardict이 있습니다.

저는 지금까지 WordNet에 초점을 맞추어 왔고, shell_exec() 함수를 사용하여 PHP에서 호출했으며, 매우 유망한 프로토 타입 PHP 페이지를 만드는 데 사용했습니다. 그러나 영어로만되어 있습니다. 나는 그것을 다국어로 사용하는 방법에 어려움을 겪고있다.

Wordnet 사이트는 다른 언어 (예 : 덴마크어의 경우 DanNet)로 Wordnet 프로젝트에 대한 외부 링크를 가지고 있지만 워드 넷이라고도 불리는데 다양한 데이터베이스 형식과 소프트웨어를 사용하는 것처럼 보이기 때문에 나를 적합하지 않게 만듭니다 . 내 PHP 프로그램에서 호출 할 수있는 일관된 인터페이스가 필요합니다.

Stardict는 이러한 관점에서 더 유망 해 보였습니다. Stardict는 하나의 응용 프로그램에 대해 표준 DB 형식으로 여러 언어로 사전을 제공합니다.

그러나 Stardict의 단점은 주로 GUI 응용 프로그램이라는 것입니다. 명령 줄에서 호출하면 GUI가 시작됩니다. 분명히 커맨드 라인 버전 (SDCV)이 있지만 상당히 오래된 것으로 보입니다 (2006 년 최신 업데이트). 리눅스에서만 가능합니다.

누구도 이러한 프로그램 중 하나에 내 문제를 해결할 수 있습니까? 아니면 다른 사람이 사용할 수있는 다른 대체 소프트웨어 나 API를 제안 할 수 있습니까?

감사합니다.

답변

6

당신은 PostgreSQL을의 전체 텍스트 검색 기능을 활용을 시도 할 수 있습니다 :

http://www.postgresql.org/docs/9.0/static/textsearch.html

당신은 당신의 요구에 맞게 사용 가능한 언어 및 데이터 정렬의 모든 종류의로 구성 할 수 있습니다. PostgreSQL 9.1은 접근법이 합리적인 것처럼 보일지 모를 몇 가지 추가적인 데이터 정렬 기능을 추가합니다.

기본 단계는 (각 언어에 대해) 다음과 같습니다

  1. 가 필요한 테이블 (적절하게 대조)를 만듭니다. 우리를 위해, 하나의 열 (Aspell을/오픈 오피스에서 그 작동합니다)는

    create table dict_en (
        word text check (word = lower(word)) primary key 
    ); 
    
  2. 이 필요한 사전/동의어 사전 파일 가져 오기 : 예컨대, 충분하다.

  3. 관련 파일을 사용하여 텍스트 검색 (위 링크, 즉 12.6 절 참조)을 구성하십시오.

  4. 전체 사전을 테이블에 삽입하십시오.

  5. 그리고 마지막으로 인덱스 벡터 (확실히 ... 어딘가 csv 파일있다) 예 :

    create index on dict_en using gin (to_tsvector('english', word)); 
    

이제이 인덱스를 사용하는 쿼리 실행할 수 있습니다

-- Find words related to `:word` 
select word 
from dict_en 
where to_tsvector('english', word) @@ plainto_tsquery('english', :word) 
and word <> :word; 

각 언어에 대해 별도의 데이터베이스 또는 스키마를 만들고 언어 매개 변수 때문에 Postgres가 표현식 색인을 거부하면 추가 필드 (tsvector)를 추가해야 할 수도 있습니다. (필자는 오래전에 전체 텍스트 문서를 읽었습니다). 이것에 대한 자세한 내용은 12.2 절에 나와있을 것입니다. 위와 같은 경우 위의 조정 방법을 알 수있을 것입니다.

구현의 세부 사항에 관계없이이 방법이 효과가 있다고 생각합니다. 나는 그것의 다국어 여부를 모르겠어요하지만

+0

+1 여기에 유용한 것들이 있기 때문에 +1. 우리는 MySQL 데이터베이스를 가지고 있지만 비슷한 검색 기능을 가지고 있다고 생각합니다. 당신은 '필요한 사전/시소러스 파일 가져 오기'와 '테이블에 삽입'에 대해 약간의 글을 훑어 보았습니다. 적절한 파일을 찾고 있었지만 아직 행복하지 않은 것을 찾지 못했습니다. 모든 포인터를 환영 할 것입니다. 감사. – Spudley

+0

직접 해보지는 않았지만, 메모리가 postgres에 도움이된다면 doc은 어떤 시점에서 aspell 및 openoffice 소스 파일을 언급합니다. 나는 이것이 후자의 두 가지에 대한 사전 파일이 가능하고 어딘가에 있다는 것을 의미한다. –

+0

감사합니다.나는 파기를 계속할 것이다. 당신이 최고의 대답이기 때문에 당신을위한 현상금,하지만 난 아직 정말로 문제를 해결했다고 생각하지 않습니다. – Spudley

6

여기 동의어 사전 API 사용을위한 PHP 예제가있다 ... 이탈리아어, 영어, 프랑스어, 독일어, 스페인어, 포르투갈어

http://thesaurus.altervista.org/testphp

가 사용할 수 있습니다.

+0

고마워요. 좋아 보인다. 아래쪽 : 1) 제 3 자에 의존하지 않고 사전을 로컬로 유지하는 편이 좋으며, 2) 더 중요하게는이 프로젝트의 핵심 요구 사항 인 덴마크어를 지원하지 않습니다. 부끄럽다. 왜냐하면 그렇게했다면 원격 서비스라는 사실을 받아들이는 유혹을받을 수 있었기 때문이다. – Spudley

+0

오픈 오피스 시소러스를 사용합니다. 그게 내가 로컬로 사용할 수있는 옵션 일지 궁금해? 거기에 사용할 수있는 API가 있습니까? – Spudley

+0

흠 - 잘 모르겠다 -이 스레드보기 : http://user.services.openoffice.org/en/forum/viewtopic.php?f=7&t=34238 – Fenton