public void TestNoDupsAcrossGrams() { IEnumerable <Input> keys = AnalyzingSuggesterTest.Shuffle( new Input("foo bar bar bar bar", 50) ); Analyzer a = new MockAnalyzer(Random); FreeTextSuggester sug = new FreeTextSuggester(a, a, 2, (byte)0x20); sug.Build(new InputArrayIterator(keys)); assertEquals("foo bar/1.00", ToString(sug.DoLookup("foo b", 10))); }
public void TestTwoEndingHoles() { // Just deletes "of" Analyzer a = new TestEndingHoleAnalyzer(); IEnumerable <Input> keys = AnalyzingSuggesterTest.Shuffle( new Input("wizard of of oz", 50) ); FreeTextSuggester sug = new FreeTextSuggester(a, a, 3, (byte)0x20); sug.Build(new InputArrayIterator(keys)); assertEquals("", ToString(sug.DoLookup("wizard of of", 10))); }
public void TestUnigrams() { IEnumerable <Input> keys = AnalyzingSuggesterTest.Shuffle( new Input("foo bar baz blah boo foo bar foo bee", 50) ); Analyzer a = new MockAnalyzer(Random); FreeTextSuggester sug = new FreeTextSuggester(a, a, 1, (byte)0x20); sug.Build(new InputArrayIterator(keys)); // Sorts first by count, descending, second by term, ascending assertEquals("bar/0.22 baz/0.11 bee/0.11 blah/0.11 boo/0.11", ToString(sug.DoLookup("b", 10))); }
public void TestBasic() { IEnumerable <Input> keys = AnalyzingSuggesterTest.Shuffle( new Input("foo bar baz blah", 50), new Input("boo foo bar foo bee", 20) ); Analyzer a = new MockAnalyzer(Random); FreeTextSuggester sug = new FreeTextSuggester(a, a, 2, (byte)0x20); sug.Build(new InputArrayIterator(keys)); assertEquals(2, sug.Count); for (int i = 0; i < 2; i++) { // Uses bigram model and unigram backoff: assertEquals("foo bar/0.67 foo bee/0.33 baz/0.04 blah/0.04 boo/0.04", ToString(sug.DoLookup("foo b", 10))); // Uses only bigram model: assertEquals("foo bar/0.67 foo bee/0.33", ToString(sug.DoLookup("foo ", 10))); // Uses only unigram model: assertEquals("foo/0.33", ToString(sug.DoLookup("foo", 10))); // Uses only unigram model: assertEquals("bar/0.22 baz/0.11 bee/0.11 blah/0.11 boo/0.11", ToString(sug.DoLookup("b", 10))); // Try again after save/load: DirectoryInfo tmpDir = CreateTempDir("FreeTextSuggesterTest"); //tmpDir.Create(); FileInfo path = new FileInfo(Path.Combine(tmpDir.FullName, "suggester")); using (Stream os = new FileStream(path.FullName, FileMode.Create, FileAccess.Write)) sug.Store(os); using (Stream @is = new FileStream(path.FullName, FileMode.Open, FileAccess.Read)) { sug = new FreeTextSuggester(a, a, 2, (byte)0x20); sug.Load(@is); } assertEquals(2, sug.Count); } }
public void TestIllegalByteDuringBuild() { // Default separator is INFORMATION SEPARATOR TWO // (0x1e), so no input token is allowed to contain it IEnumerable <Input> keys = AnalyzingSuggesterTest.Shuffle( new Input("foo\u001ebar baz", 50) ); FreeTextSuggester sug = new FreeTextSuggester(new MockAnalyzer(Random)); try { sug.Build(new InputArrayIterator(keys)); fail("did not hit expected exception"); } catch (ArgumentException /*iae*/) { // expected } }
public void TestEndingHole() { // Just deletes "of" Analyzer a = new TestEndingHoleAnalyzer(); IEnumerable <Input> keys = AnalyzingSuggesterTest.Shuffle( new Input("wizard of oz", 50) ); FreeTextSuggester sug = new FreeTextSuggester(a, a, 3, (byte)0x20); sug.Build(new InputArrayIterator(keys)); assertEquals("wizard _ oz/1.00", ToString(sug.DoLookup("wizard of", 10))); // Falls back to unigram model, with backoff 0.4 times // prop 0.5: assertEquals("oz/0.20", ToString(sug.DoLookup("wizard o", 10))); }
public void TestEmptyString() { IEnumerable <Input> keys = AnalyzingSuggesterTest.Shuffle( new Input("foo bar bar bar bar", 50) ); Analyzer a = new MockAnalyzer(Random); FreeTextSuggester sug = new FreeTextSuggester(a, a, 2, (byte)0x20); sug.Build(new InputArrayIterator(keys)); try { sug.DoLookup("", 10); fail("did not hit exception"); } catch (ArgumentException /*iae*/) { // expected } }