मैं अगर एक स्ट्रिंग के प्रत्येक शब्द प्रत्येक शब्द के लिए एक MongoDB संग्रह खोज के द्वारा की वर्तनी सही है जांच करने की जरूरत में मौजूदा रहा है।
- डीबी क्वेरी की एक न्यूनतम राशि
- प्रत्येक वाक्य के पहले शब्द अपर केस में होना चाहिए करने से है, लेकिन इस शब्द शब्दकोश में अपर या लोअर केस हो सकता है। इसलिए मुझे प्रत्येक शब्द के लिए केस संवेदनशील मिलान की आवश्यकता है। प्रत्येक वाक्य का केवल पहला शब्द संवेदनशील होना चाहिए।
नमूना स्ट्रिंग
This is a simple example. Example. This is another example.
शब्दकोश संरचना
मान लें इस
{ word: 'this' },
{ word: 'is' },
{ word: 'a' },
{ word: 'example' },
{ word: 'Name' }
मेरे मामले में की तरह एक शब्दकोश संग्रह है, इस में 100,000 शब्द हैं शब्दकोश। बेशक नाम अपर केस में जमा हो जाती, क्रिया लोअर केस जमा हो जाती है और इतने पर ...
अपेक्षित परिणाम
शब्द simple
और another
के रूप में वे मौजूदा नहीं कर रहे हैं 'गलत वर्तनी' शब्द के रूप में मान्यता दी जानी चाहिए डीबी में
सभी मौजूदा शब्दों के साथ एक सरणी इस मामले में होनी चाहिए: ['This', 'is', 'a', 'example']
। This
ऊपरी मामला है क्योंकि यह वाक्य का पहला शब्द है; डीबी में इसे कम मामले this
के रूप में संग्रहीत किया जाता है।
मेरे प्रयास अब तक (अद्यतन)
const sentences = string.replace(/([.?!])\s*(?= [A-Z])/g, '$1|').split('|');
let search = [],
words = [],
existing,
missing;
sentences.forEach(sentence => {
const w = sentence.trim().replace(/[^a-zA-Z0-9äöüÄÖÜß ]/gi, '').split(' ');
w.forEach((word, index) => {
const regex = new RegExp(['^', word, '$'].join(''), index === 0 ? 'i' : '');
search.push(regex);
words.push(word);
});
});
existing = Dictionary.find({
word: { $in: search }
}).map(obj => obj.word);
missing = _.difference(words, existing);
समस्या
- असंवेदनशील मैचों ठीक से काम नहीं:
/^Example$/i
मुझे एक परिणाम दे देंगे। लेकिनexisting
में मूल लोअरकेसexample
पर जायेगा, जिसका अर्थ हैExample
missing
-Array पर जाएगा। तो मामला असंवेदनशील खोज अपेक्षित के रूप में काम कर रहा है, लेकिन परिणाम सरणी में मिसमैच है। मुझे नहीं पता कि इसे कैसे हल किया जाए। - कोड को अनुकूलित करना संभव है? जैसा कि मैंने दो
forEach
-loops और एकdifference
... उपयोग कर रहा हूँ
@Liam। हाँ यही है। (उल्का आवेदन)। टैग जोड़ा गया। – user3142695
तो, असली समस्या ऊपरी/लोअरकेस मेल नहीं है? खोज में असंवेदनशील $ मामले के लिए – Derlin
, http://stackoverflow.com/questions/27363000/mongo-in-query-with-case-insensitivity – Derlin