def test_basic(self): chunk = Chunk([], "Здесь замен нет.", "ADD", "filename", 1) self.checker(chunk, None) self.assertEqual(0, len(self.checker.get_errors())) chunk = Chunk([], "Здeсь есть одна замена.", "ADD", "filename", 1) self.checker(chunk, None) self.assertEqual(1, len(self.checker.get_errors()))
def test_regex_matching(self): ch = Chunk([], "Онx. yно. оzо", "ADD", "filename", "1") r = regex.compile(r'([А-я]*([A-z])[А-я]+|[А-я]+([A-z])[А-я]*)') matches = r.findall(ch.get_mod_sents()[0]) self.assertEqual(3, len(matches)) self.assertEqual('x', matches[0][2]) self.assertEqual('y', matches[1][1]) self.assertEqual('z', matches[2][1])
def test_lev(self): # opts = ChunkOpts(True) opts = ChunkOpts() chunk = Chunk( "Но в нём теперь красовалась большая пробоина, которая требовала немедленного ремонта.", "Большими усилиями команды судно удалось вытащить из мели, но в нём теперь красовались большие пробоины, требовавшая немедленного ремонта. ", "", "", 1, opts) sim = 1.0 - chunk.measure_dist() self.assertGreater(0.3, sim)
def test_lev_reordering(self): opts = ChunkOpts(True) # opts = ChunkOpts() chunk = Chunk( "Но в нём теперь красовалась большая пробоина, которая требовала немедленного ремонта.", "Большая пробоина, которая требовала немедленного ремонта, в нём теперь красовалась. ", "", "", 1, opts) sim = 1.0 - chunk.measure_dist() self.assertGreater(0.2, sim)
def test_cos(self): opts = ChunkOpts(True) chunk = Chunk( "Но в нём теперь красовалась большая пробоина, которая требовала немедленного ремонта.", "Большими усилиями команды судно удалось вытащить из мели, но в нём теперь красовалась большая пробоина, требовавшая немедленного ремонта. ", "", "", 1, opts) # print u",".join(chunk.get_mod_tokens()) sim = ir_utils.cos_sim(ir_utils.gen_ngrams(chunk.get_orig_tokens(), 3), ir_utils.gen_ngrams(chunk.get_mod_tokens(), 3)) self.assertLess(0.4, sim)
def test_jac(self): opts = ChunkOpts(True) # opts = ChunkOpts() chunk = Chunk( "Но в нём теперь красовалась большая пробоина, которая требовала немедленного ремонта.", "Большими усилиями команды судно удалось вытащить из мели, но в нём теперь красовались большие пробоины, требовавшая немедленного ремонта. ", "", "", 1, opts) sim = ir_utils.jaccard(ir_utils.gen_ngrams(chunk.get_orig_tokens(), 1), ir_utils.gen_ngrams(chunk.get_mod_tokens(), 1)) self.assertLess(0.4, sim)
def test_tf(self): self.checker._typo_max_tf = 5 chunk = Chunk("", "Это не ашибка, это не ашибка, это не ашибка", "", "", 1) chunk_cpy = Chunk("", "Это не ашибка, это не ашибка, это не ашибка", "CPY", "", 2) logging.debug(chunk) self.checker(chunk, None) self.checker(chunk_cpy, None) self.assertEqual(0, len(self.checker.get_errors()))
def test_with_dot_and_space_in_the_end(fs): src_dir = '/test/sources/' fs.create_dir(src_dir) fs.create_file(src_dir + "знакомый.ваш.html") checker = chks.SourceDocsChecker(None, src_dir) chunk = Chunk("", "", "", "знакомый.ваш.html ", 1) checker(chunk, None) assert not checker.get_errors() chunk = Chunk("", "", "", "знакомый.ваш ", 1) checker(chunk, None) assert not checker.get_errors()
def test_source_docs_checker_basic(fs): src_dir = '/test/sources/' fs.create_dir(src_dir) fs.create_file(src_dir + "1.html") fs.create_file(src_dir + "wiki.html") fs.create_file(src_dir + "lenovo") fs.create_file(src_dir + "я_рюзский.pdf") checker = chks.SourceDocsChecker(None, src_dir) chunk = Chunk("", "", "", "1", 1) checker(chunk, None) assert not checker.get_errors() chunk = Chunk("", "", "", "1.html", 1) checker(chunk, None) assert not checker.get_errors() chunk = Chunk("", "", "", "wiki.html", 1) checker(chunk, None) assert not checker.get_errors() chunk = Chunk("", "", "", "wiki", 1) checker(chunk, None) assert not checker.get_errors() chunk = Chunk("", "", "", "lenovo", 1) checker(chunk, None) assert not checker.get_errors() chunk = Chunk("", "", "", "lenovo.html", 1) checker(chunk, None) assert not checker.get_errors() chunk = Chunk("", "", "", "я_рюзский.pdf", 1) checker(chunk, None) assert not checker.get_errors() chunk = Chunk("", "", "", "я_рюзский", 1) checker(chunk, None) assert not checker.get_errors() chunk = Chunk("", "", "", "я_рюзский.txt", 1) checker(chunk, None) assert not checker.get_errors() chunk = Chunk("", "", "", "2.html", 1) checker(chunk, None) assert len(checker.get_errors()) == 1
def test_simple(self): chunk = Chunk("Text about animals.", "Text - about = animals.", "LPR,ADD", "rvan'", 1) self.checker(chunk, None) errors = self.checker.get_errors() self.assertEqual(1, len(errors)) self.assertEqual(ErrSeverity.HIGH, errors[0].sev)
def test_with_typos(self): chunk = Chunk("", "я визиал и атправил вам я нарушел", "", "", 1) logging.debug(chunk) self.checker(chunk, None) errors = self.checker.get_errors() logging.debug("Errors: %s", "\n".join(str(e) for e in errors)) self.assertEqual(1, len(errors)) self.assertEqual(ErrSeverity.HIGH, errors[0].sev)
def test_src_stat(self): all_chunks = [ [[Chunk("", "", "ADD", "src1", i) for i in range(0, 20)], [Chunk("", "", "DEL", "src2", i) for i in range(0, 15)], [Chunk("", "", "DEL", "src3", i) for i in range(0, 4)]], [[Chunk("", "", "DEL", "src4", i) for i in range(0, 46)], [Chunk("", "", "DEL", "src5", i) for i in range(0, 123)], [Chunk("", "", "DEL", "src6", i) for i in range(0, 5)], [Chunk("", "", "DEL", "src7", i) for i in range(0, 29)]] ] collector = SrcStatCollector() for chunks in all_chunks: collector(itertools.chain(*chunks)) src_cnt_stat, sents_in_src_stat = collector.get_stat() self.assertEqual(2, len(src_cnt_stat)) self.assertEqual(1, src_cnt_stat[3]) self.assertEqual(1, src_cnt_stat[4]) self.assertEqual(5, len(sents_in_src_stat)) self.assertEqual(2, sents_in_src_stat[0]) self.assertEqual(1, sents_in_src_stat[1]) self.assertEqual(2, sents_in_src_stat[2]) self.assertEqual(1, sents_in_src_stat[4]) self.assertEqual(1, sents_in_src_stat[10])
def test_fix_term_in_the_end(self): checker = chks.SentCorrectnessChecker(['term_in_the_end']) chunk = Chunk("", "Without term ", "", "", 1) checker.fix(chunk) self.assertEqual("Without term.", chunk.get_mod_text()) chunk = Chunk("", ["Without term ", "wo term"], "", "", 1) checker.fix(chunk) self.assertEqual("Without term. wo term.", chunk.get_mod_text()) chunk = Chunk("", ["Boring sent.", "text"], "", "", 1) checker.fix(chunk) self.assertEqual("Boring sent. text.", chunk.get_mod_text())
def test_simple2(self): chunk = Chunk("Text about animals in the wild.", "Text - about = animals in a wild.", "LPR", "rvan'", 1) logging.debug(chunk) self.checker(chunk, None) errors = self.checker.get_errors() self.assertEqual(1, len(errors)) self.assertEqual(ErrSeverity.NORM, errors[0].sev)
def test_with_wrong_ext(fs): src_dir = '/test/sources/' fs.create_dir(src_dir) fs.create_file(src_dir + "test.hmtl") checker = chks.SourceDocsChecker(None, src_dir) chunk = Chunk("", "", "", "test.hmtl", 1) checker(chunk, None) assert not checker.get_errors()
def test_title_case(self): checker = chks.SentCorrectnessChecker(['title_case']) chunk = Chunk("", "Корректное предложение!", "", "", 1) checker(chunk, None) self.assertEqual(0, len(checker.get_errors())) chunk = Chunk("", "Из-за дефиса не работает str.istitle.", "", "", 1) checker(chunk, None) self.assertEqual(0, len(checker.get_errors())) chunk = Chunk("", '"Цитата: текст"', "", "", 1) checker(chunk, None) self.assertEqual(0, len(checker.get_errors())) chunk = Chunk("", '2009 number is ok.', "", "", 1) checker(chunk, None) self.assertEqual(0, len(checker.get_errors())) chunk = Chunk("", "маленькая буква.", "", "", 1) checker(chunk, None) self.assertEqual(1, len(checker.get_errors()))
def test_fix(self): text = "Ещётакже искуССТвенно содзано биологиеское оржуие (бубоны)." chunk = Chunk("", text, "", "", 1) text2 = "Нет ошибок" chunk2 = Chunk("", text2, "", "", 2) #NO fixes for CPY text3 = "Выливные и распыливающие авиационные приборы" chunk3 = Chunk("", text3, "CPY", "", 1) self.checker.fix_all([chunk, chunk2, chunk3]) self.assertEqual( "Ещётакже искусственно создано биологическое оружие (бубоны).", chunk.get_mod_text()) self.assertEqual("Нет ошибок", chunk2.get_mod_text()) self.assertEqual("Выливные и распыливающие авиационные приборы", chunk3.get_mod_text())
def test_term_in_the_end(self): checker = chks.SentCorrectnessChecker(['term_in_the_end']) chunk = Chunk("", "Correct sent with trailing spaces!!!!! ", "", "", 1) checker(chunk, None) self.assertEqual(1, len(chunk.get_mod_sents())) self.assertEqual(0, len(checker.get_errors())) chunk = Chunk("", "Boring sent.", "", "", 1) checker(chunk, None) self.assertEqual(0, len(checker.get_errors())) chunk = Chunk("", "Question mark?", "", "", 1) checker(chunk, None) self.assertEqual(0, len(checker.get_errors())) chunk = Chunk("", "Without term ", "", "", 1) checker(chunk, None) self.assertEqual(1, len(checker.get_errors()))
def test_fix_title_case(self): checker = chks.SentCorrectnessChecker(['title_case']) chunk = Chunk("", "маленькая буква.", "", "", 1) checker.fix(chunk) self.assertEqual("Маленькая буква.", chunk.get_mod_text()) chunk = Chunk( "", ". В основном токсин из организма выводится через почки.", "", "", 1) checker.fix(chunk) self.assertEqual(1, len(chunk.get_mod_sents())) self.assertEqual( "В основном токсин из организма выводится через почки.", chunk.get_mod_text())
def _try_create_chunk(row_vals, sent_num, vals_offs, opts): def check_str_cell(cell_val): if not isinstance(cell_val, str): raise RuntimeError("Sent # %d; Wrong value of the cell: %s" % (sent_num, str(cell_val))) return cell_val mod_text = row_vals[vals_offs + 0] orig_text = check_str_cell(row_vals[vals_offs + 1]) if not mod_text and not orig_text: raise RuntimeError("Row (%s) is empty!" % sent_num) return Chunk(mod_text = mod_text, orig_text = orig_text, orig_doc = _get_filename(row_vals[vals_offs + 2]), mod_type_str = check_str_cell(row_vals[vals_offs + 3]), chunk_num = sent_num, opts = opts)
def _try_create_chunk(row_vals, sent_num, opts): def check_str_cell(cell_val): if not isinstance(cell_val, str): raise RuntimeError("Sent # %d; Wrong value of the cell: %s" % (sent_num, str(cell_val))) return cell_val orig_text = [] #collect original text orig_text_col = 3 while True: try: val = row_vals[orig_text_col] except IndexError: break if val: orig_text.append(check_str_cell(val)) orig_text_col+=1 else: break mod_text = row_vals[2] if not mod_text: return None orig_doc = _get_filename(row_vals[0]) mod_type_str = check_str_cell(row_vals[1]) defined_cols = 0 defined_cols += bool(orig_doc) + bool(mod_type_str) + bool(orig_text) if defined_cols != 0 and defined_cols != 3: raise RuntimeError("Неправильный формат!") return Chunk(mod_text = mod_text, orig_text = orig_text, orig_doc = orig_doc, mod_type_str = mod_type_str, chunk_num = sent_num, opts = opts)
def test_source_docs_checker_with_whitespace(fs): src_dir = '/test/sources/' fs.create_dir(src_dir) fs.create_file(src_dir + "title kek.html") fs.create_file(src_dir + "знакомый ваш.html") fs.create_file(src_dir + "kek .html") checker = chks.SourceDocsChecker(None, src_dir) chunk = Chunk("", "", "", "title kek", 1) checker(chunk, None) assert not checker.get_errors() chunk = Chunk("", "", "", "title kek.html", 1) checker(chunk, None) assert not checker.get_errors() chunk = Chunk("", "", "", "знакомый ваш", 1) checker(chunk, None) assert not checker.get_errors() chunk = Chunk("", "", "", "знакомый ваш", 1) checker(chunk, None) assert not checker.get_errors() chunk = Chunk("", "", "", "знакомый ваш.html", 1) checker(chunk, None) assert not checker.get_errors() chunk = Chunk("", "", "", "kek .html", 1) checker(chunk, None) assert not checker.get_errors() chunk = Chunk("", "", "", "kek ", 1) checker(chunk, None) assert not checker.get_errors()
def test_co_occ(self): chunks = [ Chunk("", "", "ADD,DEL,SYN", "", 1), Chunk("", "", "ADD", "", 2), Chunk("", "", "ADD,HPR", "", 3), Chunk("", "", "ADD,DEL", "", 4), Chunk("", "", "SYN,DEL,HPR,LPR", "", 5), Chunk("", "", "ADD,DEL,SYN,LPR", "", 6) ] collector = StatCollector() collector(chunks[0:2]) collector(chunks[2:]) stat = collector.get_stat() self.assertEqual(5, len(stat.mod_type_freqs)) self.assertEqual(5, stat.mod_type_freqs[ModType.ADD]) self.assertEqual(3, stat.mod_type_freqs[ModType.SYN]) self.assertEqual(3, stat.mod_type_co_occur[(ModType.DEL, ModType.ADD)]) self.assertEqual(3, stat.mod_type_co_occur[(ModType.DEL, ModType.SYN)]) self.assertEqual( 2, stat.mod_type_co_occur[(ModType.DEL, ModType.ADD, ModType.SYN)]) self.assertEqual( 2, stat.mod_type_co_occur[(ModType.LPR, ModType.DEL, ModType.SYN)])
def test_eng_with_typos(self): chunk = Chunk("", "I failed to wite good english, shame on me!", "", "", 1) logging.debug(chunk) self.checker(chunk, None) self.assertEqual(1, len(self.checker.get_errors()))
def test_whitelist(self): text = "ошибкл, не ашибка." chunk = Chunk("", text, "", "", 1) checker = chks.SpellChecker(whitelist=["ашибка"]) checker.fix_all([chunk]) self.assertEqual("ошибка, не ашибка.", chunk.get_mod_text())
def test_abbr(self): text = "(совр. Гаити)" chunk = Chunk("", text, "", "", 1) self.checker.fix_all([chunk]) self.assertEqual("(совр. Гаити)", chunk.get_mod_text())
def test_wiki(self): text = "Уи́льям Си́дни - тонкий" chunk = Chunk("", text, "", "", 1) self.checker.fix_all([chunk]) self.assertEqual("Уи́льям Си́дни - тонкий", chunk.get_mod_text())
def test_missing_orig_sent(self): ch = Chunk([], "text", "ADD", "filename", "1") avg_orig = ch.get_avg_original_words_cnt() self.assertEqual(0.0, avg_orig)
def test_fix(self): chunk = Chunk("", ["искуᏟꓚCСTвенный.", "искуᏟꓚCСTвенный cнeг."], "", "", 1) self.checker.fix(chunk) self.assertEqual("искуССССТвенный. искуССССТвенный снег.", chunk.get_mod_text()) # Tор -> first letter is latin chunk = Chunk("", "Tор, HTTP-траффик", "", "", 1) self.checker.fix(chunk) self.assertEqual("Тор, HTTP-траффик", chunk.get_mod_text()) chunk = Chunk("", "Пpoтoкoл Http; шкoлa - école.", "", "", 1) self.checker.fix(chunk) self.assertEqual("Протокол Http; школа - école.", chunk.get_mod_text()) chunk = Chunk("", "Замен нет.", "", "", 1) self.checker.fix(chunk) self.assertEqual("Замен нет.", chunk.get_mod_text()) chunk = Chunk("", ["Замен нет.", "Зaмeны есть.", "Замен нет."], "", "", 1) self.checker.fix(chunk) self.assertEqual("Замен нет. Замены есть. Замен нет.", chunk.get_mod_text())
def test_NOT_fix_numbers(self): chunk = Chunk("", "1982г.", "", "", 1) self.checker.fix(chunk) self.assertEqual("1982г.", chunk.get_mod_text())