मैं नहीं जानता कि कौन सी विधि एसओ द्वारा किया जाता है, लेकिन:
मुझे लगता है ऐसा करने का एक तेजी से (और बहुत साधारण) जिस तरह से वापस सी के लिए जा रहा है, और उन्हें एक के बाद एक जाँच, हो सकता है कर रहा है KMP एल्गोरिदम के साथ।
ऐसा करने का एक और (इतना आसान नहीं), उन 10.000 शब्दों के साथ trie रखकर और उस का उपयोग करके टेक्स्ट खोजना है। यह सुपर-फास्ट होगा, लेकिन लागू करने के लिए काफी मुश्किल है। यदि आप रुचि रखते हैं, तो मेरे पास सी ++ में डमी कार्यान्वयन है।
संपादित
इसे वापस करने के लिए देख रहे हैं, मैं तुम्हें be able to integrate with python easily हूँ तो देख मैं केवल fstream का उपयोग किया है, तो यह सी के लिए आसानी से संशोधित किया जा सकता है।
#include <fstream>
using namespace std;
ifstream in("trie.in");
ofstream out("trie.out");
struct Trie
{
short nr, pref;
Trie *children[26], *father;
Trie()
{
int i;
nr = pref = 0;
for(i=0; i<26; i++)
children[i] = NULL;
father = NULL;
}
};
Trie t, *it, *it2;
int n, op, val, i, l, len;
char s[22],*p;
int main()
{
while(in>>op>>s)
{
p = s;
it = &t;
l = 0;len=0;
while(p[0] != '\0')
{
if(it->children[p[0] - 'a'] == NULL && op == 2)
{op=9; out<<"0\n"; break;}
if(it->children[p[0] - 'a'] == NULL && op == 3)
break;
if(it->children[p[0] - 'a'] == NULL)
it->children[p[0] - 'a'] = new Trie(), it->children[p[0] - 'a']->father = it,
it = it->children[p[0] - 'a'];
else
it = it->children[p[0] - 'a'];
if(op == 0)
++ it->pref;
else if(op == 1 && it->pref > 0)
-- it->pref;
else if(op == 3 && it->pref > 0)
l = p-s+1;
p++;
}
if(op == 0)
it->nr ++;
else if(op == 1 && it->nr > 0)
{
it->nr --;
l = strlen(s)-1;
while(it->pref == 0 && it != &t && l>=0)
{
it2 = it->father;
it2->children[s[l--] - 'a'] = NULL;
delete it;
it = it2;
}
}
else if(op == 2)
out<<it->nr<<'\n';
else if(op == 3)
out<<l<<'\n';
}
return 0;
}
यह लेता है trie.in
पाठ में इस प्रकार फ़ॉर्मेट:: यह स्रोत है
0 lat
0 mare
0 lac
2 la
0 mare
1 lat
0 ma
0 lung
3 latitudine
0 mari
2 mare
0 lat
0 mic
3 latime
2 lac
3 mire
और यह
0
2
2
3
1
2
0 डब्ल्यू की तरह पाठ का उत्पादन - शब्द सूची में डब्ल्यू जोड़ने (कई बार हो सकता है)
1 डब्ल्यू - सूची से शब्द डब्ल्यू का एक रिकॉर्ड हटाएं (क्या कई बार हो सकता है)
2 डब्ल्यू - प्रिंट कितने शब्द डब्ल्यू सूची में
3 डब्ल्यू देखते हैं - सबसे लंबे समय तक सामान्य सूची
ओह में किसी भी अन्य शब्द के साथ w का उपसर्ग की लंबाई प्रिंट , और खराब स्वरूपण के लिए खेद है, यह प्रशिक्षण के लिए किया गया था।
कृपया अपने trie कार्यान्वयन साझा करते हैं, मैं निश्चित रूप से दिलचस्पी रखता हूँ। मैं पाइथन प्रोग्राम से आपके सी ++ कार्यान्वयन का उपयोग कैसे करूं? – Continuation