2013-03-09 2 views
0

사용자가 단어 집합 (일반적으로 10 개 미만)을 제공하고이 단어의 모든 동의어를 검색해야하는 C# 응용 프로그램에서 작업하고 있습니다. 이것은 사전과 이런 것들로 일하는 나의 처음입니다. 따라야 할 단계와 동의어를 제공하는 기존 사전이 내 애플리케이션과 통합 할 수 있는지 또는 내가 사용할 수있는 오픈 소스 애플리케이션이나 코드가 있는지 알아야합니다.쿼리 확장을 수행하는 방법

+0

함께 작업 할 사전이 있습니까? 로컬 사전이어야합니까, 아니면 API를 사용할 수 있습니까? –

+0

검색 중 "사전 API"가 많은 결과를 반환합니다. 여기에 그 중 하나가 있습니다. http://www.dictionaryapi.com/ – Fredrik

+0

친애하는 TheGreatCO 님, 저는 사전 작업이 없으므로 사전은 로컬이어야합니다. 정확하게 사전이 필요하지 않습니다. 특정 단어에 동의어를 제공하는 일종의 시소러스, 일종의 검색어 확장이 필요합니다. 친애하는 FredrickRedin 저는 연구를했는데 API 만 찾으면 그럴 필요가 없습니다. – user1905455

답변

1

첫 번째 질문에 답하십시오. 동의어 사전은 다음에서 다운로드 할 수 있습니다 : http://wordpresscloaker.com/blog/download-free-english-thesaurus-format-txt.html

나는 해당 파일의 품질, 정확성, 적법성, 사용 허가 또는 완전성에 대해 약속하지 않습니다. 그러나 이것은 당신을 도울 것입니다. mthesaur.txt를 추출하여 프로젝트 폴더에 추가해야합니다. 이제 우리는 C#에서 키/값 사전에 모든 것을 가지고

var reader = new StreamReader(File.OpenRead(@"C:\mthesaur.txt")); 
var dict = new Dictionary<string, string>(); 
while (!reader.EndOfStream) 
{ 
    // Read the file line by line. 
    var line = reader.ReadLine(); 

    // If the line isn't null, we can use it. This shouldn't happen but it is a good sanity check. 
    if (line == null) continue; 
    // Split the line by the delimiter (a comma) so we can get the main word, the first one on the line. 
    var splitLine = line.Split(','); 
    var mainWord = splitLine[0]; 
    // To save us from having to loop through and only get the indexes above 0 (eg, skip the main word) we will just simply remove it from the line so we have just synonyms. 
    line = line.Replace(mainWord + ",", string.Empty); 
    // Now we make use of the dictionary type in C# and add the mainword as the key and the synonyms as the value. 
    try 
    { 
     dict.Add(mainWord, line); 
    } 
    catch (ArgumentException argEx) 
    { 
     Console.WriteLine("Attempted to add {0} to the dictionary but it already exists.", mainWord); 
    } 
} 

, 당신의 동의어를 쿼리 LINQ를 사용할 수 있습니다

다음, 당신은이 다음을 수행하여 텍스트 파일을 읽을 필요 입력 된 단어. 이것은 사전의 모든 키 값을 포함하는 드롭 다운 (매우 큰 드롭 다운과 사용자 탐색이 어렵 기 때문에 권장되지 않음), ListBox (더 쉽고 탐색하기 쉽도록), 또는 일반 텍스트 검색 상자. 여기에 사용자를위한 GUI를 다루는 것에 관한 내용이 없으므로이 질문에 대한 답변이 완전하지는 않지만 귀하의 질문에 대한 답변을 얻으실 수 있습니다.

+0

나는 당신의 코드를 시도했지만 컴파일 할 때 마지막 줄에 ArgumentException이 생기고 "같은 키를 가진 항목이 이미 추가되었습니다."라는 메시지가 나타납니다. 무엇이 잘못되었는지에 대한 어떤 생각? – user1905455

+0

@ user1905455 프로그램을 중단하지 않고이 예외를 잡을 수있는 대답을 업데이트했습니다. 그러나 Console.WriteLine에 중단 점을 두어 어떤 키가 특히 문제를 일으키는 지 확인하는 것이 좋습니다. 그런 다음 실제 시소러스 파일을 점검하여 프로그래밍 오류인지 코드 문제인지 확인하십시오. –

+0

이 코드가 잘 작동 해 주셔서 감사 드리며 반복되는 키를 발견했습니다. – user1905455

0

SQL full text search 또는 기본 기술인 Microsoft Search Server (무료 Express SKU가 있음)를 사용하는 경우 여러 언어 및 기타 자연 언어 처리 도구에 대한 동의어 사전을 찾을 수 있습니다. 물론 숙제가 아닌 실제 프로젝트를 진행하고 있다고 가정합니다 ...

오픈 소스에 대한 자세한 내용은 Lucene.net을 확인하십시오. 검색 엔진을 제공하며 꽤 시소러스를 가지고 있습니다.