2010-08-13 15 views
8

मैंने कुछ Google खोज किया है लेकिन मैं जो खोज रहा था वह नहीं मिला।रेल में अंग्रेजी शब्दकोश के खिलाफ शब्द मान्य करें?

मैं रेल में एक स्क्रैबल-प्रकार शब्द गेम विकसित कर रहा हूं, और यह सोच रहा था कि खेल में खिलाड़ी इनपुट वास्तव में एक शब्द है या नहीं, यह सत्यापित करने का एक आसान तरीका था। वे शब्द टाइप कर रहे होंगे।

इस समस्या को हल करने के लिए ऐप के भीतर लोड किए गए किसी भी प्रकार के अंग्रेजी भाषा शब्दकोश डेटाबेस के खिलाफ सत्यापन है? यदि हां, तो क्या ऐसी कोई पुस्तकालय है जो इस तरह की कार्यक्षमता प्रदान करती है? यदि नहीं, तो आप क्या सुझाव देंगे?

आपकी मदद के लिए धन्यवाद!

उत्तर

2

यहां भाषा-अज्ञेय सलाह का एक टुकड़ा यह है कि यदि आप केवल एक शब्द के अस्तित्व की देखभाल करते हैं (जो इस तरह के मामले में, आप करते हैं), और आप पूरे डेटाबेस को एप्लिकेशन में लोड करने की योजना बना रहे हैं (जो आपकी क्वेरी से पता चलता है कि आप विचार कर रहे हैं) तो DAWG आपको ओ (एन) समय जटिलता में अस्तित्व की जांच करने में सक्षम करेगा जहां एन शब्द का आकार है (शब्दकोश आकार का कोई प्रभाव नहीं है - समग्र रूप से लुकअप अनिवार्य रूप से ओ (1) है) , स्मृति के संदर्भ में अपेक्षाकृत कम संरचना होने के दौरान (वास्तव में, कुछ प्रविष्टियां वास्तव में संरचना के आकार को कम कर देगी, "टॉप, टैप, टैप्स, टॉप्स" के लिए एक डीएडब्ल्यूजी में "टॉप्स, टैप" के लिए एक से कम नोड्स हैं)।

  1. एक शब्द सूची
  2. कुछ कोड

शब्द सूची मुश्किल हिस्सा है:

+0

रूबी के लिए, शायद आप 'सेट' का उपयोग करना चाहते हैं: एक सरणी शब्दकोष के लिए रैखिक रूप से आनुपातिक समय लेती है, और यदि आपने हैश का उपयोग किया है, तो आप चाबियाँ का उपयोग करेंगे लेकिन मान नहीं। –

+0

जब तक कि शब्दकोश बहुत छोटा न हो, तब भी एक गरीब और दुभाषिया डीएडब्ल्यूजी एक हैश-आधारित सेट को हरा देगा। डीएडब्ल्यूजी अनिवार्य रूप से ओ (1) शब्दकोष के आकार में है, केवल शब्द-आकार इसे प्रभावित करता है (हैश-निर्माण शब्द आकार से भी प्रभावित होता है), लेकिन एल्गोरिदम से संबंधित अन्य सभी कारकों के साथ डीएडब्ल्यूजी बेहतर हो जाता है। डीएडब्ल्यूजी तारों के बड़े सेट (शब्द, डीएनए अनुक्रम, आदि) के लिए एक सुंदर सामान्य संरचना है। –

11

आप दो चीजों की जरूरत है। अधिकांश यूनिक्स सिस्टम पर /usr/share/dict/words या /usr/dict/words पर एक शब्द सूची है - अधिक जानकारी के लिए http://en.wikipedia.org/wiki/Words_(Unix) देखें। मेरे मैक पर एक में 234, 9 36 शब्द हैं। लेकिन वे सभी वैध स्क्रैबल शब्द नहीं हैं। तो आपको किसी भी तरह से एक स्क्रैबल शब्दकोश प्राप्त करना होगा, सुनिश्चित करें कि आपके पास इसका उपयोग करने का सही लाइसेंस है, और इसे संसाधित करें ताकि यह एक टेक्स्ट फ़ाइल हो।

(अद्यतन:। LetterPress के लिए शब्द सूची अब open source, और available 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 

मैं पाठक के लिए एक व्यायाम के रूप में छोड़ एक उचित शब्द आपत्ति में इसे बनाने के लिए: यहाँ एक स्क्रिप्ट मैं सिर्फ अब तक मार पड़ी है। (तकनीकी रूप से यह एक शब्दकोश नहीं है क्योंकि इसकी कोई परिभाषा नहीं है।) या हैश की बजाय डीएडब्ल्यूजी का उपयोग करने के लिए, भले ही हैश शायद आपकी आवश्यकताओं के लिए ठीक है।

+0

ठीक है, यह एक स्क्रैबल संस्करण प्रकार का गेम है, इसलिए कोई भी सम्मानित (वेबस्टर का एट अल) शब्दकोश शायद ठीक होगा। क्या मैं सिर्फ एक सत्यापनकर्ता फ़ंक्शन में कोड लपेटूंगा और एक शब्दकोश एपीआई के साथ "usr/share/dict/words" (या जहां मुझे शब्द मिल रहा है) का विकल्प बदल देगा? – dartfrog

+0

[LetterPress] के लिए शब्दकोश (http://www.atebits.com/letterpress/) अब खुला स्रोत है, और [गिटहब पर उपलब्ध] (https://github.com/atebits/Words)। – AlexChaffee

संबंधित मुद्दे