PhraseMatcher в spaCy
При обработке неструктурированного текста нередко приходится работать с длинными списками и словарями, по которым нужно искать совпадения в тексте. Шаблоны для Matcher создаются вручную, и каждый токен нужно кодировать отдельно. Если список фраз большой, Matcher перестаёт быть оптимальным решением. В таких случаях на помощь приходит класс PhraseMatcher, позволяющий работать с объёмными словарями. В этом упражнении вы потренируетесь находить совпадения по форме для нескольких терминов с помощью класса PhraseMatcher.
Модель en_core_web_sm уже загружена и доступна как nlp. Класс PhraseMatcher импортирован. Строка text и список terms готовы к использованию.
Это упражнение является частью курса
Обработка естественного языка с помощью spaCy
Инструкции к упражнению
- Инициализируйте класс
PhraseMatcherс аргументомattr, чтобы сопоставлять совпадения по форме заданныхterms. - Создайте
patternsдля добавления в объектPhraseMatcher. - Найдите совпадения с заданными шаблонами и выведите индексы начального и конечного токенов, а также соответствующий фрагмент
text.
Интерактивное практическое упражнение
Попробуйте выполнить это упражнение, дополнив этот пример кода.
text = "There are only a few acceptable IP addresse: (1) 127.100.0.1, (2) 123.4.1.0."
terms = ["110.0.0.0", "101.243.0.0"]
# Initialize a PhraseMatcher class to match to shapes of given terms
matcher = ____(nlp.____, attr = ____)
# Create patterns to add to the PhraseMatcher object
patterns = [nlp.make_doc(____) for term in terms]
matcher.____("IPAddresses", patterns)
# Find matches to the given patterns and print start and end characters and matches texts
doc = ____
matches = ____
for match_id, start, end in matches:
print("Start token: ", ____, " | End token: ", ____, "| Matched text: ", doc[____:____].text)