2016-12-20 1 views
1

저는 C#의 프로젝트에서 10 ~ 15 개의 키워드와 그 동의어를 저장할 필요가 있습니다.C#에서 키워드와 동의어를 저장하기위한 데이터 구조?

KEYWORD1 synonym1의 synonym2

KEYWORD2 synonym1

KEYWORD3 synonym1 synonym2 : 그것과 같을 것이다 있도록

나는이를 저장하는 생각 첫 번째 방법은> 목록과 같은 2 차원 목록의 것을 사용했다

제가 생각하기 시작한 것은 입력 문자열을 받고 각 단어를 검색하여 목록의 키워드 또는 키워드의 동의어가 2d 목록이 이것에 문제가 없거나 검색 속도가 너무 느릴 것인가?

바라기를 바랍니다. 분명히 묻지 않으시면 제 질문이 의미가 있습니다. 감사!

+1

우리에게 보여주세요. 너 시험 한거야? –

+0

_10 ~ 15 개의 키워드 및 동의어 _ 입력 텍스트가 큰 경우가 아니면 속도가 문제가 될 것이라고 생각하지 않습니다. –

답변

4

검색 속도가 너무 느립니까?

키워드를 10.15 개로 말하면 최종 사용자가 느려진다는 사실을 알 수있는 알고리즘이 부족합니다. 현대 CPU 속도를 늦추는 데 필요한 데이터가 부족합니다.

한 가지 방법은 모든 동의어를 "표준"키워드에 매핑하는 Dictionary<string,string>을 작성하는 것입니다. 여기에는 표준 버전 자체가 포함됩니다.

var keywords = new Dictionary<string,string> { 
    ["keyword1"] = "keyword1" 
, ["synonym1"] = "keyword1" 
, ["synonym2"] = "keyword1" 
, ["keyword2"] = "keyword2" 
, ["synonym3"] = "keyword2" 
, ["keyword3"] = "keyword3" 
}; 

키워드 만 값으로 표시되는 반면 키워드와 동의어는 키로 표시됩니다. 이를 통해 키워드 또는 동의어를 찾아 보증 된 키워드를 얻을 수 있습니다.

+0

감사합니다. – Paul

1

아마도 사전을 사용할 것입니다. 여기서 열쇠는 동의어이며 값은 핵심 단어입니다. 따라서 사전에서 단어를 찾아보고 원하는 핵심 단어를 얻습니다. 예를 들면 다음과 같습니다.

private Dictionary<string, string> synonymKeywordDict = new Dictionary<string, string>(); 

public SearchResult Search(IEnumerable<string> searchTerms) 
{ 
    var keywords = searchTerms.Select(x => synonymKeywordDict[x]).Distinct().ToList(); 
    //keywords now contains your key words after being translated from any synonyms 
} 

경우에 따라 사전이 너무로드 될 수 있습니다.

private void LoadDictionary() 
{ 
    //So our lookup doesn't fail on the key word itself. 
    synonymKeywordDict.Add("computer", "computer"); 
    //Then all our synonyms 
    synonymKeywordDict.Add("desktop", "computer"); 
    synonymKeywordDict.Add("PC", "computer"); 
} 
관련 문제