Exemplo n.º 1
0
 def spans(self):
     for object in self.objects:
         for span in object.spans:
             label = span.type + '_' + object.id[-2:]
             yield Span(span.start, span.stop, label)
         label = object.type + '_' + object.id[-2:]
         yield Span(object.start, object.stop, label)
Exemplo n.º 2
0
def select_spans(markup):
    for object in markup.objects:
        type = object.type
        if type == 'Person':
            yield Span(object.start, object.stop, object.type)
        elif type == 'Org':
            spans = [_ for _ in object.spans if _.type == 'org_name']
            for span in filter_overlapping(spans):
                yield Span(span.start, span.stop, type)
        elif type in ('LocOrg', 'Location'):
            spans = [_ for _ in object.spans if _.type == 'loc_name']
            for span in filter_overlapping(spans):
                yield Span(span.start, span.stop, type)
Exemplo n.º 3
0
def parse_annotations(data):
    if 'named-entity' not in data:
        return
    for item in data['named-entity']:
        start = item['start']
        stop = item['end']
        type = item['value']['tag']
        yield Span(start, stop, type)
Exemplo n.º 4
0
    TexterraMarkup,
    TexterraContainerAnnotator
)
from nerus.annotators.tomita import (
    TomitaMarkup,
    TomitaFact,
    TomitaContainerAnnotator
)


TEXT = 'В США прядь волос третьего президента Соединенных Штатов Томаса Джефферсона продали на аукционе в Техасе за 6,9 тысячи долларов передает Life.'

TESTS = [
    [
        DeeppavlovContainerAnnotator,
        DeeppavlovMarkup(text='В США прядь волос третьего президента Соединенных Штатов Томаса Джефферсона продали на аукционе в Техасе за 6,9 тысячи долларов передает Life.', spans=[Span(start=2, stop=5, type='LOC'), Span(start=38, stop=56, type='LOC'), Span(start=57, stop=75, type='PER'), Span(start=98, stop=104, type='LOC'), Span(start=137, stop=141, type='ORG')])
    ],
    [
        MitieContainerAnnotator,
        MitieMarkup(text='В США прядь волос третьего президента Соединенных Штатов Томаса Джефферсона продали на аукционе в Техасе за 6,9 тысячи долларов передает Life.', spans=[Span(start=2, stop=5, type='LOC'), Span(start=57, stop=75, type='PERS'), Span(start=98, stop=104, type='LOC'), Span(start=137, stop=141, type='ORG')])
    ],
    [
        NatashaContainerAnnotator,
        NatashaMarkup(text='В США прядь волос третьего президента Соединенных Штатов Томаса Джефферсона продали на аукционе в Техасе за 6,9 тысячи долларов передает Life.', matches=[NatashaMatch(start=2, stop=5, type='Location', fact={'name': 'сша'}), NatashaMatch(start=38, stop=75, type='Location', fact={'name': 'соединённый штат томас джефферсон'}), NatashaMatch(start=57, stop=75, type='Name', fact={'last': 'джефферсон', 'first': 'томас'})])
    ],
    [
        PullentiContainerAnnotator,
        PullentiMarkup(text='В США прядь волос третьего президента Соединенных Штатов Томаса Джефферсона продали на аукционе в Техасе за 6,9 тысячи долларов передает Life.', matches=[PullentiMatch(referent=Referent(label='GEO', slots=[Slot(key='ALPHA2', value='US'), Slot(key='NAME', value='США'), Slot(key='NAME', value='СОЕДИНЕННЫЕ ШТАТЫ'), Slot(key='NAME', value='СОЕДИНЕННЫЕ ШТАТЫ АМЕРИКИ'), Slot(key='TYPE', value='государство')]), span=PullentiSpan(start=2, stop=5), children=[]), PullentiMatch(referent=Referent(label='PERSON', slots=[Slot(key='SEX', value='MALE'), Slot(key='LASTNAME', value='ТОМАС'), Slot(key='FIRSTNAME', value='ДЖЕФФЕРСОН'), Slot(key='ATTRIBUTE', value=Referent(label='PERSONPROPERTY', slots=[Slot(key='REF', value=Referent(label='GEO', slots=[Slot(key='ALPHA2', value='US'), Slot(key='NAME', value='США'), Slot(key='NAME', value='СОЕДИНЕННЫЕ ШТАТЫ'), Slot(key='NAME', value='СОЕДИНЕННЫЕ ШТАТЫ АМЕРИКИ'), Slot(key='TYPE', value='государство')])), Slot(key='NAME', value='третий президент')]))]), span=PullentiSpan(start=18, stop=75), children=[PullentiMatch(referent=Referent(label='PERSONPROPERTY', slots=[Slot(key='REF', value=Referent(label='GEO', slots=[Slot(key='ALPHA2', value='US'), Slot(key='NAME', value='США'), Slot(key='NAME', value='СОЕДИНЕННЫЕ ШТАТЫ'), Slot(key='NAME', value='СОЕДИНЕННЫЕ ШТАТЫ АМЕРИКИ'), Slot(key='TYPE', value='государство')])), Slot(key='NAME', value='третий президент')]), span=PullentiSpan(start=18, stop=56), children=[PullentiMatch(referent=Referent(label='GEO', slots=[Slot(key='ALPHA2', value='US'), Slot(key='NAME', value='США'), Slot(key='NAME', value='СОЕДИНЕННЫЕ ШТАТЫ'), Slot(key='NAME', value='СОЕДИНЕННЫЕ ШТАТЫ АМЕРИКИ'), Slot(key='TYPE', value='государство')]), span=PullentiSpan(start=38, stop=56), children=[])])]), PullentiMatch(referent=Referent(label='GEO', slots=[Slot(key='TYPE', value='штат'), Slot(key='NAME', value='ТЕХАС')]), span=PullentiSpan(start=98, stop=104), children=[]), PullentiMatch(referent=Referent(label='ORGANIZATION', slots=[Slot(key='PROFILE', value='Media'), Slot(key='NAME', value='LIFE')]), span=PullentiSpan(start=137, stop=141), children=[])])
    ],
    [
        TexterraContainerAnnotator,
Exemplo n.º 5
0
def parse_spans(tokens, spans):
    for start, stop, type, weight in spans:
        start = tokens[start].start
        stop = tokens[stop - 1].stop
        yield Span(start, stop, type)
Exemplo n.º 6
0
# coding: utf-8
from __future__ import unicode_literals

from nerus.path import (join_path, get_dir)
from nerus import load_nerus
from nerus.markup import Markup
from nerus.span import Span

DATA_DIR = join_path(get_dir(__file__), 'data')
NERUS = join_path(DATA_DIR, 'test.jsonl.gz')

ETALON = Markup(
    text=
    'Вице-премьер по социальным вопросам Татьяна Голикова рассказала, в каких регионах России зафиксирована наиболее высокая смертность от рака, сообщает РИА Новости. По словам Голиковой, чаще всего онкологические заболевания становились причиной смерти в Псковской, Тверской, Тульской и Орловской областях, а также в Севастополе. Вице-премьер напомнила, что главные факторы смертности в России — рак и болезни системы кровообращения. В начале года стало известно, что смертность от онкологических заболеваний среди россиян снизилась впервые за три года. По данным Росстата, в 2017 году от рака умерли 289 тысяч человек. Это на 3,5 процента меньше, чем годом ранее.',
    spans=[
        Span(start=36, stop=52, type='PER'),
        Span(start=82, stop=88, type='LOC'),
        Span(start=149, stop=160, type='ORG'),
        Span(start=172, stop=181, type='PER'),
        Span(start=251, stop=260, type='LOC'),
        Span(start=262, stop=270, type='LOC'),
        Span(start=272, stop=280, type='LOC'),
        Span(start=283, stop=301, type='LOC'),
        Span(start=313, stop=324, type='LOC'),
        Span(start=383, stop=389, type='LOC'),
        Span(start=560, stop=568, type='ORG')
    ])


# Should work in isolation (just requirements/main.txt)
def test_load_nerus():
Exemplo n.º 7
0
)
from pullenti_client.referent import Referent
from nerus.sources.ne5 import (
    Ne5Markup,
    Ne5Span
)
from nerus.sources.factru import (
    FactruMarkup,
    FactruObject,
    FactruSpan
)


DEEPPALVOL_TESTS = [
    [
        DeeppavlovMarkup(text='«Объединительный собор», инициированный президентом Украины Петром Порошенко и патриархом Варфоломеем, пройдет 15 декабря в Софийском соборе Киева, передает РИА Новости.', spans=[Span(start=52, stop=59, type='LOC'), Span(start=60, stop=76, type='PER'), Span(start=90, stop=101, type='PER'), Span(start=124, stop=140, type='ORG'), Span(start=141, stop=146, type='LOC'), Span(start=157, stop=168, type='ORG')]),
        Markup(text='«Объединительный собор», инициированный президентом Украины Петром Порошенко и патриархом Варфоломеем, пройдет 15 декабря в Софийском соборе Киева, передает РИА Новости.', spans=[Span(start=52, stop=59, type='LOC'), Span(start=60, stop=76, type='PER'), Span(start=90, stop=101, type='PER'), Span(start=124, stop=140, type='ORG'), Span(start=141, stop=146, type='LOC'), Span(start=157, stop=168, type='ORG')])
    ],
]
MITIE_TESTS = [
    [
        MitieMarkup(text='«Объединительный собор», инициированный президентом Украины Петром Порошенко и патриархом Варфоломеем, пройдет 15 декабря в Софийском соборе Киева, передает РИА Новости.', spans=[Span(start=52, stop=59, type='LOC'), Span(start=60, stop=76, type='PERS'), Span(start=90, stop=101, type='LOC'), Span(start=141, stop=146, type='LOC')]),
        Markup(text='«Объединительный собор», инициированный президентом Украины Петром Порошенко и патриархом Варфоломеем, пройдет 15 декабря в Софийском соборе Киева, передает РИА Новости.', spans=[Span(start=52, stop=59, type='LOC'), Span(start=60, stop=76, type='PER'), Span(start=90, stop=101, type='LOC'), Span(start=141, stop=146, type='LOC')])
    ],
]
NATASHA_TESTS = [
    [
        NatashaMarkup(text='«Объединительный собор», инициированный президентом Украины Петром Порошенко и патриархом Варфоломеем, пройдет 15 декабря в Софийском соборе Киева, передает РИА Новости.', matches=[NatashaMatch(start=52, stop=59, type='Location', fact={'name': 'украина'}), NatashaMatch(start=60, stop=76, type='Name', fact={'first': 'пётр', 'last': 'порошенко'}), NatashaMatch(start=90, stop=101, type='Name', fact={'first': 'варфоломей'}), NatashaMatch(start=141, stop=146, type='Location', fact={'name': 'киев'}), NatashaMatch(start=157, stop=168, type='Organisation', fact={'name': 'РИА Новости'})]),
        Markup(text='«Объединительный собор», инициированный президентом Украины Петром Порошенко и патриархом Варфоломеем, пройдет 15 декабря в Софийском соборе Киева, передает РИА Новости.', spans=[Span(start=52, stop=59, type='LOC'), Span(start=60, stop=76, type='PER'), Span(start=90, stop=101, type='PER'), Span(start=141, stop=146, type='LOC'), Span(start=157, stop=168, type='ORG')])
    ],
    [
Exemplo n.º 8
0
import pytest

from nerus.const import PER, LOC, B, I, O
from nerus.token import Token
from nerus.span import Span
from nerus.bio import (format_bio, bio_spans, spans_bio, io_spans, spans_io)

T1 = Token(0, 1, '1')
T2 = Token(2, 3, '2')
T3 = Token(4, 5, '3')

P1 = Span(0, 1, PER)
P2 = Span(2, 3, PER)
P12 = Span(0, 3, PER)
L2 = Span(2, 3, LOC)

PB = format_bio(B, PER)
PI = format_bio(I, PER)
LB = format_bio(B, LOC)
LI = format_bio(I, LOC)

TESTS = [
    [[T1, T2, T3], [], [O, O, O], [O, O, O]],
    [[], [], [], []],
    [[T1, T2, T3], [P1], [PB, O, O], [PI, O, O]],
    [[T1, T2, T3], [P12], [PB, PI, O], [PI, PI, O]],
    [[T1, T2, T3], [P1, L2], [PB, LB, O], [PI, LI, O]],
    [[T1, T2], [P12], [PB, PI], [PI, PI]],
]

BIO_TESTS = [
Exemplo n.º 9
0
 def spans(self):
     for fact in self.facts:
         yield Span(fact.start, fact.stop, PER)
Exemplo n.º 10
0
from nerus.annotators.tomita import (TomitaMarkup, TomitaFact)
from nerus.annotators.pullenti import (PullentiMarkup, PullentiMatch,
                                       PullentiSpan)
from pullenti_client.referent import Referent
from nerus.sources.ne5 import (Ne5Markup, Ne5Span)
from nerus.sources.factru import (FactruMarkup, FactruObject, FactruSpan)
from nerus.sources.wikiner import WikinerMarkup
from nerus.sources.gareev import GareevMarkup

DEEPPALVOL_TESTS = [
    [
        DeeppavlovMarkup(
            text=
            '«Объединительный собор», инициированный президентом Украины Петром Порошенко и патриархом Варфоломеем, пройдет 15 декабря в Софийском соборе Киева, передает РИА Новости.',
            spans=[
                Span(start=52, stop=59, type='LOC'),
                Span(start=60, stop=76, type='PER'),
                Span(start=90, stop=101, type='PER'),
                Span(start=124, stop=140, type='ORG'),
                Span(start=141, stop=146, type='LOC'),
                Span(start=157, stop=168, type='ORG')
            ]),
        Markup(text=
               '«Объединительный собор», инициированный президентом Украины Петром Порошенко и патриархом Варфоломеем, пройдет 15 декабря в Софийском соборе Киева, передает РИА Новости.',
               spans=[
                   Span(start=52, stop=59, type='LOC'),
                   Span(start=60, stop=76, type='PER'),
                   Span(start=90, stop=101, type='PER'),
                   Span(start=124, stop=140, type='ORG'),
                   Span(start=141, stop=146, type='LOC'),
                   Span(start=157, stop=168, type='ORG')
Exemplo n.º 11
0
 def from_corus(cls, record):
     return WikinerMarkup(record.text, [Span(*_) for _ in record.spans])
Exemplo n.º 12
0
 def spans(self):
     for match in self.matches:
         yield Span(match.start, match.stop, match.type)
Exemplo n.º 13
0
from nerus.path import (join_path, get_dir)
from nerus.const import BSNLP_DIR
from nerus.span import Span
from nerus.sources.bsnlp import (BsnlpMarkup, BsnlpSource)

DATA_DIR = join_path(get_dir(__file__), 'data')
ETALON = [
    BsnlpMarkup(
        text=
        'Климкин рассказал, чего ожидает от газовых переговоров с Россией в Брюсселе\n\nУкраина во время второго раунда трехсторонних переговоров в Брюсселе будет настаивать на том, что транзит газа должен происходить в соответствии с нормами европейского законодательства. Об этом заявил министр иностранных дел Украины Павел Климкин на совместном брифинге с главой МИД Литвы Линасом Линкявичюсом в четверг, 10 января, передает\n\n"Наша позиция относительно будущего транзита, а также по европейской энергетической безопасности предельно четкая: мы готовы выполнить все соответствующие европейские регуляторные нормы для нашей газотранспортной системы. Мы считаем, что будущий транзит должен базироваться на прозрачных и эффективных регуляторах ЕС", - сказал Климкин. "Это означает, например, что газ будет покупаться на восточной границе Украины, что транзитный тариф будет рассчитываться по европейской методологии. То есть общий смысл нашей позиции - транзит должно происходить в соответствии с европейским законодательством ", - отметил глава МИД.\n\nОн подчеркнул, что общей позицией Украины и Литвы является то, что требования европейского законодательства должны быть распространены и на Nord stream-2, что фундаментально повысит европейскую энергетическую безопасность против России. Подытоживая, Климкин подчеркнул, что Украина готова к конструктивному диалогу о будущем транзита газа в Европу, но он должен базироваться на очень четких условиях, самое главное из которых - соответствие нормам европейского законодательства для обеспечения четких, эффективных и прозрачных предпосылок транзита. "Поэтому во время переговоров в Брюсселе 21 января мы будем исходить из этих очень простых, но очень важных требований", - отметил Климкин. Ранее глава НАК "Нафтогаз Украины" Андрей Коболев заявил о готовности Украины, при согласовании этого вопроса правительством, обсудить возможность просмотра или отказа от второго транзитного иска к российскому "Газпрому" на сумму более 12 млрд долларов в привязке с заключением нового долгосрочного контракта. Действующий контракт по транзиту российского газа через Украину заканчивается в конце 2019 года.\n',
        spans=[
            Span(start=0, stop=7, type='PER'),
            Span(start=57, stop=64, type='LOC'),
            Span(start=67, stop=75, type='LOC'),
            Span(start=77, stop=84, type='LOC'),
            Span(start=137, stop=145, type='LOC'),
            Span(start=302, stop=309, type='LOC'),
            Span(start=310, stop=323, type='PER'),
            Span(start=356, stop=365, type='ORG'),
            Span(start=366, stop=386, type='PER'),
            Span(start=733, stop=735, type='ORG'),
            Span(start=747, stop=754, type='PER'),
            Span(start=827, stop=834, type='LOC'),
            Span(start=1035, stop=1038, type='ORG'),
            Span(start=1075, stop=1082, type='LOC'),
            Span(start=1085, stop=1090, type='LOC'),
            Span(start=1181, stop=1194, type='PRO'),
            Span(start=1270, stop=1276, type='LOC'),
            Span(start=1291, stop=1298, type='PER'),
            Span(start=1315, stop=1322, type='LOC'),
            Span(start=1382, stop=1388, type='LOC'),
Exemplo n.º 14
0
 def from_corus(self, record):
     return GareevMarkup(record.text, [Span(*_) for _ in record.spans])
Exemplo n.º 15
0
from nerus.path import (join_path, get_dir)
from nerus.const import WIKINER_FILENAME
from nerus.span import Span
from nerus.sources.wikiner import (WikinerMarkup, WikinerSource)

DATA_DIR = join_path(get_dir(__file__), 'data')
ETALON = [
    WikinerMarkup(
        text=
        'На севере граничит с Латвией , на востоке -- с Белоруссией , на юго-западе -- c Польшей и Калининградской областью России .',
        spans=[
            Span(start=21, stop=28, type='LOC'),
            Span(start=47, stop=58, type='LOC'),
            Span(start=80, stop=87, type='LOC'),
            Span(start=90, stop=114, type='LOC'),
            Span(start=115, stop=121, type='LOC')
        ])
]


def test_load():
    path = join_path(DATA_DIR, WIKINER_FILENAME)
    guess = list(WikinerSource.load(path))
    assert guess == ETALON
Exemplo n.º 16
0
 def spans(self):
     for match in self.walk():
         start, stop = match.span
         yield Span(start, stop, match.referent.label)
Exemplo n.º 17
0
from nerus.path import (join_path, get_dir)
from nerus.const import GAREEV_DIR
from nerus.span import Span
from nerus.sources.gareev import (GareevMarkup, GareevSource)

DATA_DIR = join_path(get_dir(__file__), 'data')
ETALON = [
    GareevMarkup(
        text=
        'МОСКВА , 21 июня . / БИЗНЕС-ТАСС / . Группа НЛМК заняла второе место в рейтинге 35 наиболее конкурентоспособных сталелитейных компаний мира . Рейтинг составлялся World Steel Dynamics , ведущей международной исследовательской компанией , на основе оценки 23 параметров , включая расширение мощностей , близость к растущим рынкам сбыта и покупателям , производство продукции с высокой добавленной стоимостью , рентабельность , технологические инновации и другие . Об этом говорится в сообщении НЛМК . World Steel Dynamics высоко оценил такие преимущества НЛМК как низкие производственная себестоимость , самообеспеченность сырьем , высокие финансовые показатели , близость к рынкам сбыта , ценовая политика , деятельность компании в области социальной и экологической ответственности и безопасности труда . В рейтинге World Steel Dynamics НЛМК с 2007 года занимает стабильные позиции среди 6 крупнейших мировых металлургических компаний по уровню конкурентоспособности . Компания World Steel Dynamics является одним из авторитетных исследовательских центров в области металлургии и мировым лидером в области информационных продуктов , отражающих развитие черной металлургии в мире . Сотрудники WSD регулярно анализируют и публикуют исследования мировых цен на металлопрокат , всех составляющих производственных затрат в черной металлургии , факторов , определяющих спрос и предложение на стальном рынке , а также исследования финансовых показателей компаний-производителей стали в мире . В фокусе WSD постоянно находятся стратегические для черной металлургии вопросы . Сотрудники фирмы регулярно участвуют в специализированных исследованиях , проводимых в интересах различных заказчиков , предоставляют частные консультации , осуществляют консультационные услуги по вопросам инвестиций в ценные бумаги компаний черной металлургии . НЛМК – международная вертикально интегрированная металлургическая компания . Предприятия НЛМК расположены в России , Европе и США . Мощности по производству жидкой стали компании превышают 15 млн тонн в год . Выручка НЛМК в 2011 году составила 11,7 млрд долларов , рентабельность по показателю EBITDA составила 19,5 проц . Акции НЛМК торгуются в России на фондовой площадке РТС-ММВБ , а также в форме глобальных депозитарных акций на Лондонской фондовой бирже .',
        spans=[
            Span(start=21, stop=32, type='ORG'),
            Span(start=44, stop=48, type='ORG'),
            Span(start=162, stop=182, type='ORG'),
            Span(start=492, stop=496, type='ORG'),
            Span(start=499, stop=519, type='ORG'),
            Span(start=553, stop=557, type='ORG'),
            Span(start=816, stop=836, type='ORG'),
            Span(start=837, stop=841, type='ORG'),
            Span(start=978, stop=998, type='ORG'),
            Span(start=1192, stop=1195, type='ORG'),
            Span(start=1495, stop=1498, type='ORG'),
            Span(start=1830, stop=1834, type='ORG'),
            Span(start=1919, stop=1923, type='ORG'),
            Span(start=2047, stop=2051, type='ORG'),
            Span(start=2159, stop=2163, type='ORG'),
            Span(start=2204, stop=2212, type='ORG'),
            Span(start=2264, stop=2289, type='ORG')
        ])
]
Exemplo n.º 18
0
 def from_corus(self, record):
     return BsnlpMarkup(
         record.text,
         [Span(_.start, _.stop, _.type) for _ in record.spans]
     )