Trong hai bài trước (Part1, Part2), chúng ta đã thực hành viết chương trình để chạy các Annotator cơ bản của CoreNLP bằng cách sử dụng Annotation class và hàm .get(Class). Trong bài này chúng ta sẽ cùng tìm hiểu cách sử dụng CoreDocument class – một wrapper class mới được phát triển từ phiên bản CoreNLP 3.9.0. CoreDocument có cách sử dụng đơn giản hơn để giúp người dùng có thể dễ dàng làm việc với các Annotator thông qua class này. Chúng ta sẽ viết lại chương trình ở Part1Part2 sử dụng CoreDocument như sau.

Trước hết, việc xây dựng một PipeLine và định nghĩa các thuộc tính của Pipeline sẽ tương tư như hai bài trước. Điểm khác biệt duy nhất là thay vì định nghĩa ‘Annotation document’, ta định nghĩa ‘CoreDocument document’.

Việc tìm pos, lemma, ner và parse được thực hiện như sau:

Như vậy, thay vì phải sử dụng hàm .get(Class) và nhập tên đầy đủ của Class, ta chỉ cần sử dụng trực tiếp các hàm của CoreDocument và CoreSentence. Chúng ta cũng không cần phải xác định PoS tag và NER tag của từng token trong câu mà có thể sử dụng trực tiếp hàm sentence.posTags() và sentence.nerTags() để trích xuất PoS tag và NER tag của cả câu đó. Kết quả trả về khi sử dụng CoreDocument cũng giống với kết quả khi sử dụng Annotation Class

Tương tự, ta viết lại chương trình ở Part2 như sau:

Trong trường hợp này, kết quả trả về cũng giống với kết quả khi sử dụng Annotation Class ngoại trừ việc tìm mối liên hệ trong câu đầu tiên của đoạn dữ liệu. Ở đây CoreDocument không tìm thấy mối liên hệ nào trong khi Annotation Class trả về hai kết quả (chi tiết tại Part2). Tuy nhiên nếu ta sử dụng CoreDocument kết hợp với Knowledge Base Population (thêm ‘kbp’ vào AnnotationPipeline) thì sẽ tìm được mối quan hệ giữa Bob và Google (Bob là nhân viên của Google).

Như vậy, ta đã hoàn thành việc viết lại chương trình ở Part1Part2 sử dụng CoreDocument. Các bạn có thể tham khảo full code của chương trình bên dưới

Tháng Mười Một 28, 2018
ITechSeeker