Skip to content

Commit 3224ce7

Browse files
benchmarks/ added, knuth_morris_pratt implemented
1 parent c04cf49 commit 3224ce7

20 files changed

+685
-88
lines changed

StringSearching.ipynb

+436-39
Large diffs are not rendered by default.

algorithm/boyer_moore_horspool.py

+50-49
Original file line numberDiff line numberDiff line change
@@ -1,49 +1,50 @@
1-
from collections import defaultdict
2-
from algorithm.base import Algorithm
3-
4-
class BoyerMooreHorspool(Algorithm):
5-
6-
def __init__(self, reference):
7-
spec_characters = '\tEmCGH7'
8-
reference = reference.translate(reference.maketrans('', '', spec_characters))
9-
self.reference = reference
10-
11-
@property
12-
def name(self):
13-
return 'Boyer-Moore-Horspool'
14-
15-
def set_candidate(self, candidate, **params):
16-
self.candidate = candidate
17-
18-
def set_skip_table(self):
19-
len_reference = len(self.reference)
20-
len_candidate = len(self.candidate)
21-
if len_candidate > len_reference:
22-
print("Error: len candidate > len references {} > {}.".format(len_candidate, len_reference))
23-
return -1
24-
25-
self.table_skip = defaultdict(lambda: len_candidate)
26-
27-
for offset in range(len_candidate - 1):
28-
self.table_skip[ord(self.candidate[offset])] = len_candidate - offset - 1
29-
30-
def search(self, multiple_search=False) -> list:
31-
self.set_skip_table()
32-
33-
len_reference = len(self.reference)
34-
len_candidate = len(self.candidate)
35-
36-
offset_lst = []
37-
offset = len_candidate - 1
38-
39-
while offset < len_reference:
40-
j = len_candidate - 1
41-
i = offset
42-
while j >= 0 and self.reference[i] == self.candidate[j]:
43-
j -= 1
44-
i -= 1
45-
if j == -1:
46-
offset_lst.append(i + 1)
47-
offset += self.table_skip[ord(self.reference[offset])]
48-
49-
return offset_lst
1+
from collections import defaultdict
2+
from algorithm.base import Algorithm
3+
from string import ascii_letters
4+
5+
6+
class BoyerMooreHorspool(Algorithm):
7+
8+
def __init__(self, reference):
9+
# reference = reference.translate(reference.maketrans('', '', ascii_letters))
10+
self.reference = reference
11+
12+
@property
13+
def name(self):
14+
return 'Boyer-Moore-Horspool'
15+
16+
def set_candidate(self, candidate, **params):
17+
self.candidate = candidate
18+
19+
def set_skip_table(self):
20+
len_reference = len(self.reference)
21+
len_candidate = len(self.candidate)
22+
if len_candidate > len_reference:
23+
print("Error: len candidate > len references {} > {}.".format(len_candidate, len_reference))
24+
return -1
25+
26+
self.table_skip = defaultdict(lambda: len_candidate)
27+
28+
for offset in range(len_candidate - 1):
29+
self.table_skip[ord(self.candidate[offset])] = len_candidate - offset - 1
30+
31+
def search(self, multiple_search=False) -> list:
32+
self.set_skip_table()
33+
34+
len_reference = len(self.reference)
35+
len_candidate = len(self.candidate)
36+
37+
offset_lst = []
38+
offset = len_candidate - 1
39+
40+
while offset < len_reference:
41+
j = len_candidate - 1
42+
i = offset
43+
while j >= 0 and self.reference[i] == self.candidate[j]:
44+
j -= 1
45+
i -= 1
46+
if j == -1:
47+
offset_lst.append(i + 1)
48+
offset += self.table_skip[ord(self.reference[offset])]
49+
50+
return offset_lst

algorithm/knuth_morris_pratt.py

+80
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,80 @@
1+
from collections import defaultdict
2+
from algorithm.base import Algorithm
3+
from string import ascii_letters
4+
5+
6+
class KnuthMorrisPratt(Algorithm):
7+
8+
def __init__(self, reference):
9+
# reference = reference.translate(reference.maketrans('', '', ascii_letters))
10+
self.reference = reference
11+
12+
@property
13+
def name(self):
14+
return 'Knuth-Morris-Pratt'
15+
16+
def set_candidate(self, candidate, **params):
17+
self.candidate = candidate
18+
19+
def search(self, multiple_search=False) -> list:
20+
"""Return the lowest index of T at which substring P begins (or else -1)."""
21+
len_reference = len(self.reference)
22+
len_candidate = len(self.candidate)
23+
if len_candidate > len_reference:
24+
print("Error: len candidate > len references {} > {}.".format(len_candidate, len_reference))
25+
return -1
26+
# create lps[] that will hold the longest prefix suffix
27+
# values for pattern
28+
self.lps = [0] * len_candidate
29+
j = 0 # index for pat[]
30+
31+
# Preprocess the pattern (calculate lps[] array)
32+
self.computeLPSArray()
33+
34+
offset_lst = []
35+
36+
i = 0 # index for txt[]
37+
while i < len_reference:
38+
if self.candidate[j] == self.reference[i]:
39+
i += 1
40+
j += 1
41+
42+
if j == len_candidate:
43+
offset_lst.append(i - j)
44+
j = self.lps[j - 1]
45+
if (not multiple_search):
46+
return offset_lst
47+
# mismatch after j matches
48+
elif i < len_reference and self.candidate[j] != self.reference[i]:
49+
# Do not match lps[0..lps[j-1]] characters,
50+
# they will match anyway
51+
if j != 0:
52+
j = self.lps[j - 1]
53+
else:
54+
i += 1
55+
return offset_lst
56+
57+
def computeLPSArray(self):
58+
len_candidate = len(self.candidate)
59+
60+
length = 0 # length of the previous longest prefix suffix
61+
62+
self.lps[0] = 0 # lps[0] is always 0
63+
i = 1
64+
65+
# the loop calculates lps[i] for i = 1 to M-1
66+
while i < len_candidate:
67+
if self.candidate[i] == self.candidate[length]:
68+
length += 1
69+
self.lps[i] = length
70+
i += 1
71+
else:
72+
if length != 0:
73+
# This is tricky. Consier the example AAACAAAA
74+
# and i = 7
75+
length = self.lps[length - 1]
76+
77+
# Also, note that we do not increment i here
78+
else:
79+
self.lps[i] = 0
80+
i += 1

benchmarks/bad_t_1.txt

+1
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
aaaaaaaaab

benchmarks/bad_t_2.txt

+1
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaab

benchmarks/bad_t_3.txt

+1
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaab

benchmarks/bad_t_4.txt

+1
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaab

benchmarks/bad_w_1.txt

+1
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
ab

benchmarks/bad_w_2.txt

+1
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
aaaaaaaaab

benchmarks/bad_w_3.txt

+1
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaab

benchmarks/bad_w_4.txt

+1
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaab

benchmarks/good_t_1.txt

+1
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
Гостиная Анны Павловны начала понемногу наполняться. Приехала высшая знать Петербурга, люди самые разнородные по возрастам и характерам, но одинаковые по обществу, в каком все жили; приехала дочь князя Василия, красавица Элен, заехавшая за отцом, чтобы с ним вместе ехать на праздник посланника. Она была в шифре и бальном платье. Приехала и известная, как la femme la plus séduisante de Pétersbourg 1, молодая, маленькая княгиня Болконская, прошлую зиму вышедшая замуж и теперь не выезжавшая в большой свет по причине своей беременности, но ездившая еще на небольшие вечера. Приехал князь Ипполит, сын князя Василия, с Мортемаром, которого он представил; приехал и аббат Морио и многие другие.

benchmarks/good_t_2.txt

+7
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
Маленькая княгиня, переваливаясь, маленькими быстрыми шажками обошла стол с рабочею сумочкой на руке и, весело оправляя платье, села на диван, около серебряного самовара, как будто все, что она ни делала, было partie de plaisir 3 для нее и для всех ее окружавших.
2+
— J'ai apporté mon ouvrage 4, — сказала она, развертывая свой ридикюль и обращаясь ко всем вместе.
3+
— Смотрите, Annette, ne me jouez pas un mauvais tour, — обратилась она к хозяйке. — Vous m'avez écrit que c'était une toute petite soirée; voyez comme je suis attifée 5.
4+
— Вы не знаете аббата Морио? Он очень интересный человек... — сказала она.
5+
— Да, я слышал про его план вечного мира, и это очень интересно, но едва ли возможно...
6+
— Вы думаете?.. — сказала Анна Павловна, чтобы сказать что-нибудь и вновь обратиться к своим занятиям хозяйки дома, но Пьер сделал обратную неучтивость. Прежде он, не дослушав слов собеседницы, ушел; теперь он остановил своим разговором собеседницу, которой нужно было от него уйти. Он, нагнув голову и расставив большие ноги, стал доказывать Анне Павловне, почему он полагал, что план аббата был химера.
7+
— Мы после поговорим, — сказала Анна Павловна, улыбаясь.

0 commit comments

Comments
 (0)