Объекты и аннотации данных — Stanza
Содержимое. и аннотации, используемые в Stanza, и как они взаимодействуют друг с другом.
Document
Объект Document
содержит аннотацию всего документа и автоматически генерируется, когда строка аннотируется Трубопровод
. Он содержит набор из Sentence
и сущностей (которые представлены как Span
s) и может быть легко преобразован в собственный объект Python.
Документ
Содержит следующие свойства:
СВОБОДА | Тип | Описание |
---|---|---|
Текст |
| |
. | ||
предложения | List[Sentence] | Список предложений в этом документе. |
сущности (энты) | List[Span] | Список сущностей в этом документе. |
num_tokens | int | Общее количество токенов в этом документе. |
num_words | int | Общее количество слов в этом документе. |
Документ
также содержит следующий метод (ы):
Метод | Возврат Тип | Описание |
---|---|---|
ITER_WORDS | 926569 | |
ITER_WORDS | ||
iter_tokens | Iterator[Token] | Итератор, возвращающий все токены в этом документе по порядку. |
to_dict | List[List[Dict]] | Создает дамп всего документа в виде списка словарей, где каждый словарь представляет токен, которые сгруппированы по предложениям в документе. |
to_serialized | байт | Создает дамп (с рассолом) всего документа, включая текст, в массив байтов, содержащий список списка словарей для каждой лексемы в каждом предложении в документе. |
from_serialized | Document | Метод класса для создания и инициализации нового документа из сериализованной строки, сгенерированной Document.to_serialized_string(). |
Sentence
Объект Sentence
представляет предложение (сегментированное TokenizeProcessor или предоставленное пользователем) и содержит список Token
в предложении, список всех его Word
s, а также список сущностей в предложении (представленный как Диапазон
с).
Предложение
Содержит следующие свойства:
Собственность | Тип | Описание | ||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
DOC | DOCCOMENT | . | ||||||||||||
текст | str | Необработанный текст для этого предложения. | ||||||||||||
зависимости | Список[(Word,str,Word)] | Список зависимостей для этого предложения, где каждый элемент содержит заголовок Слово отношения зависимости, тип отношения зависимости и зависимое Слово в этом отношении. | ||||||||||||
токены | List[Token] | Список токенов в этом предложении. | ||||||||||||
слова | List[Word] | Список слов в этом предложении. | ||||||||||||
сущности (энты) | List[Span] | Список сущностей в этом предложении. | ||||||||||||
тональность | str | Значение тональности для этого предложения в виде строки. Обратите внимание, что только несколько языков имеют модель тональности. | ||||||||||||
округ | ParseTree | Выбор округа для этого предложения, как ParseTree. Обратите внимание, что только несколько языков имеют модель избирательного округа. |
Приговор
также содержит следующие методы:
Метод | Возврат Тип | Описание |
---|---|---|
TO_DICT | .SICT 9005. SICLE 9005.SICLE 9005.SERENERIERINE 9005.SICLE 9005.SERENERIERINE. где каждый словарь представляет токен в предложении. | |
print_dependencies | Нет | Вывести синтаксические зависимости для этого предложения. |
print_tokens | Нет | Распечатать токены для этого предложения. |
print_words | Нет | Выведите слова для этого предложения. |
tokens_string | str | Аналогично print_tokens , но вместо вывода токенов выгружает токены в строку. |
слова_строка | стр | Аналогично print_words , но вместо того, чтобы печатать слова, выводит слова в строку. |
Token
Объект Token
содержит токен и список лежащих в его основе синтаксических Word
s. В случае, если токен представляет собой токен, состоящий из нескольких слов (например, французский au = à le ), токен будет иметь диапазон id
, как описано в спецификациях формата CoNLL-U (например, 3-4
), с его словами
свойств, содержащим базовые Word
s, соответствующий этим id
s. В других случаях объект Token
будет функционировать как простая оболочка вокруг одного объекта Word
, где его свойство words
является одноэлементным.
Токен
содержит следующие свойства:
Собственность | Тип | Описание |
---|---|---|
ID | ||
текст | str | Текст этого токена. Пример: «The». |
разное | str | Различные аннотации в отношении этого токена. Используется в конвейере для хранения, например, является ли токен токеном из нескольких слов. |
слов | List[Word] | Список синтаксических слов, лежащих в основе этого токена. |
start_char | int | Индекс начального символа для этого токена в необработанном тексте документа. Особенно полезно, если вы хотите выполнить детокенизацию в какой-то момент или применить аннотации к необработанному тексту. |
end_char | int | Индекс конечного символа для этого токена в необработанном тексте документа. Особенно полезно, если вы хотите выполнить детокенизацию в какой-то момент или применить аннотации к необработанному тексту. |
ner | str | Тег NER этого токена в формате BIOES. Пример: «Б-ОРГ». |
Token
also contains the following methods:
Method | Return Type | Description |
---|---|---|
to_dict | List[Dict] | Dumps the token into a list словарей, каждый словарь представляет одно из слов, лежащих в основе этого токена. |
pretty_print | str | Выведите этот токен со словами, в которые он раскрывается, в одну строку. |
Word
Объект Word
содержит синтаксическое слово и все его аннотации на уровне слова. В случае маркеров из нескольких слов (MWT) слова генерируются в результате применения MWTProcessor и используются во всех нижестоящих синтаксических анализах, таких как тегирование, лемматизация и синтаксический анализ. Если Word
является результатом расширения MWT, его текст
обычно не будет найден во входном необработанном тексте. Помимо токенов, состоящих из нескольких слов, Word
должны быть похожи на знакомые «токены», которые можно увидеть в других местах.
Word
Содержит эти свойства:
Свойство | Тип | Описание |
---|---|---|
ID | INT | |
ID | INT | |
ID | INT | |
ID | INT | |
| ||
. зарезервирован для искусственного символа, представляющего корень синтаксического дерева). | ||
текст | стр | Текст этого слова. Пример: «The». |
лемма | стр | Лемма этого слова. |
упос (поз) | стр | Универсальная часть речи этого слова. Пример: «СУЩЕСТВИТЕЛЬНОЕ». |
xpos | str | Часть речи этого слова, связанная с банком деревьев. Пример: «ННП». |
подвиги | стр | Морфологические признаки этого слова. Пример: «Пол=женщина|человек=3». |
head | int | Идентификатор синтаксического заголовка этого слова в предложении, основанный на 1 для фактических слов в предложении (0 зарезервирован для искусственного символа, представляющего корень синтаксического дерева ). |
deprel | str | Отношение зависимости между этим словом и его синтаксическим заголовком. Пример: «нмод». |
deps | str | Комбинация head и deprel, которая собирает всю информацию о синтаксических зависимостях. Видно в файлах CoNLL-U, выпущенных из универсальных зависимостей, не предсказанных нашим конвейером . |
разное | стр | Разные аннотации к этому слову. Конвейер использует это поле, например, для внутреннего хранения информации о смещении символов. |
родитель | Токен | «Обратный указатель» на родительский токен, частью которого является это слово. В случае токена, состоящего из нескольких слов, токен может быть родителем нескольких слов. |
Слова
также содержит следующие методы:
Метод | Возврат тип | . Информация. |
---|---|---|
pretty_print | str | Выводит слово в одну строку со всей его информацией. |
Span
Объект Span
хранит атрибуты непрерывного фрагмента текста. Диапазон объектов (например, именованные сущности) может быть представлен как Span
.
Пролет
содержит следующие свойства:
Свойство | Тип | Описание |
---|---|---|
doc | Document | «Обратный указатель» на родительский документ этого диапазона. |
текст | стр | Текст этого промежутка. |
токены | List[Token] | Список токенов, соответствующих этому диапазону. |
слова | List[Word] | Список слов, соответствующих этому диапазону. |
type | str | Тип объекта этого диапазона. Пример: «ЧЕЛОВЕК». |
start_char | int | Смещение начального символа этого диапазона в документе. |
end_char | int | Смещение конечного символа этого диапазона в документе. |
Span
также содержит следующие методы:
Метод | Тип возвращаемого значения | Описание |
---|---|---|
to_dict | Dict | Сбрасывает словарь, содержащий всю информацию о диапазоне. |
pretty_print | str | Печатает диапазон в одну строку со всей его информацией. |
ParseTree
Объект ParseTree
представляет собой вложенную древовидную структуру, предназначенную для представления результатов анализатора групп. Каждый слой вложенности имеет следующие свойства:
Свойство | Тип | Описание |
---|---|---|
метка | str | 3 Метка 90 представляет внутренний узел скобки типа. Претерминалы имеют тег POS в качестве метки. Листья имеют текст слова в качестве метки. |
дочерние элементы | List[ParseTree] | Дочерние элементы этой скобки. Претерминалы имеют одного потомка и представляют тег и слово. Листья представляют собой просто слово и не имеют потомков. |
Добавление новых свойств к объектам данных Stanza
Новое в версии 1.1
Все объекты данных Stanza могут быть легко расширены, если вам нужно добавить к ним новые интересующие аннотации, либо с помощью нового процессора
вы разработки или из написанного вами пользовательского кода.
Чтобы добавить новую аннотацию или свойство к объекту Stanza, скажем, Document
, просто вызовите
Document.add_property('char_count', default=0, getter=lambda self: len(self.text), setter= Никто)
И тогда вы сможете получить доступ к свойству char_count
из всех экземпляров класса Document
. Интерфейс здесь должен быть знаком, если вы использовали свойства класса в Python или другом объектно-ориентированном языке — первый и единственный обязательный аргумент — это имя свойства, которое вы хотите создать, за которым следует по умолчанию
геттер
для чтения значения свойства и сеттер
для установки значения свойства. По умолчанию все созданные свойства доступны только для чтения, если вы явно не назначите установщик
. Базовая переменная для нового свойства называется _{property_name}
, поэтому в нашем примере выше Stanza автоматически создаст переменную класса с именем _char_count
для хранения значения этого свойства, если это необходимо. Это переменная, которую должны использовать ваши функции getter
и setter
, если это необходимо.
Как анализировать журналы с помощью шаблонов Grok в New Relic
Grok может быть единственным словом в английском языке, происходящим от марсианского. Грок был представлен в научно-фантастическом романе Роберта А. Хайнлайна 1961 года S незнакомец в чужой стране . Однако в этом посте я сосредоточусь на Grok как на отраслевом стандарте анализа сообщений журнала и на том, как он работает в New Relic.
Но сначала немного о том, как вообще работает парсинг Grok.
Чтобы извлечь максимальную пользу из телеметрии журнала на любой платформе, вам необходимо иметь возможность анализировать некоторые неструктурированные сообщения, которые часто отправляются в серверную часть ведения журнала.
Подумайте о разнице между такой записью в журнале…
{ «сообщение»: «54.3.120.2 2048 0» }
... по сравнению с таким:
{ «host_ip»: «54.3.120.2», «байт_получено»: 2048, «байт_отправлено»: 0 }
Сущность с тремя отдельными полями обеспечивает значительные преимущества в плане наблюдаемости по сравнению с фрагментом произвольного текста, и Grok делает такое уточнение относительно простым.
Вы можете искать определенные данные в своих сообщениях журнала, определив шаблон Grok: %{SYNTAX:SEMANTIC}
SYNTAX
— это имя шаблона, который будет соответствовать вашему тексту. В журнал SYNTAX
можно включить несколько очень часто используемых шаблонов, таких как NUMBER
, INT
, IP
и многие другие. Образец ЧИСЛО
может соответствовать 4,55, 4, 8 и любому другому числу; шаблон IP может соответствовать 54.3.120.2 или 174.49.99.1 и т. д. SEMANTIC
— это идентификатор, присвоенный совпавшему тексту. Если шаблон соответствует вашему тексту, в вашей записи журнала будет создано поле с идентификатором.
Таким образом, если у вас есть сообщение журнала вида "[IP-адрес] [Получено байтов] [Отправлено байтов]"
(т. е. "54.3.120.2 2048 0"
), вы можете использовать следующие шаблоны Grok для сопоставьте эту форму и извлеките три полезных поля:
"%{IP:host_ip} %{INT:bytes_received} %{INT:bytes_sent}"
После обработки ваша запись журнала будет иметь три новых поля: host_ip
, байт_получено
и байт_отправлено
. Теперь вы можете использовать эти поля в своей платформе наблюдения для фильтрации, фасетирования и выполнения статистических операций с данными журнала.
Как синтаксический анализ Grok работает в New Relic
Синтаксический анализ применяется либо на уровне пересылки, либо на серверной части конвейера журналов. New Relic использует внутренний синтаксический анализ и предоставляет встроенный синтаксический анализ для определенных указанных типов журналов, но вы также можете создавать собственные правила синтаксического анализа в нашем пользовательском интерфейсе синтаксического анализа.
И наши встроенные правила синтаксического анализа, и пользовательские правила используют шаблоны Grok, чтобы указать, как извлекать полезную информацию из произвольной текстовой строки. Синтаксический анализ позволяет нам использовать расширенные функции, такие как статистический анализ полей значений, фасетный поиск, фильтры и многое другое. Если мы не можем классифицировать и разбивать данные на отдельные поля, мы будем прибегать к громоздкому полнотекстовому поиску с подстановочными знаками и регулярными выражениями и меньшей количественной ценностью.
Встроенные шаблоны Grok в New Relic
Любой входящий журнал с полем logtype
будет проверяться по встроенному списку шаблонов, связанных с logtype
. Если возможно, к этому журналу будет применен соответствующий встроенный шаблон Grok; например:
Прочтите о встроенном парсинге New Relic в нашей документации.
Создание пользовательских шаблонов Grok в New Relic
Если у вас есть правильные разрешения, вы можете использовать Пользовательский интерфейс Manage Parsing для создания, тестирования и включения шаблонов Grok в New Relic.
Допустим, у вас есть микрослужба под названием «Служба инвентаризации». Эта служба создает определенные журналы ошибок, которые содержат полезную информацию в свободном неструктурированном тексте.
Пример :
{ "entity.name": "Управление запасами", "entity.type": "СЛУЖБА", "fb.input": "хвост", "fb.source": "нри-агент", "имя хоста": "инвентарь-хост-1", "этикетка": "инвентарь", "уровень": "ошибка","сообщение": "Ошибка инвентаризации: не хватает памяти для обработки миниатюры для продукта 7186", "plugin. source": "БЕЗ МЕТАЛЛА", "plugin.type": "беглый бит", "версия.плагина": "1.1.4", "span.id": "e2056adfcaf06c15", "отметка времени": 1598046141558, "trace.id": "3c517a62483f66ef5943143b4165c62e" }
Опять же, это полезная информация, но вы хотели бы, чтобы она была более структурированной.
Вы можете использовать произвольный текстовый запрос, чтобы найти такие журналы в пользовательском интерфейсе, но было бы трудно использовать эти запросы в NRQL без сложных и ресурсоемких регулярных выражений.
Вместо этого вы можете создать правило синтаксического анализа для извлечения необходимой информации:
Нажмите Управление синтаксическим анализом >
Создайте новое правило синтаксического анализа и выполните следующие действия:- Дайте правилу полезное имя
- например, «Синтаксический анализ ошибок InventoryService».
- Введите пару Атрибут / Значение , чтобы действовать как предварительный фильтр. Это сократит количество журналов, которые должны быть обработаны этим правилом, удалив ненужную обработку. В этом случае выберите атрибут «entity.name» и значение «Inventory Service».
- Добавьте правило разбора Grok. В этом случае:
Ошибка инвентаризации: %{DATA:error_message} для продукта %{INT:product_id}
- Нажмите Test Grok , и это покажет вам, соответствует ли правило Grok любому из журналов, поступающих в систему.
- Теперь включите правило и нажмите Сохранить правило синтаксического анализа .
Вскоре вы увидите, что журналы Inventory Service, поступающие в систему, теперь дополнены двумя новыми полями,
и product_id
.
Теперь вы можете использовать запрос для создания визуализации в проводнике данных, используя следующие поля:
Инструменты и ресурсы для разработки шаблонов Grok
Отладчик Grok — это очень удобный пользовательский интерфейс для экспериментов с шаблонами Grok. Думайте об этом как о IDE для создания готовых шаблонов Grok, которые вы можете использовать в New Relic.
Введите содержимое вашего примера журнала и шаблоны, которые вы хотите сопоставить:
Если ваш шаблон соответствует содержимому примера, вы увидите извлеченные поля:
С точки зрения синтаксиса, вот подмножество некоторых из наиболее полезных шаблонов Grok, которые вам часто могут понадобиться при работе с парсингом. правила:
Синтаксис | Образец совпадающего содержимого (без кавычек) |
---|---|
Синтаксис %{IP} | Образец совпадающего содержимого (без кавычек) «73.241.172.237» |
Синтаксис%{IPV4} | Образец совпадающего содержимого (без кавычек) «73.241.172.237» |
Синтаксис%{IPV6} | Образец совпадающего содержимого (без кавычек) «2001:0db8:85a3:0000:0000:8a2e:0370:7334» |
Синтаксис%{IPORHOST} | Образец совпадающего содержимого (без кавычек) «cache1. acme.com» |
Синтаксис%{INT} | Образец совпадающего содержимого (без кавычек) — 365 |
Синтаксис%{POSINT} | Образец совпадающего контента (без кавычек)77 |
Синтаксис%{ЧИСЛО} | Образец совпадающего содержимого (без кавычек) 44,5 |
Синтаксис %{СЛОВО} | Образец совпадающего содержимого (без кавычек)НЕКОТОРОЕ СЛОВО |
Синтаксис%{ДАННЫЕ} | Образец совпадающего содержимого (без кавычек) «НЕКОТОРЫЕ ДАННЫЕ» |
Синтаксис%{НЕПРОБЕЛ} | Образец совпадающего содержимого (без кавычек) «&XYZSOMETEXT&» |
Синтаксис%{ПРОБЕЛ} | Образец совпадающего содержимого (без кавычек)“ “ |
Синтаксис%{TIMESTAMP_ISO8601} | Образец совпадающего содержимого (без кавычек) «2020-08-19T15:59:49. |