def test_speed(): """long execution""" with open("Vojna_i_mir._Tom_1.txt", 'r') as file: war_and_peace = file.read() print(len(war_and_peace)) # 2989848 limits = range(10, len(war_and_peace), 50000) pattern1 = "князь Андрей" pattern2 = " Болконский " pattern3 = "простумитесь" rk_times = [] aho_times = [] for limit in limits: start = time() rk_indices = rabin_karp([pattern1, pattern2, pattern3], war_and_peace) end = time() rk_time = end - start rk_times.append(rk_time) #, pattern2, pattern3, pattern4]) start = time() A = Automaton([pattern1, pattern2, pattern3]) aho_indices = A.search_in(war_and_peace) end = time() aho_time = end - start aho_times.append(aho_time) assert rk_indices == aho_indices # plt.bar(['Rabin-Karp', "Aho-Korasik"], [rk_time, aho_time]) plt.plot(limits, rk_times, label='Rabin-Karp') plt.plot(limits, aho_times, label='Aho-Korasick') plt.legend() plt.title('Searching patterns in "War and peace"') plt.show()
def test_speed_barplot(): with open("Vojna_i_mir._Tom_1.txt", 'r') as file: war_and_peace = file.read() pattern1 = "князь Андрей" pattern2 = " Болконский " pattern3 = "простумитесь" start = time() rk_indices = rabin_karp([pattern1, pattern2, pattern3], war_and_peace) end = time() rk_time = end - start start = time() A = Automaton([pattern1, pattern2, pattern3]) aho_indices = A.search_in(war_and_peace) end = time() aho_time = end - start assert rk_indices == aho_indices plt.bar(['Rabin-Karp', "Aho-Korasik"], [rk_time, aho_time]) plt.show()
def test_multiple_hits(self): string = "AABAACAADAABAABA" pattern = "AABA" self.assertTrue(rabin_karp(string, pattern), [0, 9, 12])
def test_no_match(self): string = "ab123456" pattern = "cd" self.assertEquals(rabin_karp(string, pattern), [])
def test_pattern_with_numeric(self): string = "ab12a" pattern = "b1" self.assertEquals(rabin_karp(string, pattern), [1])
def testWord(self): for w in self.words: self.assertEqual(rabin_karp(w[0],w[1]), w[2])
def testSubBigger(self): self.assertEqual(rabin_karp("LeloLelo","lelo"), -1)
def testEmpty(self): self.assertEqual(rabin_karp("",""), -1) self.assertEqual(rabin_karp(""," "), -1) self.assertEqual(rabin_karp(" ",""), -1)
def testNull(self): self.assertEqual(rabin_karp(None, None), -1)
def testWord(self): for w in self.words: self.assertEqual(rabin_karp(w[0], w[1]), w[2])
def testSubBigger(self): self.assertEqual(rabin_karp("LeloLelo", "lelo"), -1)
def testEmpty(self): self.assertEqual(rabin_karp("", ""), -1) self.assertEqual(rabin_karp("", " "), -1) self.assertEqual(rabin_karp(" ", ""), -1)
def test_rabin_karp(): print("Rabin-Karp search;") print_params(default_pattern, default_text) indices = rabin_karp([default_pattern], default_text) print("indices:", indices)
end = time.time() time_p.append((i, end-start)) """ """ for x in short_text: for y in short_pattern: if x == y: c = 0 """ # Vary Radix time_r = [] for i in [8, 64, 256, 512]: # [128, 140, 150, 175, 200, 225, 256]: start = time.time() # rk.rabin_karp(short_text, short_pattern, radix=i, prime=pr) rk.rabin_karp(short_text, short_pattern, radix=i, prime=pr) end = time.time() time_r.append((i, end - start)) """ def naive_match(t, p): shifts = [] for x in range(len(t) - len(p)): z = 0 for y in range(len(p)): if not p[y] == t[x+y]: break z += 1 if z == len(p): shifts.append(x) return shifts