2010-12-23 6 views
2

특정 문자열이 올바른 철자가 맞는지 확인하는 쉬운 방법을 찾고 있습니다. 예를 들어 'look'은 True를 반환하고 'hurrr'은 False를 반환합니다. 맞춤법 추천이나 맞춤법 교정 기능이 필요하지 않습니다. 문자열을 취하고 부울 값을 반환하는 단순한 함수.C++ : 단어의 철자가 올바른지 확인하십시오.

PyEnchant를 사용하여 Python에서 쉽게이 작업을 수행 할 수 있지만 MS Visual C++에서 사용하려면 라이브러리를 직접 컴파일해야합니다.

+0

관련 항목 : http://stackoverflow.com/questions/862699/c-spellchecker-library – nico

답변

3

PyEnchant는 C 및 C++ 인터페이스를 제공하는 C 라이브러리 인 Enchant을 기반으로합니다. 그래서 C++ 용으로 사용할 수 있습니다. 자신의 SVN repository를 참조

#include <memory> 
#include <cstdio> 

#include "enchant.h" 
#include "enchant++.h" 

int main() 
{ 
    try 
     { 
      enchant::Broker *broker = enchant::Broker::instance(); 
     std::auto_ptr<enchant::Dict> dict (broker->request_dict ("en_US")); 

      const char *check_checks[] = { "hello", "helllo" }; 
      for (int i = 0; i < (sizeof (check_checks)/sizeof (check_checks[0])); ++i) 
     { 
      printf ("enchant_dict_check (%s): %d\n", check_checks[i], 
       dict->check (check_checks[i]) == false); 
     } 

    } catch (const enchant::Exception &) { 
     return 1; 
    } 
} 

더 많은 예제/테스트의 경우 : 최소한의 예는 다음과 같이 될 것입니다.

+0

이것은 내가하고 싶은 것이지만, C++에서 외부 라이브러리를 사용하는 경험은 거의 없습니다. 그들은 바이너리를 제공하지 않기 때문에 프로젝트에 모든 인챈트 파일을 포함시켜야합니까, 아니면 PyEnchant에 포함 된 .dll을 어떻게 사용할 수 있습니까? – Nikolai

+1

@Nicholas : MSVC 프로젝트 파일이있는 것 같습니다. 라이브러리를 작성한 다음 자신의 코드에서 참조 할 수 있습니다. 단순히 자신의 프로젝트에있는 모든 파일을 포함하면 일반적으로 잘 작동합니다. – jalf

2

이러한 기능을 직접 구현하려면 주어진 단어의 유효성을 확인하기 위해 데이터베이스를 쿼리해야합니다 (보통 Linux의 경우 /usr/share/dict/words처럼 일반 텍스트 파일이면 충분합니다).

그렇지 않으면 제 3 자 맞춤법 검사 라이브러리에 의존 할 수 있습니다.

-1
bool spell_check(std::string const& str) 
{ 
    std::cout << "Is '" << str << "' spelled correctly? "; 
    std::string input; 
    std::getline(input); 

    return input[0] == 'y' || input[0] == 'Y'; 
} 
+2

대체 무엇입니까? –

+0

스너키지만, 사양에 맞는 올바른 질문에 대한 답변. –

+0

당신이 이해하지 못하는 기능은 무엇입니까? –

2

당신은 거기 밖으로 GNU 사전 중 하나 (같은 언급 한 바와 같이 /usr/share/dict/words)를 타고, 성능 요구에 당신을 따라 빠른 조회 및 회원 확인을주지 적절한 데이터 구조로 같은 그것을 만들 수 directed acyclic word graph 또는 단지 trie 일 수도 있습니다.

1

처음에는 단어 목록이 필요합니다. (/usr/share/dict/words 어쩌면?)

단어 목록을 std::set으로 읽어야합니다. 그런 다음 올바른 철자 테스트는 단순히 사용자 입력 단어가 세트에 있는지 여부를 확인하는 것입니다.

관련 문제