Trong bài trước chúng ta đã cùng tìm hiểu về mô hình hoạt động của CoreNLP cũng như chức năng của các Annotators. Trong bài này chúng ta sẽ viết một chương trình để chạy thử 6 Annotators là tokenize, ssplit, pos, lemma, ner và parse.

Trước hết các bạn tạo một Java Class với tên PipeLine1 trong project đã tạo ở bài trước. Trong hàm main của class này, ta tạo một String với tên ‘text’ làm dữ liệu đầu vào cần phải xử lý:

Tiếp theo ta xây dựng một AnnotationPipeline bằng việc định nghĩa thuộc tính của pipeline này với 6 annotators như sau (Lưu ý khi bạn muốn sử dụng một Annotator, bạn cần phải kiểm tra xem Annotator đó yêu cầu các Annotator Dependencies nào để thêm các Annotator Dependencies vào pipeline) :

Tiếp theo ta tạo một Annotation object rồi chạy AnnotationPipeline đã định nghĩa ở trên:

Để lấy các thông tin về token, PoS, lemma, NERparse tree, ta sẽ sử dụng hàm .get(Class). Ví dụ như để truy suất token ta sử dụng: get(CoreAnnotations.TokensAnnotation.class) hoặc tách câu trong đoạn văn bản thì ta sử dụng get(CoreAnnotations.SentencesAnnotation.class) (Các bạn tham khảo tên các Class tại đây ). Đoạn code sau thể hiện chi tiết việc tách câu và tách token:

Chạy đoạn code trên ta được kết quả:

Đối với việc tìm ParseTree cho từng câu thì ta sẽ sử dụng .get(TreeCoreAnnotations.TreeAnnotation.class). Còn việc sử dụng hàm .get() để lấy PoS, lemma, NER chỉ có thể thực hiện trên từng token, do đó ta cần sử dụng vòng loop để tiến hành xác định thông tin của từng token trong câu. Quá trình này được thực hiện bằng đoạn code sau:

Đoạn code trên cho ta kết quả

Như vậy ta đã hoàn thành việc chạy một chương trình CoreNLP sử dụng 6 Annotators là tokenize, ssplit, pos, lemma, ner và parse. Các bạn có thể tham khảo full code của chương trình dưới đây.

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