टेक्स्ट दस्तावेज़ में डुप्लिकेट ढूंढने के लिए आप कैसे पहुंचेंगे। डुप्लिकेट लगातार शब्दों या वाक्य का एक सेट हो सकता है। वाक्य को डॉट के साथ समाप्त करना जरूरी नहीं है। आइए मान लें कि पृष्ठ में 200 लाइनों का एक दस्तावेज़ है जिसमें से 2 वाक्यों समान हैं, हम "डुप्लिकेट बटन की जांच" करते समय डुप्लिकेट के रूप में उन 2 वाक्यों को हाइलाइट करना चाहते हैं।जावास्क्रिप्ट/jQuery टेक्स्ट डुप्लीकेट
उत्तर
दिलचस्प सवाल - यहां एक विचार है कि मैं इसे कैसे कर सकता हूं: http://jsfiddle.net/SaQAs/1/ - किसी भी तरह अनुकूलित नहीं किया गया है!
var text = $('p').text(),
words = text.split(' '),
sortedWords = words.slice(0).sort(),
duplicateWords = [],
sentences = text.split('.'),
sortedSentences = sentences.slice(0).sort(),
duplicateSentences = [];
for (var i=0; i<sortedWords.length-1; i++) {
if (sortedWords[i+1] == sortedWords[i]) {
duplicateWords.push(sortedWords[i]);
}
}
duplicateWords = $.unique(duplicateWords);
for (var i=0; i<sortedSentences.length-1; i++) {
if (sortedSentences[i+1] == sortedSentences[i]) {
duplicateSentences.push(sortedSentences[i]);
}
}
duplicateSentences = $.unique(duplicateSentences);
$('a.words').click(function(){
var highlighted = $.map(words, function(word){
if ($.inArray(word, duplicateWords) > -1)
return '<span class="duplicate">' + word + '</span>';
else return word;
});
$('p').html(highlighted.join(' '));
return false;
});
$('a.sentences').click(function(){
var highlighted = $.map(sentences, function(sentence){
if ($.inArray(sentence, duplicateSentences) > -1)
return '<span class="duplicate">' + sentence + '</span>';
else return sentence;
});
$('p').html(highlighted.join('.'));
return false;
});
अद्यतन 1
यह एक समान शब्दों के चिह्नित क्रम पाता है: http://jsfiddle.net/YQdk5/1/ यहाँ से यह उदा मुश्किल नहीं होना चाहिए तुलना करते समय टुकड़ों के अंत में किसी भी तरह के विराम चिह्न को अनदेखा करें - आपको केवल inArray
विधि का अपना संस्करण लिखना होगा।
var text = $('p').text(),
words = text.split(' '),
sortedWords = words.slice(0).sort(),
duplicateWords = []
highlighted = [];
for (var i=0; i<sortedWords.length-1; i++) {
if (sortedWords[i+1] == sortedWords[i]) {
duplicateWords.push(sortedWords[i]);
}
}
duplicateWords = $.unique(duplicateWords);
for (var j=0, m=[]; j<words.length; j++) {
m.push($.inArray(words[j], duplicateWords) > -1);
if (!m[j] && m[j-1])
highlighted.push('</span>');
else if (m[j] && !m[j-1])
highlighted.push('<span class="duplicate">');
highlighted.push(words[j]);
}
$('p').html(highlighted.join(' '));
अद्यतन 2
मेरे regex फू कमजोर है, लेकिन यह (बहुत गंदा!) संस्करण ठीक काम करने के लिए लगता है: http://jsfiddle.net/YQdk5/2/ - मैं यकीन है कि के लिए एक बेहतर तरीका हो सकता है कि कर रहा हूँ ऐसा कर रहा है, लेकिन अभी के लिए मुझे इसे अकेला छोड़ना है! : डी - शुभकामनाएँ!
अद्यतन 3
इसके बारे में सोच रही थी, मुझे नहीं लगता कि पिछले अपडेट से कोड किसी भी अच्छे है। यही कारण है कि मैंने इसे हटा दिया है। तुम अब भी इसे यहाँ पा सकते हैं:
/^word(\.?)$/
यह बहुत साफ है। प्रयासों के लिए –
+1। डुप्लिकेट शब्दों को खोजने के लिए मेरे पास एक समान अवधारणा थी। वाक्य यहाँ मुद्दा है। आपके मामले में इसे पहचानने के लिए इसे एक बिंदु के साथ समाप्त होना चाहिए। तो अगर हमारे पास अलग-अलग क्षेत्रों में एक ही 2 वाक्य हैं, लेकिन यदि कोई डॉट के बाद नहीं होता है, तो इसे पहचाना नहीं जाएगा। – Hussein
मुझे लगता है कि यह वाक्य की तुलना में एक शब्द अनुक्रम का अधिक है, है ना?)। – polarblau
यहाँ है समाधान प्रत्यय पेड़ का उपयोग करता है:
function SuffixTree(text) {
var regex = /\b\w+/g;
var words = text.match(regex);
var wave = [];
var words_l = words.length;
if (words_l == 0) return false;
this.tree = this.node("", false);
for (var i = 0; i < words_l; ++i) {
var x = words[i] + "_";
wave.push(this.tree);
var wave_l = wave.length;
for (var j = 0; j < wave_l; ++j) {
var y = wave[j];
if (typeof y[x] != 'undefined') y[x].count++;
else y[x] = this.node(words[i], y);
wave[j] = y[x];
}
}
}
SuffixTree.prototype = {
dummy: {count: 1},
node: function(word, num, parent) {
return {
count: 1,
word: word,
parent: parent
};
},
duplicates: function(h) {
this.dups = [];
this.bypass(this.tree, h, 0);
var l = this.dups.length;
this.dups.sort(function(d1, d2) { return d1.depth > d2.depth ? 1 : -1; });
for (var i = 0; i < l; ++i) {
var d = this.dups[i];
this.dups[i] = { s: " " + this.sentence(d.a) + " ", depth: d.depth, count: d.a.count };
}
for (var i = 0; i < l; ++i) {
var d = this.dups[i];
console.log(i, d.s);
}
for (var i = 0; i < l; ++i) {
var d = this.dups[i];
var fl = true;
for (var j = i + 1; j < l; ++j) {
if (this.dups[j].s.indexOf(d.s) != -1) fl = false;
}
if (fl) h(d.s.substr(1, d.s.length - 2), d.count);
}
},
bypass: function(a, h, depth) {
if (a.constructor != Object) return;
var fl = true;
for (var i in a) {
if (i == 'parent') continue;
var b = a[i];
if (b.count == a.count) fl = false;
this.bypass(b, h, depth + 1);
}
if (fl && a.count > 1) {
this.dups.push({ a: a, depth: depth });
}
},
sentence: function(a) {
var s = a.word;
while (a = a.parent) {
s = a.word + " " + s;
}
return s;
}
};
var text = "This is a text with some duplicates: words, sentences of different length. For example here is a duplicate word. This sentence has some duplicates. But not all of us can find clones.";
var T = new SuffixTree(text);
var h = function(s, c) {
document.write(s + "[" + c + "]<br/>");
};
T.duplicates(h);
http://jsfiddle.net/YQdk5/2/ मुख्य बिंदु शब्द का मिलान कर, की तर्ज पर कुछ एक regex का उपयोग करने के लिए है 1) इनपुट पाठ को शब्दों की सरणी में विभाजित करें। 2) प्रत्यय पेड़ का निर्माण करें। 3) पेड़ के सबसे लंबे प्रत्यय खोजें। 4) दूसरों में निहित वाक्यों को हटाएं (यानी "है" को हटाएं जो "यह एक है" का हिस्सा है)।
आप एचटीएमएल टैग को ध्यान में रखने के लिए नियमित अभिव्यक्ति को बदल सकते हैं।
मुझे आशा है कि यह आपकी मदद करेगा।
पीएस h
पाया डुप्लिकेट के लिए कॉलबैक है।
आप जावास्क्रिप्ट में jQuery नामक जावास्क्रिप्ट लाइब्रेरी के संदर्भ हैं।
आप इसे अपने HTML में शामिल नहीं कर रहे हैं, और इस प्रकार यह विफल हो जाएगा। आप इसे jquery cdn
और आज के टिप के माध्यम से शामिल कर सकते हैं: अपने ब्राउज़र में डेवलपर टूल का उपयोग करें। कंसोल में आप देख सकते हैं कि जावास्क्रिप्ट के कौन से हिस्से विफल हो जाते हैं।
- 1. डुप्लीकेट
- 2. डुप्लीकेट
- 3. डुप्लीकेट
- 4. डुप्लीकेट
- 5. केवल डुप्लीकेट
- 6. संग्रह में डुप्लीकेट ढूंढना
- 7. स्ट्रिंग संदर्भ डुप्लीकेट हैं?
- 8. जीसीएम डुप्लीकेट संदेश
- 9. सभी डुप्लीकेट पंक्तियों
- 10. प्रत्येक मान के सभी डुप्लीकेट
- 11. एसक्यूएल गणना और समूह डुप्लीकेट
- 12. # 1060 - डुप्लीकेट कॉलम नाम 'आईडी'
- 13. स्कैला: ऑब्जेक्ट्स की सूची में डुप्लीकेट हटाएं
- 14. बाएं जुड़ने का उपयोग करके डुप्लीकेट
- 15. डुप्लीकेट पंक्तियों से एक पंक्ति का चयन
- 16. एक अनुक्रमित अनुक्रम में डुप्लीकेट को कुशलतापूर्वक
- 17. डुप्लीकेट पंक्तियों को कैसे हटाएं और तालिका
- 18. ओओ डिज़ाइन और प्रतिबिंबित/डुप्लीकेट विधियां
- 19. सूची तत्वों के लगातार डुप्लीकेट हटाएं
- 20. NoUniqueBeanDefinitionException हालांकि कोई डुप्लीकेट नहीं मिला
- 21. ActionBarSherlock + गूगल मैप्स एपीआई v2 डुप्लीकेट आईडी
- 22. एसक्यूएल क्वेरी - 3 से अधिक डुप्लिकेट डुप्लीकेट हटाएं?
- 23. MySQL - डुप्लीकेट के बिना दो टेबल में शामिल हो?
- 24. डुप्लीकेट पंक्तियों को हटा दें और एक पंक्ति
- 25. एक ही पृष्ठ पर एकाधिक remote_form_for डुप्लीकेट आईडी
- 26. दो जेनेरिक सूचियों की तुलना करें और डुप्लीकेट
- 27. डुप्लीकेट कोड यूनिट परीक्षणों में अधिक सहनशील है?
- 28. मैं MongoDb में डुप्लीकेट कैसे हटा सकता हूं?
- 29. पायथन - स्ट्रिंग में लगातार अगर डुप्लीकेट को कैसे हटाया जाए?
- 30. सूची समझ डुप्लीकेट को फ़िल्टर क्यों नहीं करती है?
आपका एचटीएमएल संरचित कैसे है? –
मान लें। '
.... पाठ .......
' – Hussein