spaCy Matcher và PhraseMatcher

Xử lý ngôn ngữ tự nhiên với spaCy

Azadeh Mobasher

Principal Data Scientist

Matcher trong spaCy

 

  • Mẫu RegEx có thể phức tạp, khó đọc và khó gỡ lỗi.
  • spaCy cung cấp lựa chọn dễ đọc, cấp sản xuất: lớp Matcher.

 

import spacy
from spacy.matcher import Matcher

nlp = spacy.load("en_core_web_sm") doc = nlp("Good morning, this is our first day on campus.")
matcher = Matcher(nlp.vocab)
Xử lý ngôn ngữ tự nhiên với spaCy

Matcher trong spaCy

 

  • Kết quả khớp gồm chỉ số token startend của mẫu khớp.
pattern = [{"LOWER": "good"}, {"LOWER": "morning"}]

matcher.add("morning_greeting", [pattern])
matches = matcher(doc) for match_id, start, end in matches: print("Start token: ", start, " | End token: ", end, "| Matched text: ", doc[start:end].text)
>>> Start token:  0  | End token:  2 | Matched text:  Good morning
Xử lý ngôn ngữ tự nhiên với spaCy

Cú pháp mở rộng của Matcher

 

  • Hỗ trợ toán tử khi định nghĩa mẫu khớp.
  • Tương tự toán tử in, not in của Python và toán tử so sánh

 

Thuộc tính Kiểu giá trị Mô tả
IN mọi kiểu Giá trị thuộc một danh sách
NOT_IN mọi kiểu Giá trị không thuộc danh sách
==, >=, <=, >, < int, float So sánh bằng/khác, lớn/nhỏ hơn
Xử lý ngôn ngữ tự nhiên với spaCy

Cú pháp mở rộng của Matcher

  • Dùng toán tử IN để khớp cả good morninggood evening
doc = nlp("Good morning and good evening.")
matcher = Matcher(nlp.vocab)
pattern = [{"LOWER": "good"}, {"LOWER": {"IN": ["morning", "evening"]}}]
matcher.add("morning_greeting", [pattern])
matches = matcher(doc)
  • Kết quả khi dùng toán tử IN
for match_id, start, end in matches:
    print("Start token: ", start, " | End token: ", end,
          "| Matched text: ", doc[start:end].text)
>>> Start token:  0  | End token:  2 | Matched text:  Good morning
Start token:  3  | End token:  5 | Matched text:  good evening
Xử lý ngôn ngữ tự nhiên với spaCy

PhraseMatcher trong spaCy

 

  • Lớp PhraseMatcher khớp một danh sách dài các cụm từ trong văn bản.

 

from spacy.matcher import PhraseMatcher
nlp = spacy.load("en_core_web_sm")
matcher = PhraseMatcher(nlp.vocab)
terms = ["Bill Gates", "John Smith"]
Xử lý ngôn ngữ tự nhiên với spaCy

PhraseMatcher trong spaCy

  • Đầu ra của PhraseMatcher gồm chỉ số token startend của mẫu khớp
patterns = [nlp.make_doc(term) for term in terms]
matcher.add("PeopleOfInterest", patterns)

doc = nlp("Bill Gates met John Smith for an important discussion regarding importance of AI.")
matches = matcher(doc) for match_id, start, end in matches: print("Start token: ", start, " | End token: ", end, "| Matched text: ", doc[start:end].text)
>>> Start token:  0  | End token:  2 | Matched text:  Bill Gates
Start token:  3  | End token:  5 | Matched text:  John Smith
Xử lý ngôn ngữ tự nhiên với spaCy

PhraseMatcher trong spaCy

  • Có thể dùng đối số attr của lớp PhraseMatcher
matcher = PhraseMatcher(nlp.vocab, attr = "LOWER")

terms = ["Government", "Investment"] patterns = [nlp.make_doc(term) for term in terms] matcher.add("InvestmentTerms", patterns) doc = nlp("It was interesting to the investment division of the government.")
matcher = PhraseMatcher(nlp.vocab, attr = "SHAPE")

terms = ["110.0.0.0", "101.243.0.0"] patterns = [nlp.make_doc(term) for term in terms] matcher.add("IPAddresses", patterns) doc = nlp("The tracked IP address was 234.135.0.0.")
Xử lý ngôn ngữ tự nhiên với spaCy

Ayo berlatih!

Xử lý ngôn ngữ tự nhiên với spaCy

Preparing Video For Download...