def test_analyze_high_index_intersection(): text = TextHtml(u"Я бы хотел приобрести фронтальные погрузчики!") words = map(Sentence, [u'хотел приобрести фронтальные', u'приобрести фронтальные погрузчики']) mark_with_words(words, text) result, additional_words = find_words(words, text) assert additional_words != {} assert u'' not in additional_words
def test_find_words_with_intersections(task, text, new_task): words = map(Sentence, task.keys()) text = TextHtml(text) mark_with_words(words, text) result, additional_words = find_words(words, text) assert task == result assert new_task == additional_words
def test_merge(task, text, new_task): words = map(Sentence, task.keys()) text = TextHtml(text) mark_with_words(words, text) result, additional_words = find_words(words, text) assert additional_words == new_task assert result == task
def test_some_text(): text = TextHtml(u""" <h1>Ремонт кофемашин метро Проспект Вернадского</h1> <title>Ремонт кофемашин у метро Проспект Вернадского вызов мастера на дом в Москве, Сервис Хоум</title> Компания «СервисХоум» предлагает качественный ремонт кофемашин на дому. Устранение неполадок техники осуществляется оперативно и профессионально. Заглените в наш интернет<span class="ice-del"> -</span> магазин. Мы ремонтируем широкий спектр различных кофемашин у метро Проспект Вернадского и выполняем свою работу качественно. Наши специалисты: приедут по вашему вызову в назначенное время; произведут качественный ремонт и замену деталей аппарата; выполнят работы быстро и по выгодной стоимости. Перед тем как провести ремонт, осуществляется диагностика кофемашин в районе Проспекта Вернадского, и только после нее производится устранение неисправностей. Также специалисты «СервисХоум» проводят профилактические работы, продлевающие срок службы техники надолго. Обращаясь в «СервисХоум», вы можете быть полностью уверены в том, что наши специалисты выполнят ремонт вашей кофемашины оперативно и профессионально. Чтобы вызвать специалиста на дом, нужно оставить заявку или позвонить нам по номеру +7 (495) 212 0593. """, ignored_tags=[('title', ), ('h1', ), ('h2', ), ('h3', ), ('span', {'class': 'ice-del'})]) words = map(Sentence, [ u'[КОФЕМАШИН] [*] [ПРОСПЕКТ]', u'проспект вернадского', u'вернадского', u'интернет магазин']) mark_with_words(words, text) result, additional_words = find_words(words, text) assert result[u'[КОФЕМАШИН] [*] [ПРОСПЕКТ]'] == 2 assert result[u'вернадского'] == 1 assert result[u'интернет магазин'] == 1 assert u'вернадского' not in additional_words
def test_find_words_without_intersection(task, text): words = map(Sentence, task.keys()) text = TextHtml(text) mark_with_words(words, text) # так как пересечений нет, то и дополненного задания не будет result, additional_words = find_words(words, text) assert additional_words == {} assert result == task
def test_html_with_strong(): text = TextHtml(u"<p>Екарта для Екатеринбурга</p><p>Карту для оплаты проезда.</p>") assert len(text.sentences) == 2 words = map(Sentence, [ u'карту' ]) mark_with_words(words, text) result, additional_words = find_words(words, text) assert result[u'карту'] == 1
def test_asterisk_in_exact_word(): words = map(Sentence, [u'игры [*] разработчика', u'игры']) text = TextHtml(u'игры находит, но не игры русского разработчика') mark_with_words(words, text) result, additional_words = find_words(words, text) assert additional_words == {} assert result[u'игры'] == 1 assert result[u'игры [*] разработчика'] == 1 html = u"""<span data-markers="d203f33bb6e9ec9d0238e29d4ccfc97e">игры </span>находит, но не <span data-markers="f350ba1c1103dc72275a99ccc134dc3f inactive-d203f33bb6e9ec9d0238e29d4ccfc97e target-d203f33bb6e9ec9d0238e29d4ccfc97e">игры </span><span data-markers="f350ba1c1103dc72275a99ccc134dc3f target-d203f33bb6e9ec9d0238e29d4ccfc97e">русского </span><span data-markers="f350ba1c1103dc72275a99ccc134dc3f target-d203f33bb6e9ec9d0238e29d4ccfc97e">разработчика</span>""" assert text.build_html() == html
def test_word_child(): text = TextHtml(u"Дети наше будующее! Ребёнок не должен оставаться дома один") words = map(Sentence, [ u'[ДЕТИ]', u'[РЕБЁНОК]', ]) mark_with_words(words, text) result, additional_words = find_words(words, text) assert result[u'[ДЕТИ]'] == 1 assert result[u'[РЕБЁНОК]'] == 1
def test_paragraph_break(): text = TextHtml(u""" <p style="text-indent: 20px;">Дентальная <span data-markers="badef16d17cb3f15a6eae4e11b39ef9b" class="highlightedText">имплантация</span><br>Бескровная <span data-markers="badef16d17cb3f15a6eae4e11b39ef9b" class="highlightedText">имплантация</span><br>Лазерная <span data-markers="badef16d17cb3f15a6eae4e11b39ef9b" class="highlightedText">имплантация</span><br>Базальная <span data-markers="68d827caec2e46d49ea561212476052f inactive-badef16d17cb3f15a6eae4e11b39ef9b target-f7cf930ddf8a402b1c0d559e97932ad6 target-7bc22675ef51be0fb916f66f8b61013f target-badef16d17cb3f15a6eae4e11b39ef9b target-1ec1ca7a93460e9f12d8c84116914067" class="highlightedText">имплантация</span><br><br></p> <p style="text-indent: 20px;"><span data-markers="68d827caec2e46d49ea561212476052f inactive-7bc22675ef51be0fb916f66f8b61013f inactive-badef16d17cb3f15a6eae4e11b39ef9b target-f7cf930ddf8a402b1c0d559e97932ad6 target-7bc22675ef51be0fb916f66f8b61013f target-badef16d17cb3f15a6eae4e11b39ef9b target-1ec1ca7a93460e9f12d8c84116914067" class="highlightedText">Имплантация</span> <span data-markers="68d827caec2e46d49ea561212476052f inactive-1ec1ca7a93460e9f12d8c84116914067 inactive-f7cf930ddf8a402b1c0d559e97932ad6 inactive-7bc22675ef51be0fb916f66f8b61013f target-f7cf930ddf8a402b1c0d559e97932ad6 target-7bc22675ef51be0fb916f66f8b61013f target-badef16d17cb3f15a6eae4e11b39ef9b target-1ec1ca7a93460e9f12d8c84116914067" class="highlightedText">зубов</span> имеет разные технологии. Выбор определяет состояние костной ткани и дёсен пациента; место, где расположен <span data-markers="1ec1ca7a93460e9f12d8c84116914067" class="highlightedText">зуб;</span> количество <span data-markers="inactive-1ec1ca7a93460e9f12d8c84116914067 f7cf930ddf8a402b1c0d559e97932ad6 target-1ec1ca7a93460e9f12d8c84116914067" class="highlightedText">зубов</span> для восстановления; период времени, прошедший с момента потери <span data-markers="1ec1ca7a93460e9f12d8c84116914067" class="highlightedText">зуба.</span> Выбор технологии <span data-markers="7bc22675ef51be0fb916f66f8b61013f inactive-badef16d17cb3f15a6eae4e11b39ef9b inactive-7d63159b48a8683402e56a8fcc4cb772 target-f7cf930ddf8a402b1c0d559e97932ad6 target-7d63159b48a8683402e56a8fcc4cb772 target-badef16d17cb3f15a6eae4e11b39ef9b target-1ec1ca7a93460e9f12d8c84116914067" class="highlightedText">имплантации</span> <span data-markers="inactive-1ec1ca7a93460e9f12d8c84116914067 inactive-f7cf930ddf8a402b1c0d559e97932ad6 7bc22675ef51be0fb916f66f8b61013f target-f7cf930ddf8a402b1c0d559e97932ad6 target-7d63159b48a8683402e56a8fcc4cb772 target-badef16d17cb3f15a6eae4e11b39ef9b target-1ec1ca7a93460e9f12d8c84116914067" class="highlightedText">зубов</span> предварительно осуществляется при первичном осмотре и окончательно — по результатам компьютерной диагностики.</p> """) task = {u'[имплантация] [*] [зубов]': 0} words = map(Sentence, task.keys()) mark_with_words(words, text) result, additional_words = find_words(words, text) assert result == task
def test_build_with_markers(): word = Sentence(u'пластиковые окна') text = TextHtml(u'<p>купить пластиковые окна в москве</p>') mark_with_words([word], text) html = u'<p>купить <span data-markers="inactive-e4ca1dc74c4a889f31a1e24bb690b5c7">пластиковые </span>'\ u'<span data-markers="inactive-e4ca1dc74c4a889f31a1e24bb690b5c7">окна </span>в москве</p>' assert text.build_html() == html find_words([word], text) html = u'<p>купить <span data-markers="e4ca1dc74c4a889f31a1e24bb690b5c7">пластиковые </span>'\ u'<span data-markers="e4ca1dc74c4a889f31a1e24bb690b5c7">окна </span>в москве</p>' assert text.build_html() == html # проверим что множественный билд разметки ничего не сломает(там видоизменяется структура) assert text.build_html() == html # при повторной проверке уже отмаркированного списка - старые маркировки очищаются text = TextHtml(html) mark_with_words([word], text) find_words([word], text) assert text.build_html() == html
def test_word_good(): text = TextHtml(u""" А наша компания поможет вам с выбором лучшего санатория или пансионата. Рейтинг лучших санаторно-курортных комплексов вы можете увидеть на нашем сайте. """) words = map(Sentence, [ u'[ХОРОШИЙ]', u'[ЛУЧШИЙ]', ]) mark_with_words(words, text) result, additional_words = find_words(words, text) assert result[u'[ХОРОШИЙ]'] == 0 assert result[u'[ЛУЧШИЙ]'] == 2
def test_punctuation_negative(): words = [Sentence(u'знаки препинания')] text = TextHtml(u""" <p>знаки-препинания</p> <p>знаки. препинания</p> <p>знаки! препинания</p> <p>знаки? препинания</p> <p><span><span>знаки</span></span></p> <p><span><span>препинания</span></span></p> """) task = {u'знаки препинания': 0} mark_with_words(words, text) result, additional_words = find_words(words, text) assert result == task
def test_punctuation_positive(): words = [Sentence(u'знаки препинания')] text = TextHtml(u""" <p>знаки – препинания</p> <p>знаки, препинания</p> <p>знаки: препинания</p> <p>знаки (препинания</p> <p>знаки; препинания</p> <p>знаки "препинания</p> """) task = {u'знаки препинания': 6} mark_with_words(words, text) result, additional_words = find_words(words, text) assert result == task
def test_html_lists(): text = u""" <p>Виды имплантации зубов:</p> <ul> <li>Какая то имплантация</li> <li>Базальная имплантация</li> </ul> <p>Имплантация зубов имеет разные технологии.</p> """ text = TextHtml(text) task = {u'[имплантация] [*] [зубов]': 0} words = map(Sentence, task.keys()) mark_with_words(words, text) result, additional_words = find_words(words, text) assert result == task
def test_analyze_asterisk(): words = [Sentence(u'услуги * квартир')] text = TextHtml(u""" <li>услуги по ремонту квартир</li> <li>услуги отделки для квартир</li> <li>услуги по уборке для квартир более 100 кв метров</li> <li>услуги для уборки в роскошной квартир</li> <li>услуги в квартир</li> <li>услуги для квартир</li> <li>услуги квартир</li> """) mark_with_words(words, text) result, additional_words = find_words(words, text) assert result[u'услуги * квартир'] == 3
def test_find_phantom_groups(words, text, phantoms): words = map(Sentence, words) text = TextHtml(text) mark_with_words(words, text) _, additional_words = find_words(words, text) assert additional_words.keys() == phantoms
def test_multiple_words_in_one_sentence(): text = TextHtml(u"Машина врезалась в припаркованые машины!") word = Sentence(u'[машина]') mark_with_words([word], text) result, _ = find_words([word], text) assert result.values()[0] == 2
def test_english_titles(): word = Sentence(u'[бензопила] [husqvarna]') text = TextHtml(u'Бензопилы husqvarna - одни из лучших') mark_with_words([word], text) result, _ = find_words([word], text) assert result.values()[0] == 1