Overclock.net › Forums › Software, Programming and Coding › Coding and Programming › Application Programming › FAST 'on the fly' fuzzy string matching console tool written in C
New Posts  All Forums:Forum Nav:

FAST 'on the fly' fuzzy string matching console tool written in C - Page 4

post #31 of 32
Thread Starter 
Fine-tuning continues with next more verbose revision 1-++fix+nowait, in addition to stats, the Master-Buffer size is changeable from the command line (last parameter), thus hitting the fastest (for your CPU) size is possible, for mine it is between 1024KB and 1800KB.

First, all results below are reproduceable with this test package: Kazahana_r1-++fix+nowait_VS_grep.7z
On my T7500 2200MHz 4MB L2 cache processor, Windows 7 64bit, the results for next 3 patterns are:

16-threaded Exact search for 'ramjet' into 889,537,624 bytes long file '4andabove_Gamera.tar.2.sorted':
Code:
Allocating Master-Buffer 1536KB ... OK
Kazahana: Dumped xgrams: 49
Kazahana: Performance: 1,011 KB/clock
Kazahana: Performance: Total/fread() clocks: 859/437
Kazahana: Performance: I/O time, i.e. fread() time, is 50 percents
Kazahana: Done.
Timer 9.01 : Igor Pavlov : Public domain : 2009-05-31

Kernel Time  =     0.546 =   57%
User Time    =     1.138 =  119%
Process Time =     1.684 =  176%
Global Time  =     0.953 =  100%

16-threaded Exact search for 'metal_fatigue' into 889,537,624 bytes long file '4andabove_Gamera.tar.2.sorted':
Code:
Allocating Master-Buffer 1536KB ... OK
Kazahana: Dumped xgrams: 1
Kazahana: Performance: 1,235 KB/clock
Kazahana: Performance: Total/fread() clocks: 703/484
Kazahana: Performance: I/O time, i.e. fread() time, is 68 percents
Kazahana: Done.
Timer 9.01 : Igor Pavlov : Public domain : 2009-05-31

Kernel Time  =     0.546 =   59%
User Time    =     0.951 =  103%
Process Time =     1.497 =  163%
Global Time  =     0.918 =  100%

16-threaded Exact search for 'incomprehensible_misunderstanding' into 889,537,624 bytes long file '4andabove_Gamera.tar.2.sorted':
Code:
Allocating Master-Buffer 1536KB ... OK
Kazahana: Dumped xgrams: 1
Kazahana: Performance: 1,462 KB/clock
Kazahana: Performance: Total/fread() clocks: 594/470
Kazahana: Performance: I/O time, i.e. fread() time, is 79 percents
Kazahana: Done.
Timer 9.01 : Igor Pavlov : Public domain : 2009-05-31

Kernel Time  =     0.546 =   58%
User Time    =     0.889 =   95%
Process Time =     1.435 =  154%
Global Time  =     0.930 =  100%

And to "verify" our watch with grep's:

'grep' 2.5.4 Exact search for 'ramjet' into 889,537,624 bytes long file '4andabove_Gamera.tar.2.sorted':
Code:
Kernel Time  =     0.639 =   13%
User Time    =     4.196 =   86%
Process Time =     4.836 =   99%
Global Time  =     4.847 =  100%

'grep' 2.5.4 Exact search for 'metal_fatigue' into 889,537,624 bytes long file '4andabove_Gamera.tar.2.sorted':
Code:
Kernel Time  =     0.546 =   11%
User Time    =     4.040 =   88%
Process Time =     4.586 =   99%
Global Time  =     4.587 =  100%

'grep' 2.5.4 Exact search for 'incomprehensible_misunderstanding' into 889,537,624 bytes long file '4andabove_Gamera.tar.2.sorted':
Code:
Kernel Time  =     0.577 =   13%
User Time    =     3.806 =   86%
Process Time =     4.383 =   99%
Global Time  =     4.399 =  100%

It surprises me how 'grep' doesn't get advantage of longer needles/patterns, anyway, Kazahana is 4.5:1 faster than 'grep'.

And one quick dummy stat:
For all three patterns below the total fread() time is in range 437..484 clocks (well, milliseconds):
'ramjet' is found at 1,011 KB/clock for entire task, but only 100% - 50% = 50% are spent in actual parsing and searching which equals 1,011 KB/clock / (50/100) = 2,022 KB/clock L2 Multi-Threaded Gulliver performance.
'metal_fatigue' is found at 1,235 KB/clock for entire task, but only 100% - 68% = 32% are spent in actual parsing and searching which equals 1,235 KB/clock / (32/100) = 3,859 KB/clock L2 Multi-Threaded Gulliver performance.
'incomprehensible_misunderstanding' is found at 1,462 KB/clock for entire task, but only 100% - 79% = 21% are spent in actual parsing and searching which equals 1,462 KB/clock / (21/100) = 6,961 KB/clock L2 Multi-Threaded Gulliver performance.

The bottom-line: Kazahana is bound to Main Memory Copying.
I have had too high hopes, speaking of total performance, the time which fread() consumes is a nasty break, meaning Kazahana is limited by I/O even with cached (by the OS) data. She is so fast that nowadays PCs with their slow memcpy() transfers ('Everest' says for Main Memory: 5446MB/s Read and 4015MB/s Copy on my laptop) are bottlenecks especially with MT-Gulliver used.
Seeing how XEONs do Main Memory Copy at 20000MB/s still gives me hope of getting 20000:4000 boost.

In my view, Kazahana is a forerunner (a snowflower in a sunny day, remember) of more cool times, when RAM operations will be much faster and she will be able to bloom TRULY.
post #32 of 32
Thread Starter 
Happy to share the latest most optimized and fully functional Kazahana.

Inspired by the words of Phil Schneider "We can do better!" here comes the 100% FREE (no licenses of any kind) package for English language explorers.

The source and executables are here, the console tool now has its own GUI shell called Gallowwalker which gives you control over several must-have text processing tasks.
In short, Kazahana has three main modes: exact (CASE-SENSITIVE), wildcard (CASE-SENSITIVE/CASE-INSENSITIVE also RECURSIVE/ITERATIVE), fuzzy (SIMPLE/EXHAUSTIVE).

The resultant file of above search:

Code:
"D:\_GW\Kazahana.exe" "*~envisaged~*~moving~*" "Google_Books_corpus_version_20130501_English_All_Arcs.txt" 458754

D:\>type _GW\Kazahana.txt
[*~envisaged~*~moving~*] envisaged      envisaged/VBD/ROOT/0 as/IN/prep/1 moving/VBG/pcomp/2    19      1959,1  1964,1  1977,3  1979,2  1985,1  1993,1  1995,3  1996,1  1999,1  2001,3  2002,1  2004,1 /Google_Books_corpus_version_20130501_English_All_Arcs.txt/
[*~envisaged~*~moving~*] envisaged      envisaged/VBD/ROOT/0 moving/VBG/dep/1   15      1924,1  1946,2  1962,2  1971,1  1981,1  1991,1  2003,3  2004,3  2006,1 /Google_Books_corpus_version_20130501_English_All_Arcs.txt/
[*~envisaged~*~moving~*] envisaged      envisaged/VBD/ROOT/0 moving/VBG/dobj/1  10      1981,1  1996,1  1998,1  2003,7 /Google_Books_corpus_version_20130501_English_All_Arcs.txt/
[*~envisaged~*~moving~*] envisaged      envisaged/VBD/ROOT/0 moving/VBG/xcomp/1 65      1960,1  1967,2  1968,3  1970,2  1975,1  1976,1  1977,2  1978,2  1982,5  1983,5  1985,1  1987,2  1988,1  1989,2  1990,2  1991,2  1993,3  1994,1  1997,3  1998,2  1999,3  2002,3  2003,2  2005,2  2006,3  2007,6  2008,3 /Google_Books_corpus_version_20130501_English_All_Arcs.txt/
[*~envisaged~*~moving~*] envisaged      envisaged/VBD/rcmod/0 moving/VBG/xcomp/1        13      1981,1  1982,1  1991,1  1996,2  1997,3  1998,2  2001,1  2006,1  2008,1 /Google_Books_corpus_version_20130501_English_All_Arcs.txt/
[*~envisaged~*~moving~*] envisaged      envisaged/VBN/ROOT/0 as/IN/prep/1 moving/VBG/pcomp/2    64      1941,2  1949,1  1961,1  1967,3  1968,1  1970,1  1971,1  1972,2  1973,1  1974,1  1975,3  1978,1  1980,1  1981,5  1982,2  1983,1  1985,2  1986,1  1987,1  1988,1  1989,2  1990,1  1991,3  1992,3  1993,1  1995,3  1996,2  1997,6  1999,2  2002,1  2003,2  2004,1  2005,2  2006,1  2007,1  2008,1 /Google_Books_corpus_version_20130501_English_All_Arcs.txt/
[*~envisaged~*~moving~*] envisaged      envisaged/VBN/ROOT/0 moving/VBG/xcomp/1 24      1948,5  1949,1  1952,1  1973,3  1974,1  1988,1  1995,1  1998,3  2000,1  2002,3  2005,1  2007,3 /Google_Books_corpus_version_20130501_English_All_Arcs.txt/

The Google ngram viewer is said to exploit those data:


Few days ago I found something very useful (for English n-gram explorers) - the n-gram dumps (from 2013) of Google Books, now featuring more than 3 million books.
They shifted somewhat from n-grams toward arcs, in the previous release (from 2012) I counted around 5 million distinct words, now they are more than 7 million.
In their notation a node stands for a word, but they say 47 million nodes, whatever.

Basically, a phrase of order n (usually n=1..9) is a sequence of n words, some call it an n-gram.
Google uses different kind of n-grams, called arcs, denoting syntactical n-grams, arcs because under each arc zero or few words can take place.
My approach is not as fuzzy as theirs, I stick to WYSIWYG principle.
I came up with a simple structure of GREAT importance - PAGODA.
In contrast to Google's arcs my x-grams (kind of n-grams) are used as building blocks for PAGODAs.
Looking into arcs' dumps I see only left-to-right suggesting while the nifty way of dealing with n-grams is two-way, right-to-left as well.

A quick legend:
1-gram / node = word
2-gram / arc = word ^ word
3-gram / biarc = word ^ word ^ word
4-gram / triarc = word ^ word ^ word ^ word
5-gram / quadarc = word ^ word ^ word ^ word ^ word

That is how node corpus looks like:
Code:
D:\_KAZE\Google_Books_corpus_version_20130501_English_All_Nodes\Google_Books_corpus_version_20130501_English_All_Nodes>dir ..\*.txt

01/10/2015  12:41 PM    10,624,363,237 Google_Books_corpus_version_20130501_English_All_Nodes.txt

D:\_KAZE\Google_Books_corpus_version_20130501_English_All_Nodes\Google_Books_corpus_version_20130501_English_All_Nodes>type nodes.49-of-99|more
indolebutyric   indolebutyric/NNP/nn/0  67      1933,2  1939,1  1940,1  1941,2  1943,1  1945,2  1946,1  1947,1  1948,1  1949,1  1951,5  1952,1  1953,2  1954,2  1956,2  1957,2  1958,2  1959,1  1961,1  1962,3  1963,1  1966,1  1968,3  1969,1  1970,1  1971,2  1976,1  1982,1  1983,1  1984,1  1985,1  1986,4  1987,1  1989,2  1993,2  1994,1  1995,2  1996,1  1998,3  2004,1  2005,1  2006,1
indolecarboxylate       indolecarboxylate/JJ/dep/0      14      1948,8  1981,1  1996,4  1997,1
indolecarboxylic        indolecarboxylic/JJ/amod/0      55      1936,3  1938,1  1946,1  1948,5  1958,1  1960,3  1962,1  1963,3  1964,1  1966,1  1967,3  1968,2  1970,3  1971,1  1975,1  1978,1  1980,1  1983,1  1984,2  1988,2  1990,5  1994,1  2000,2  2004,1  2006,1  2007,5  2008,3
indolecarboxylic        indolecarboxylic/JJ/dep/0       29      1938,1  1947,1  1948,1  1955,4  1962,2  1963,1  1964,1  1965,2  1967,3  1969,2  1970,1  1980,1  1981,1  1990,2  1995,1  1996,1  1998,1  2000,1  2002,2
indoleethylamines       indoleethylamines/NNS/pobj/0    17      1962,3  1963,3  1973,1  1974,1  1975,2  1977,2  1979,2  1989,1  1997,2
indoleglycerol  indoleglycerol/JJ/dep/0 84      1964,2  1966,3  1967,5  1968,3  1969,2  1970,1  1971,1  1972,1  1973,2  1975,22 1977,2  1978,2  1979,2  1980,20 1981,1  1983,2  1984,3  1985,2  1986,1  1990,1  1991,1  1995,1  2004,2  2006,1  2007,1
indoleglycerol  indoleglycerol/NN/dobj/0        13      1963,3  1967,1  1973,3  1975,2  1979,1  1984,1  1985,2
indoleglycerol  indoleglycerol/NN/nn/0  266     1955,1  1959,2  1960,16 1961,4  1962,15 1963,11 1964,12 1965,6  1966,3  1967,11 1968,22 1969,4  1970,1  1971,11 1972,3  1973,8  1974,9  1975,9  1976,2  1977,7  1978,10 1979,10 1980,5  1982,12 1983,14 1984,3  1985,6  1986,1  1989,2  1990,1  1991,1  1992,1  1993,6  1995,2  1997,6  1998,4  1999,3  2000,2  2001,6  2002,1  2003,1  2004,1  2005,3  2006,4  2007,1  2008,3
indoleglycerol  indoleglycerol/NNP/dep/0        12      1962,1  1965,2  1966,5  1980,2  1991,1  2006,1
indoleglycerol  indoleglycerol/NNP/nn/0 42      1960,3  1961,2  1963,2  1964,2  1965,1  1967,2  1968,3  1969,1  1970,5  1973,2  1974,4  1975,2  1978,3  1980,1  1983,1  1995,1  1998,2  2000,1  2001,1  2002,2  2003,1
indoleglycerolphosphate indoleglycerolphosphate/NN/pobj/0       10      1955,1  1964,1  1965,3  1971,1  1974,2  1999,2
indolelactic    indolelactic/JJ/amod/0  164     1936,2  1938,2  1947,2  1949,1  1951,2  1954,2  1955,3  1957,3  1958,10 1959,2  1960,13 1961,10 1962,5  1963,10 1964,16 1965,4  1966,15 1967,1  1968,3  1969,2  1970,7  1971,10 1972,6  1973,6  1974,1  1975,4  1977,1  1978,1  1981,1  1983,1  1986,1  1988,3  1989,1  1990,2  1991,1  1992,1  1999,2  2003,6  2004,1
indolelactic    indolelactic/JJ/conj/0  24      1955,2  1957,1  1960,1  1961,2  1962,2  1963,3  1964,4  1965,2  1966,4  1968,1  1970,1  2003,1
indolelactic    indolelactic/JJ/dep/0   32      1938,3  1945,1  1949,1  1954,1  1955,5  1957,1  1961,2  1966,4  1967,4  1972,3  1986,1  1990,1  1993,1  1994,1  1999,1  2006,1  2007,1
...

The arcs corpus is like that:
Code:
K:\arcs>type arcs.31-of-99
envisaged       envisaged/VBD/ROOT/0 movements/NNS/dobj/1       27      1965,1  1966,2  1970,2  1981,1  1982,2  1983,4  1988,2  1990,2  1992,1  1993,3  1996,1  1997,1  1999,1  2001,1  2003,1  2004,2
envisaged       envisaged/VBD/ROOT/0 moves/NNS/dobj/1   18      1953,3  1969,3  1976,2  1989,1  1991,1  1993,2  1994,2  1995,1  1998,1  2002,1  2006,1
envisaged       envisaged/VBD/ROOT/0 moving/VBG/dep/1   15      1924,1  1946,2  1962,2  1971,1  1981,1  1991,1  2003,3  2004,3  2006,1
envisaged       envisaged/VBD/ROOT/0 moving/VBG/dobj/1  10      1981,1  1996,1  1998,1  2003,7
envisaged       envisaged/VBD/ROOT/0 moving/VBG/xcomp/1 65      1960,1  1967,2  1968,3  1970,2  1975,1  1976,1  1977,2  1978,2  1982,5  1983,5  1985,1  1987,2  1988,1  1989,2  1990,2  1991,2  1993,3  1994,1  1997,3  1998,2  1999,3  2002,3  2003,2  2005,2  2006,3  2007,6  2008,3
envisaged       envisaged/VBD/ROOT/0 much/JJ/dobj/1     32      1914,1  1932,1  1941,2  1966,2  1967,3  1979,1  1989,2  1993,1  1994,1  1996,1  1997,1  1999,1  2000,1  2001,1  2004,5  2005,1  2007,4  2008,3
envisaged       envisaged/VBD/ROOT/0 much/RB/advmod/1   39      1966,4  1967,2  1970,2  1972,3  1973,1  1976,2  1986,8  1989,3  1994,4  1998,2  2001,5  2002,1  2004,1  2006,1
envisaged       envisaged/VBD/ROOT/0 much/RB/dobj/1     14      1933,1  1948,1  1964,3  1965,2  1984,1  1985,1  1991,2  2000,1  2001,1  2008,1
envisaged       envisaged/VBD/ROOT/0 multitude/NN/dobj/1        27      1946,3  1949,1  1950,3  1951,1  1953,2  1961,1  1979,1  1983,1  1985,3  1989,3  1999,1  2000,4  2001,1  2003,2
envisaged       envisaged/VBD/ROOT/0 municipalities/NNS/dobj/1  10      1958,3  1962,2  1975,1  1989,2  1993,2
envisaged       envisaged/VBD/ROOT/0 museum/NN/dobj/1   27      1982,3  1992,1  1994,2  1995,4  1996,1  1997,1  1998,1  1999,4  2000,5  2001,1  2004,2  2006,1  2007,1
envisaged       envisaged/VBD/ROOT/0 music/NN/dobj/1    26      1960,2  1983,1  1988,3  1989,3  1991,1  1996,4  1998,1  2001,1  2005,2  2006,2  2007,6
envisaged       envisaged/VBD/ROOT/0 muslim/NN/dobj/1   10      1945,1  1988,1  1989,1  1993,1  1998,1  1999,1  2000,2  2001,1  2002,1
envisaged       envisaged/VBD/ROOT/0 mustering/NN/dobj/1        10      1971,2  1977,1  1982,1  1987,1  1991,1  1996,1  2001,3
envisaged       envisaged/VBD/ROOT/0 myself/PRP/dobj/1  32      1938,2  1957,1  1958,1  1975,1  1978,1  1980,2  1984,2  1986,2  1988,2  1990,1  1995,2  1996,2  1998,1  2000,4  2001,1  2004,2  2006,3  2007,2
envisaged       envisaged/VBD/ROOT/0 name/NN/dobj/1     10      1983,1  1986,1  1992,1  1999,2  2007,3  2008,2
envisaged       envisaged/VBD/ROOT/0 namely/RB/advmod/1 72      1944,1  1946,1  1949,4  1959,1  1962,2  1964,2  1967,1  1968,3  1970,1  1974,1  1975,4  1981,3  1982,5  1983,2  1984,1  1986,3  1988,2  1989,1  1990,1  1992,3  1995,2  1996,3  1998,4  2000,5  2002,1  2003,2  2004,7  2005,1  2006,3  2007,1  2008,1
envisaged       envisaged/VBD/ROOT/0 naseem/NNP/dobj/1  12      1981,2  1991,5  1995,2  1997,2  2006,1
envisaged       envisaged/VBD/ROOT/0 nation/NN/dobj/1   155     1928,2  1937,1  1942,2  1944,1  1946,5  1951,5  1954,5  1955,2  1957,2  1958,1  1959,2  1960,1  1961,6  1962,2  1964,2  1966,2  1967,2  1969,5  1970,1  1973,2  1974,4  1975,2  1976,7  1977,3  1978,2  1979,4  1980,2  1981,4  1982,3  1983,3  1984,1  1987,3  1988,1  1989,2  1990,2  1991,4  1993,2  1994,4  1995,2  1996,2  1997,6  1998,5  1999,3  2000,8  2002,7  2003,3  2004,3  2005,3  2006,2  2007,3  2008,4
envisaged       envisaged/VBD/ROOT/0 nationalisation/NN/dobj/1  29      1966,1  1967,1  1969,3  1971,1  1974,1  1976,1  1980,4  1981,1  1985,2  1987,2  1988,2  1989,2  1991,2  1994,4  1998,1  2000,1
envisaged       envisaged/VBD/ROOT/0 nationalization/NN/dobj/1  43      1943,1  1948,1  1951,1  1963,1  1965,3  1966,1  1967,2  1970,2  1972,4  1974,1  1975,1  1977,2  1978,2  1979,3  1982,2  1983,3  1984,1  1985,4  1986,1  1987,1  1992,4  2001,1  2002,1
envisaged       envisaged/VBD/ROOT/0 nationhood/NN/dobj/1       14      1944,4  1946,1  1961,2  1967,1  2002,1  2005,4  2007,1
envisaged       envisaged/VBD/ROOT/0 nations/NNPS/dobj/1        13      1924,1  1955,3  1967,3  1987,2  1990,2  1999,1  2007,1
envisaged       envisaged/VBD/ROOT/0 nations/NNS/dobj/1 37      1945,1  1946,2  1947,2  1951,2  1961,2  1968,1  1970,2  1973,2  1975,1  1979,2  1981,1  1984,1  1985,1  1987,1  1988,4  1990,2  1992,1  1994,1  1997,2  2003,1  2004,1  2008,4
envisaged       envisaged/VBD/ROOT/0 nature/NN/dobj/1   72      1923,1  1932,1  1943,1  1946,2  1947,1  1956,3  1957,2  1959,2  1960,2  1961,1  1964,3  1966,1  1967,1  1968,2  1970,2  1971,1  1972,3  1973,2  1976,1  1978,1  1980,1  1981,3  1983,1  1987,2  1988,3  1989,1  1992,2  1993,3  1995,1  1996,1  1997,3  2001,2  2002,1  2004,4  2005,4  2006,5  2007,1  2008,1
envisaged       envisaged/VBD/ROOT/0 navy/NN/dobj/1     10      1940,1  1945,1  1951,1  1957,1  1962,1  1965,2  1989,1  1991,1  2005,1
envisaged       envisaged/VBD/ROOT/0 necessary/JJ/acomp/1       11      1973,1  1974,2  1979,1  1980,1  1983,2  1985,1  1990,1  1999,2
envisaged       envisaged/VBD/ROOT/0 necessity/NN/dep/1 12      1926,3  1929,1  1937,2  1941,1  1952,1  1956,1  1959,1  1960,1  1987,1
envisaged       envisaged/VBD/ROOT/0 necessity/NN/dobj/1        131     1923,1  1924,1  1926,4  1929,1  1930,2  1935,1  1936,1  1937,2  1940,4  1941,1  1943,1  1944,2  1946,2  1947,2  1948,1  1951,1  1952,5  1953,1  1954,2  1955,1  1956,2  1959,1  1960,3  1961,13 1962,1  1963,5  1964,2  1965,1  1967,1  1968,3  1971,4  1972,1  1974,1  1977,3  1978,1  1980,3  1981,5  1983,3  1985,2  1987,2  1988,3  1991,1  1992,3  1993,1  1994,2  1995,4  1996,3  1998,4  1999,2  2000,1  2001,1  2002,2  2003,2  2004,1  2005,1  2006,4  2007,2  2008,1
envisaged       envisaged/VBD/ROOT/0 need/NN/dobj/1     340     1929,3  1931,1  1932,2  1936,1  1940,2  1946,1  1947,2  1948,2  1949,1  1950,3  1952,1  1953,1  1954,5  1955,4  1957,8  1959,7  1960,4  1961,4  1963,4  1964,1  1965,9  1966,3  1967,6  1968,4  1969,3  1970,2  1971,1  1972,4  1973,6  1974,3  1975,7  1976,5  1978,1  1979,6  1980,3  1981,5  1983,3  1984,2  1985,3  1986,7  1987,7  1988,6  1989,13 1990,11 1991,5  1992,7  1993,11 1994,5  1995,10 1996,5  1997,8  1998,6  1999,5  2000,6  2001,11 2002,6  2003,7  2004,19 2005,13 2006,12 2007,21 2008,6
envisaged       envisaged/VBD/ROOT/0 need/VB/ccomp/1    77      1953,1  1963,3  1966,1  1970,2  1971,1  1976,1  1978,1  1979,1  1980,1  1982,2  1983,2  1986,3  1988,4  1989,3  1990,1  1991,1  1993,1  1994,9  1995,3  1996,1  1997,3  1998,3  1999,1  2000,3  2001,4  2003,2  2004,2  2005,6  2006,1  2007,2  2008,8
envisaged       envisaged/VBD/ROOT/0 need/VBP/ccomp/1   37      1944,1  1945,2  1947,3  1957,2  1965,2  1966,3  1969,1  1970,4  1971,1  1975,3  1977,2  1978,1  1984,1  1985,1  1986,2  1992,1  1996,1  1998,2  2003,1  2006,1  2007,1  2008,1
envisaged       envisaged/VBD/ROOT/0 needed/VBN/advcl/1 10      1955,3  1958,1  1964,1  1989,2  1997,1  1998,1  2006,1
envisaged       envisaged/VBD/ROOT/0 needed/VBN/ccomp/1 36      1936,1  1960,2  1973,3  1977,3  1980,1  1982,2  1987,3  1988,2  1990,2  1993,1  1997,2  2000,1  2001,2  2002,3  2003,5  2004,2  2005,1
envisaged       envisaged/VBD/ROOT/0 needs/NNS/dobj/1   46      1915,3  1916,6  1917,1  1923,1  1936,1  1942,1  1946,2  1951,1  1952,1  1961,1  1967,3  1970,2  1975,2  1983,1  1985,1  1986,2  1992,3  1993,1  1997,1  1998,3  1999,2  2000,1  2001,2  2002,2  2003,1  2004,1
envisaged       envisaged/VBD/ROOT/0 negotiation/NN/dobj/1      54      1940,1  1946,3  1947,2  1951,2  1954,1  1956,1  1958,2  1964,1  1965,1  1968,6  1971,1  1972,1  1975,1  1982,2  1984,1  1988,1  1989,2  1991,1  1992,1  1996,4  1997,4  1998,2  2000,4  2001,3  2002,1  2003,2  2005,2  2006,1
envisaged       envisaged/VBD/ROOT/0 negotiations/NNS/dobj/1    63      1954,3  1962,1  1969,5  1971,3  1972,1  1973,5  1977,1  1978,1  1980,2  1982,2  1983,3  1986,1  1988,2  1989,3  1990,4  1991,2  1993,4  1994,1  1997,6  1999,1  2001,1  2002,1  2003,2  2004,4  2005,3  2008,1
...

The arcs corpus (Google_Books_corpus_version_20130501_English_All_Arcs.txt) stats:
Size: 179,736,720,202 bytes
Encountered lines: 918,860,187
Encountered words: 7,419,031,777
Longest line: 4,244
Longest word: 217

I am already out of external memory, having the five corpora might require 1TB drive, dedicated, preferably m.2, then 16 threads would run at 1GB/s in wildcard mode.

In short, I did my best to offer Uncompromised Speed, however the running machine has to be stuffed with cores and RAM.
This scamp looks dear to me:
New Posts  All Forums:Forum Nav:
  Return Home
  Back to Forum: Application Programming
Overclock.net › Forums › Software, Programming and Coding › Coding and Programming › Application Programming › FAST 'on the fly' fuzzy string matching console tool written in C