2011-11-30 4 views
3

단어의 동의어를 쿼리하는 데 사용할 수있는 데이터베이스를 구성 할 계획입니다. 데이터베이스는 거대하게 끝날 것이므로 아이디어를 빨리 실행하는 것이 좋습니다.동의어에 필요한 디자인 조언 데이터베이스

저는이 작업을 수행하는 방법에 대해 생각해 왔지만 요즘의 데이터베이스 설계 기술은 아직까지는 문제가되지 않습니다.

처음 생각한 것은 각 단어를 한 테이블에 저장 한 다음 1 대 다수의 관계가있는 다른 테이블을 저장하여 각 단어를 다른 단어에 연결하고 그 테이블을 쿼리 할 수있게하는 것이 었습니다.

개발중인 응용 프로그램에서는 사용자가 단어를 강조 표시 한 다음 해당 단어를 입력하거나 데이터베이스에서 일부 동의어를 선택할 수 있습니다. 응용 프로그램은 사용자 입력에서 학습하므로 누군가가 "자동차"를 강조 표시하고 "모터"에 입력하면 데이터베이스가 이미 존재하지 않으면 관계를 연결하도록 업데이트됩니다.

내가 싫어하는 것은 사용자가 "가게"라는 단어를 입력하고 car라는 단어에 연결하는 것입니다. 그래서 저는 각 관계에 일종의 무게를 더할 필요가 있다고 생각합니다.

결국 사용자가 입력 한 동의어가 사용되어 특정 단어와 함께 사용되는 공통 동의어를 자동으로 선택할 수 있습니다. 낮은 체중의 단어는 표시되지 않으므로 상점의 체중이 매우 높지 않으면 상점이 자동차의 동의어가 될 수 없으며 아무도 그렇게하지 않을 가능성이 있습니다.

위의 소리가 맞습니까? 제안이나 개선점을 제공해 줄 수 있습니까?

+0

은이 응용 프로그램의 어떤 종류입니다 :

  • 제안 적어도 3 번 단어를 기준으로 제안을 생성하려면? 데스크톱? 편물? 또한, 일반적인 동의어에 대한 것인가, 또는 공통적으로 사용할 수있는 테이블을베이스 라인으로 사용할 수없는 특정 도메인을 대상으로합니까? – cdeszaq

  • +0

    동의어 테이블 관계에 대한 단어를 좋아합니다. 단어가 선택되지 않고 입력 된 경우 관계 ("자동차"대신 "상점")에 X 명이 넘는 사람이 입력하면 관계가 데이터베이스에 추가됩니다. –

    +0

    웹 응용 프로그램입니다. @ JohnieKarr는 입력 된 것이 많을수록 목록에 표시 할 무게가 충분해질 때까지 더 많은 가중치를 부여합니다. –

    답변

    1

    관계형 DB 관점에서 실제로 찾고있는 것은 단어 간의 다 대다 관계이며 관계에 대한 추가 데이터가있을 수 있습니다. 나는 그것을 구축 할

    WORD_TABLE 
    ---------- 
    id 
    word 
    
    RELATION_TABLE 
    -------------- 
    word_1_id 
    word_2_1d 
    weight 
    

    방법은 사용자가 다양한 단어 쌍 (위 또는 아래) 투표 할 수있는 방식으로 그것을 할 수 있습니다 :

    관계형 테이블과 같이 보일 것입니다. 이것은 당신에게 아주 간단한 방식으로 필요한 가중치를 줄 것입니다. 또한 동의어를 포함하거나 사용자에게 더 적은 작업을 제공하기 위해 시소러스 또는 기타 유사한 출처의 데이터로 사전 채우기를 원할 것입니다.

    또한이 종류의 데이터 구조에 대한 또 다른 용어는 가중 그래프입니다.

    일반적으로 관계형 데이터베이스는 그래프를 모델링 할 때 특히 좋지 않습니다 (그래도 할 수 있지만 더 나은 옵션이 있습니다). 관계형 데이터베이스의 대안으로 그래프 데이터베이스 (Neo4J가 떠오른다)를 조사하고 싶을 수도 있습니다.

    0

    동일한 엔티티 집합의 엔티티 내에서 다 대다 관계로 보입니다. 나는 모든 단어에 대한 하나의 테이블과 관계에 대한 하나의 테이블을 가질 것이다. 관계 테이블에는 단어 표에 두 개의 강제 키가 있습니다. 표는 당신이이 잘 작동합니다

    - fk1_to_w_pk ≠ fk2_to_w_pk 
    - both (fk1_to_w_pk, fk2_to_w_pk) and (fk2_to_w_pk, fk1_to_w_pk) do not already exist in Synonym 
    
    0

    확인 Synonym에 뭔가

    Word (w_pk, ....) 
    Synonym (fk1_to_w_pk, fk2_to_w_pk, weight) 
    

    같은

    추가 항목이 될 것입니다 :

    create table suggestions (
        word varchar(255), 
        suggestion varchar(255) not null, 
        weight float not null default 1.0, 
        primary key(word, suggestion, weight) 
    ); 
    
    • 사용자가 단어를 제안, 기본 가중치로 목록에 추가합니다.
    • 다른 사용자가 단어를 제안하면 1.0이라고 말하면서 체중이 증가합니다. select suggestion from suggestions where word = ? and weight > 3 order by weight desc.
    +0

    동의어 부분이 어떻게 작동하는지 설명하지 않습니다. – mlissner

    관련 문제