क्या कोई अच्छी लाइब्रेरी संयुक्त स्ट्रिंग से शब्दों का पता लगा सकती है और विभाजित कर सकती है?रिक्त स्थान/संयुक्त शब्दों के बिना पाठ से अधिकतर संभावित शब्दों का पता लगाएं
उदाहरण:
"cdimage" -> ["cd", "image"]
"filesaveas" -> ["file", "save", "as"]
क्या कोई अच्छी लाइब्रेरी संयुक्त स्ट्रिंग से शब्दों का पता लगा सकती है और विभाजित कर सकती है?रिक्त स्थान/संयुक्त शब्दों के बिना पाठ से अधिकतर संभावित शब्दों का पता लगाएं
उदाहरण:
"cdimage" -> ["cd", "image"]
"filesaveas" -> ["file", "save", "as"]
यहाँ एक गतिशील प्रोग्रामिंग समाधान (एक memoized समारोह के रूप में कार्यान्वित) है पर एक कैप्चा के रूप में उन्हें हल करने के लिए प्राप्त करें।अपने आवृत्तियों के साथ शब्दों के शब्दकोश को देखते हुए, यह उन पदों पर इनपुट टेक्स्ट को विभाजित करता है जो समग्र रूप से सबसे अधिक संभावित वाक्यांश देते हैं। आपको एक वास्तविक शब्दसूची मिलनी होगी, लेकिन मैंने एक सरल परीक्षण के लिए कुछ मेक-अप आवृत्तियों को शामिल किया था।
WORD_FREQUENCIES = {
'file': 0.00123,
'files': 0.00124,
'save': 0.002,
'ave': 0.00001,
'as': 0.00555
}
def split_text(text, word_frequencies, cache):
if text in cache:
return cache[text]
if not text:
return 1, []
best_freq, best_split = 0, []
for i in xrange(1, len(text) + 1):
word, remainder = text[:i], text[i:]
freq = word_frequencies.get(word, None)
if freq:
remainder_freq, remainder = split_text(
remainder, word_frequencies, cache)
freq *= remainder_freq
if freq > best_freq:
best_freq = freq
best_split = [word] + remainder
cache[text] = (best_freq, best_split)
return cache[text]
print split_text('filesaveas', WORD_FREQUENCIES, {})
--> (1.3653e-08, ['file', 'save', 'as'])
मैं इसके लिए किसी भी पुस्तकालय का पता नहीं है, लेकिन यह बुनियादी कार्यक्षमता को लागू करने के लिए मुश्किल नहीं होना चाहिए।
words
जैसे शब्दों की सूची प्राप्त करें।उदाहरण:
इसका रनटाइम क्या है? मैं किसी भी तरह से इस सटीक बिग-ओ जटिलता को खोजने के लिए पर्याप्त समस्या को सामान्य करने में सक्षम नहीं हूं। –
मुझे लगता है कि यह करता है एक पुस्तकालय पता नहीं है, लेकिन यदि आप शब्दों की एक सूची है लिखने के लिए भी मुश्किल नहीं है:
wordList = file('words.txt','r').read().split()
words = set(s.lower() for s in wordList)
def splitString(s):
found = []
def rec(stringLeft, wordsSoFar):
if not stringLeft:
found.append(wordsSoFar)
for pos in xrange(1, len(stringLeft)+1):
if stringLeft[:pos] in words:
rec(stringLeft[pos:], wordsSoFar + [stringLeft[:pos]])
rec(s.lower(), [])
return found
इस में स्ट्रिंग विभाजित करने के लिए हर संभव तरीके वापस आ जाएगी दिए गए शब्द
उदाहरण:
>>> splitString('filesaveas')
[['file', 'save', 'as'], ['files', 'ave', 'as']]
यदि आप मनोरंजन के लिए यह नहीं कर रहे हैं, लेकिन वास्तव में काम आदि के लिए कुछ कर रहा है, मेरी सलाह स्रोत पर इस से निपटने के लिए है। आप इन तारों को संयुक्त क्यों करते हैं? आप उन तारों को कहां मिला? यदि यह संभव है, तो उन तारों के स्रोत पर रिक्त स्थान डालें जहां से ये तार आते हैं।
क्षमा करें, लेकिन यह हर समस्या के लिए एक जवाब है। (क्यू: "घर को सफेद रंग कैसे पेंट करें?" -> ए: "जमीन पर सफेद कैल्शियम जोड़ें और 1 मिलियन साल बाद आओ और पहली जगह में सफेद ईंटें खोदें") –
लोगों को अपनी वेबसाइट :)
मुझे पता है कि यह प्रश्न पायथन के लिए चिह्नित है लेकिन मुझे जावास्क्रिप्ट कार्यान्वयन की आवश्यकता है। पिछले उत्तरों से बाहर निकलने पर मुझे लगा कि मैं अपना कोड साझा करूंगा। काम करने के लिए लगता है।
function findWords(input){
input = input.toLowerCase().replace(/\s/g, ""); //Strip whitespace
var index = 0;
var validWords = [];
for (var len = input.length; len > 0; len--){ //Go backwards as to favor longer words
var testWord = input.substr(index, len);
var dictIndex = _dictionary.indexOf(testWord.replace(/[^a-z\']/g, "")); //Remove non-letters
if (dictIndex != -1){
validWords.push(testWord);
if (len == input.length){
break; //We are complete
}
var nextWords = findWords(input.substr(len, input.length - len)); //Recurse
if (!nextWords.words.length){ //No further valid words
validWords.pop();
}
validWords = validWords.concat(nextWords.words);
if (nextWords.complete === true){
break; //Cascade complete
}
}
}
return {
complete:len > 0, //We broke which indicates completion
words:validWords
};
}
नोट: "_dictionary" आवृत्ति द्वारा क्रमबद्ध शब्दों की एक सरणी होने की उम्मीद है। मैं प्रोजेक्ट गुटेनबर्ग से एक वर्डलिस्ट का उपयोग कर रहा हूं।
मुझे इस क्षेत्र में कोई अनुभव नहीं है, लेकिन आप प्राकृतिक भाषा टूलकिट पर एक नज़र डालना शुरू कर सकते हैं। http://www.nltk.org/ –
और filesaveas के रूप में विभाजित किया जा सकता है * फ़ाइलें एवेन्यू * नहीं सिर्फ * फ़ाइल इस रूप में सहेजें * यह सिर्फ जब तक आप एक विशिष्ट शब्दावली है शब्द संभावनाओं पर विभाजित करने के लिए कठिन हो जाएगा। .. – Sparky
और ["सी", "मंद", "आयु"], ["सीडी", "i", "mage"], आदि ... संदर्भ को जानने के बिना यह अधिकार प्राप्त करना आसान नहीं है। सही विकल्प चुनने में भी मुश्किल हो जाती है जब बहुत सारे डोमेन विशिष्ट शब्द और संक्षेप होते हैं जो सामान्य पाठ में दुर्लभ होते हैं लेकिन सामान्य अपेक्षित इनपुट में आम होते हैं। आपको शायद एल्गोरिदम को प्रशिक्षित करने की आवश्यकता होगी। –