2010-08-13 3 views
8

Google 검색 중 일부를 수행했지만 찾고있는 것을 찾을 수 없습니다.Rails에서 영어 사전에 대해 단어의 유효성을 검사 하시겠습니까?

나는 스크래블 타입의 단어 게임을 레일로 개발하고 있으며 게임에서 플레이어가 입력 한 내용을 실제로 단어로 검증하는 간단한 방법이 있는지 궁금해하고있었습니다. 그들은 단어를 타이핑 할 것입니다.

이 문제를 해결하는 가장 좋은 방법은 앱에로드 된 일종의 영어 사전 데이터베이스에 대한 유효성 검사입니까? 그렇다면, 이런 종류의 기능을 제공하는 라이브러리가 있습니까? 그렇지 않다면 무엇을 제안하겠습니까?

도움 주셔서 감사합니다.

답변

2

여기 언어에 구애받지 않는 조언은 단어의 존재 만 신경 쓴다면 (이 경우에는 할 수 있습니다.) 응용 프로그램에 전체 데이터베이스를로드 할 계획입니다. 당신의 질문은 당신이 고려하고 있음을 암시합니다). 그러면 DAWG은 O (n) 시간의 복잡성에서 존재를 검사 할 수있게합니다. n은 단어의 크기입니다 (사전 크기는 아무런 효과가 없습니다 - 전반적인 조회는 본질적으로 O (1)입니다). (실제로, 일부 삽입은 실제로 구조의 크기를 줄이며 "상단, 탭, 탭, 상단"에 대한 DAWG는 "상단, 탭"에 대한 것보다 적은 수의 노드를가집니다).

  1. 단어 목록
  2. 일부 코드

단어 목록이 까다로운 부분입니다 :

+0

루비의 경우 배열에 사전 크기에 비례하여 시간이 걸리며 해시를 사용하면 키는 사용하지만 값은 사용하지 않는 것이 좋습니다. –

+0

사전이 매우 작지 않은 한, 가난하고 해석이 잘된 DAWG조차 해시 기반 세트를 이길 것입니다. DAWG는 본질적으로 사전 크기면에서 O (1)이며, 단어 크기 만 영향을 미치며 (해시 생성은 단어 크기에 영향을받는 경향이 있음) 알고리즘에 관한 다른 모든 요소와 함께 DAWG가 더 잘 나타납니다. DAWG는 많은 수의 문자열 (단어, DNA 시퀀스 등)에 대한 꽤 일반적인 구조입니다. –

11

당신은 두 가지가 필요합니다. 대부분의 유닉스 시스템에서 단어 목록은 /usr/share/dict/words 또는 /usr/dict/words입니다 - 자세한 내용은 http://en.wikipedia.org/wiki/Words_(Unix)을 참조하십시오. 내 Mac의 파일에는 234,936 단어가 있습니다. 그러나 모든 유효한 스크래블 단어가 아닙니다. 그래서 당신은 Scrabble 사전을 어떻게 든 획득해야하고, 그것을 사용할 수있는 올바른 라이센스를 가지고 있는지 확인하고, 텍스트 파일이되도록 처리해야합니다.

(업데이트 :. LetterPress의 단어 목록 지금 open sourceavailable on GitHub입니다)

코드는 간단한 경우에는 문제가 없다.

words = {} 
File.open("/usr/share/dict/words") do |file| 
    file.each do |line| 
    words[line.strip] = true 
    end 
end 
p words["magic"] 
p words["saldkaj"] 

나는 독자를위한 운동으로두고 출력

true 
nil 

이 의지가 적절한 단어 객체로를 만들기 위해 : 여기 지금 채찍질하는 스크립트입니다. 기술적으로 정의가 없으므로 사전이 아닙니다. 해시 대신 DAWG를 사용하면 필요에 따라 해시가 가능할 수도 있습니다.

+0

글쎄, 그것은 평판이 좋은 (webster 's et al) 사전이 아마도 괜찮을 것 같아서, 변형 가능한 타입의 게임이다. 난 그냥 유효성 검사기 함수에 코드를 포장하고 "usr/share/dict/words"(또는 단어를 얻는 곳의 소스)를 사전 API로 대체 할 수 있습니까? – dartfrog

+0

[LetterPress] (http://www.atebits.com/letterpress/)에 대한 사전은 현재 오픈 소스이며 [GitHub에서 사용 가능] (https://github.com/atebits/Words)입니다. – AlexChaffee

관련 문제