Biểu thức chính quy JAPE

Một phần của tài liệu tìm hiểu gate và ứng dụng vào phân tích cú pháp câu tiếng việt (Trang 29 - 40)

5 CÁC CÔNG CỤ XỬ LÝ NGÔN NGỮ CỦA GATE

5.2 Biểu thức chính quy JAPE

JAPE là một động cơ xử lý các mẫu chú thích trên nền Java. JAPE cung cấp sự biến đổi trạng thái hữu hạn trên các chú thích dựa vào các biểu thức chính quy. JAPE là một phiên bản của CPSL – Common Pattern Specification Language: Ngôn ngữ Mô tả Mẫu Thông dụng.

JAPE cho phép ta nhận dạng các biểu thức thông dụng trong các chú thích trên tài liệu. Tuy nhiên, các biểu thức thông dụng được áp dụng cho các chuỗi, một dãy tuyến tính đơn giản chứa các mục, trong khi mô hình các chú thích của GATE lại dựa trên đồ thị. Kết quả của việc này là trong một sốtrường hợp, quy trình so khớp là không thể xác định (ví dụ: kết quả dựa trên một nhân tố ngẫu

GVHD: TS. Nguyễn Tuấn Đăng Trang 24 nhiên như địa chỉ mà dữ liệu được lưu trữ trong máy ảo): khi có một cấu trúc

trong đồ thịđược so khớp, nó đòi hỏi nhiều hơn sức mạnh của một bộ nhận dạng tựđộng thông thường.

Một ngữ pháp JAPE bao gồm một tập các vế, mỗi vế bao gồm một tập các quy luật mẫu hoặc hành động. Các vế vận hành tuần tự và thiết lập một lớp những sự di truyền trạng thái hữu hạn. Vế trái (LHS) của các quy luật bao gồm một mô tả mẫu chú thích. Vế phải (RHS) bao gồm các lệnh thao tác chú thích. Các chú thích khớp với vế trái của một luật có thểđược tham chiếu đến vế phải bởi ý nghĩa của các nhãn được gắn vào các yếu tố mẫu.

5.2.1 Mô tả hình thức của JAPE

JAPE tương tự như CPSL (a Common Pattern Specification Language – Ngôn ngữ Chỉ định Mẫu Thông dụng, được phát triển trong chương trình TISPTER bởi Doug Appelt và những người khác) với một vài ngoại lệ.

Sau đây là một ví dụ luật vế trái:

Rule: KiloAmount

( ({Token.kind == "containsDigitAndComma"}):number {Token.string == "kilograms"} ):whole

Một chỉđịnh ràng buộc cơ bản xuất hiện giữa hai dấu ngoặc nhọn và cung cấp một sự kết hợp giữa ký hiệu chú thích/ thuộc tính/ giá trị. Các ký hiệu này phải thoả tại một điểm xác định trong đồ thị chú thích. Một chỉ định ràng buộc phức hợp xuất hiện trong dấu ngoặc đơn và có thể gắn với một nhãn bằng toán tử ‘:’; nhãn đó sẽ có hiệu lực trong vế phải để truy cập đến

các chú thích được khớp bởi ràng buộc phức hợp. Các ràng buộc phức hợp cũng có thể được áp dụng các toán tử Kleene (*, +, ?). Một dãy các ràng buộc thể hiện một kết hợp tuần tự; sự phân chia được thể hiện bởi các ràng buộc được phân cách bởi ‘|’.

Được chuyển hoá thành định dạng được chấp nhận bởi bộ sinh phân tích

JavaCC LL, phân đoạn quan trọng nhất của ngữ pháp CPSL (được mô tả

bởi Appelt, dựa trên một hướng dẫn gốc từ nhóm làm việc TISPER điều hành bởi Boyan Onyshkevych) trở thành như sau:

constraintGroup -->

(patternElement)+ ("|" (patternElement)+ )*

patternElement -->

"{" constraint ("," constraint)* "}"

GVHD: TS. Nguyễn Tuấn Đăng Trang 25

Tại đây, dòng đầu tiên của patternElement là ràng buộc cơ bản, dòng thứ

hai là ràng buộc phức hợp.

Một ví dụ của luật hoàn chỉnh:

Rule: NumbersAndUnit

( ( {Token.kind == "number"} )+:numbers {Token.kind == "unit"} ) -->

:numbers.Name = { rule = "NumbersAndUnit" }

Luật này nói rằng ‘so khớp các dãy số theo sau bởi một đơn vị, tạo một chú thích Name trên các số với thuộc tính luật mang giá trị

NumbersAndUnit’.

Bảng sau cung cấp một mô tả BNF (Backus-Naur Format) của ngữ

pháp JAPE: MultiPhaseTransducer ::= ( <multiphase> <ident> )? ( ( ( JavaImportBlock ) ( ( ControllerStartedBlock ) | ( ControllerFinishedBlock ) | ( ControllerAbortedBlock ) )* ( SinglePhaseTransducer )+ ) | ( <phases> ( <path> )+ ) ) <EOF> SinglePhaseTransducer ::= <phase> <ident> ( ( <input> ( <ident> )* ) |

( <option> ( <ident> <assign> ( <ident> | <bool> ) )* ) )* ( ( Rule ) | MacroDef | TemplateDef )*

JavaImportBlock ::= ( <javaimport> <leftBrace> ConsumeBlock )?

ControllerStartedBlock ::= ( <controllerstarted> <leftBrace> ConsumeBlock )

ControllerFinishedBlock ::= ( <controllerfinished> <leftBrace> ConsumeBlock )

ControllerAbortedBlock ::= ( <controlleraborted> <leftBrace> ConsumeBlock )

Rule ::=

<rule> <ident>

( <priority> <integer> )?

LeftHandSide "-->" RightHandSide

MacroDef ::= <macro> <ident> ( PatternElement | Action )

TemplateDef ::= <template> <ident> <assign> AttrVal

LeftHandSide ::= ConstraintGroup

ConstraintGroup ::= ( PatternElement )+ ( <bar> ( PatternElement )+ )*

GVHD: TS. Nguyễn Tuấn Đăng Trang 26

PatternElement ::= ( <ident> | BasicPatternElement | ComplexPatternElement )

BasicPatternElement ::=

( ( <leftBrace> Constraint ( <comma> Constraint )* <rightBrace> ) | ( <string> ) )

ComplexPatternElement ::=

<leftBracket> ConstraintGroup <rightBracket> ( KleeneOperator )?

( <colon> ( <ident> | <integer> ) )?

KleeneOperator ::= ( <kleeneOp> ) |

( <leftSquare> ( <integer> ( <comma> <integer> )? ) <rightSquare> )

Constraint ::=

( <pling> )? <ident>

( ( FeatureAccessor <attrOp> AttrVal )

| ( <metaPropOp> <ident> <attrOp> AttrVal )

| ( <ident> ( ( <leftBrace> Constraint <rightBrace> ) | ( Constraint ) ) )

)?

FeatureAccessor ::= ( <period> <ident> )

AttrVal ::= ( ( <string> | <ident> | <integer> | <floatingPoint> | <bool> ) )

| ( TemplateCall )

TemplateCall ::= <leftSquare> <ident>

( <ident> <assign> AttrVal ( <comma> )? )* <rightSquare>

RightHandSide ::= Action ( <comma> Action )*

Action ::= ( NamedJavaBlock | AnonymousJavaBlock | AssignmentExpression | <ident> )

NamedJavaBlock ::= <colon> <ident> <leftBrace> ConsumeBlock

AnonymousJavaBlock ::= <leftBrace> ConsumeBlock

AssignmentExpression ::=

( <colon> | <colonplus> ) <ident> <period> <ident> <assign> <leftBrace>

( <ident> <assign> ( AttrVal | ( <colon> <ident>

( ( <period> <ident> ( <period> | <metaPropOp> ) <ident> ) | ( <metaPropOp> <ident> ) ) ) ) ( <comma> )? )* <rightBrace>

GVHD: TS. Nguyễn Tuấn Đăng Trang 27

ConsumeBlock ::= java code

Bảng 4: BNF của ngữ pháp JAPE

5.3 Chú thích phụ thuộc ngữ cảnh ANNIC

ANNIC (ANNotations-In-Context, chú thích phụ thuộc ngữ cảnh) là hệ

thống đánh chỉ mục và tìm kiếm chú thích đầy đủ tính năng. ANNIC được cung cấp như một mở rộng của Kho Dữ liệu Thứ tự, được gọi là Kho Dữ liệu Thứ tự

Có khảnăng Tìm kiếm (SDD, Searchable Serial Data-store).

ANNIC có thểđánh chỉ mục các tài liệu thuộc bất kỳđịnh đạng nào được hỗ

trợ bởi hệ thống GATE (ví dụnhư XML, HTML, RTF, e-mail, text, …). So với những hệ thống truy vấn khác, ANNIC còn có thêm những tính năng xác định những vấn đề như đánh chỉ mục mở rộng của thông tin ngôn ngữ gắn với nội dung tài liệu, sựđộc lập của định dạng tài liệu. Hệ thống cũng cho phép đánh chỉ

mục và chiết xuất thông tin từ những chú thích và yếu tố chồng lấn. Giao diện

đồ hoạ tiên tiến của nó cung cấp một khung nhìn đồ hoạ cho những dấu chú

thích trên văn bản, cùng với khả năng xây dựng những truy vấn mới một cách

tương tác. Hơn nữa, ANNIC còn có thể được sử dụng như bước đầu của việc phát triển luật cho các hệ thống xử lý ngôn ngữ tự nhiên vì nó cho phép tìm kiếm và kiểm thử các mẫu trong tập tài liệu.

GVHD: TS. Nguyễn Tuấn Đăng Trang 28

Hình 9: Khung nhìn Kho dữ liệu Thứ tự Có khảnăng tìm kiếm

ANNIC được xây dựng trên nền của Apache Lucene [10] – một động cơ tìm kiếm đầy đủtính năng hiệu suất cao bằng Java, hỗ trợđánh chỉ mục và tìm kiếm trên các tập hợp tài liệu kích thước lớn. Động cơ IR này được lựa chọn vì khả năng tuỳ biến của Lucene.

Như đã giải thích ở trên, SDD là mở rộng của kho dữ liệu thứ tự. Bên cạnh vị trí cố định, SDD yêu cầu người sử dụng cung cấp thêm thông tin dùng cho việc đánh chỉ mục các tài liệu. Một khi SDD được khởi tạo, người dùng có thể

thêm/ bớt tài liệu/ tập tài liệu vào SDD theo cùng cách với các kho dữ liệu khác. Khi các tài liệu được thêm vào SDD, hệ thống này cố gắng đánh chỉ mục chúng một cách tựđộng. Nó cập nhật chỉ mục mỗi khi có một thay đổi trong bất kỳ tài liệu nào lưu trữ trong SDD và loại bỏ các tài liệu ra khỏi chỉ mục nếu nó bị xoá khỏi SDD. Chú ý rằng chỉ có các tập chú thích, các kiểu và yếu tố được cung cấp từđầu trong thời gian SDD khởi tạo mới được cập nhật khi thêm/ bớt các tài liệu vào cở sở dữ liệu.

GVHD: TS. Nguyễn Tuấn Đăng Trang 29

5.3.1 Khởi tạo SDD

Đoạn mã sau minh hoạ việc khởi tạo SDD bằng ngôn ngữ GATE Embbed: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45

// create an instance of datastore

LuceneDataStoreImpl ds = (LuceneDataStoreImpl)

Factory.createDataStore("gate.persist.LuceneDataStoreImpl", dsLocation);

// we need to set Indexer

Indexer indexer = new LuceneIndexer(new URL(indexLocation));

// set the parameters

Map parameters = new HashMap();

// specify the index url

parameters.put(Constants.INDEX_LOCATION_URL, new URL(indexLocation));

// specify the base token type

// and specify that the tokens should be created automatically // if not found in the document

parameters.put(Constants.BASE_TOKEN_ANNOTATION_TYPE, "Token"); parameters.put(Constants.CREATE_TOKENS_AUTOMATICALLY,

new Boolean(true));

// specify the index unit type

parameters.put(Constants.INDEX_UNIT_ANNOTATION_TYPE, "Sentence");

// specifying the annotation sets ”Key” and ”Default Annotation Set” // to be indexed

List<String> setsToInclude = new ArrayList<String>(); setsToInclude.add("Key"); setsToInclude.add("<null>"); parameters.put(Constants.ANNOTATION_SETS_NAMES_TO_INCLUDE, setsToInclude); parameters.put(Constants.ANNOTATION_SETS_NAMES_TO_EXCLUDE, new ArrayList<String>());

// all features should be indexed

parameters.put(Constants.FEATURES_TO_INCLUDE, new ArrayList<String>()); parameters.put(Constants.FEATURES_TO_EXCLUDE, new ArrayList<String>());

// set the indexer

ds.setIndexer(indexer, parameters);

// set the searcher

ds.setSearcher(new LuceneSearcher());

Bảng 5: Đoạn mã khởi tạo SDD

5.3.2 Tìm kiếm trong kho dữ liệu

Đoạn mã sau minh hoạ việc tìm kiếm trong kho dữ liệu bằng ngôn ngữ

GATE Embbed:

1 2

GVHD: TS. Nguyễn Tuấn Đăng Trang 30 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29

Searcher searcher = ds.getSearcher(); Map parameters = new HashMap();

// obtain the url of index

String indexLocation =

new File(((URL) ds.getIndexer().getParameters()

.get(Constants.INDEX_LOCATION_URL)).getFile()).getAbsolutePath(); ArrayList indexLocations = new ArrayList();

indexLocations.add(indexLocation);

// corpus2SearchIn = mention corpus name that was indexed here.

// the annotation set to search in

String annotationSet2SearchIn = "Key";

// set the parameter

parameters.put(Constants.INDEX_LOCATIONS,indexLocations); parameters.put(Constants.CORPUS_ID, corpus2SearchIn); parameters.put(Constants.ANNOTATION_SET_ID, annotationSet); parameters.put(Constants.CONTEXT_WINDOW, contextWindow); parameters.put(Constants.NO_OF_PATTERNS, noOfPatterns); // search

String query = "{Person}";

Hit[] hits = searcher.search(query, parameters);

Bảng 6: Đoạn mã tìm kiếm trong kho dữ liệu

5.4 Các bộ phân tích

5.4.1 Bộ phân tích MiniPar

MiniPar là một bộ phân tích bề mặt. Trong phiên bản chuyển giao của parser này, nó nhận một câu làm dữ liệu đầu vào và xác định những quan hệ giữa các từ trong câu. MiniPar phân tích câu và rút ra những thông tin

như:

 Bổđề (lemma) cho từ

 Từ loại của từ.

 Phần đầu (head) được hiệu chỉnh bởi từ này.

 Tên của quan hệ phụ thuộc giữa từ này và phần đầu.  Bổđề cho phần đầu.

Trong phiên bản của MiniPar được tích hợp vào GATE (plugin ‘Parser_Minipar’), nó tạo ra các chú thích thuộc kiểu ‘DepTreeNode’ và các chú thích của kiểu ‘[relation]’ tồn tại giữa phần đầu và nút con. Tài liệu được yêu cầu phải có chú thích thuộc kiểu ‘Sentence’, trong đó mỗi chú thích bao gồm một chuỗi của câu.

GVHD: TS. Nguyễn Tuấn Đăng Trang 31

Minipar lấy một câu tại một thời điểm làm dữ liệu đầu vào và xuất ra các dấu hiệu (token) thuộc kiểu ‘DepTreeNode’. Sau đó, nó gán liên hệ giữa các dấu hiệu này. Mỗi DepTreeNode bao gồm yếu tố gọi là ‘từ’: đây là văn bản thực sự của từ.

Với mỗi và mọi chú thích thuộc kiểu ‘[Rel]’, trong đó ‘Rel’ là obj,

pred…, đó là tên của quan hệ phụ thuộc giữa từ con và từ chính. Mỗi chú

thích ‘[Rel]’ được gán bốn đặc điểm:

 child_word: đây là văn bản của chú thích con.

 child_id: Các định danh của các chú thích tác động lên từ hiện tại (nếu có).

 head_word: đây là văn bản của chú thích phần đầu.

 head_id: định danh của chú thích tác động lên từ con (nếu có).

Hình 10: Một văn bản được chú thích bởi MiniPar

5.4.2 Bộ phân tích RASP

RASP (Robust Accurate Statistical Parsing – Bộ phân tích dựa trên thống kê Chính xác cao) là một hệ thống phân tích mạnh mẽ cho tiếng Anh,

GVHD: TS. Nguyễn Tuấn Đăng Trang 32 được phát triển bởi nhóm Ngôn ngữ Tự nhiên và Ngôn ngữ học Máy tính của trường Đại học Sussex.

Plugin ‘Parser_RASP’ này được phát triển bởi DigitalPebble, cung cấp bốn PR bao bọc gọi RASP module như các ứng dụng ngoài, cũng như một thành phần JAPE làm nhiệm vụ dịch kết xuất cho ANNIE POS Tagger.

RASP2 Tokenizer: PR này đòi hỏi chú thích Sentence và tạo ra chú thích Token với một yếu tố string. Lưu ý rằng việc phân tách câu phải được tiến hành trước khi dấu hiệu hoá; bộ phân tách câu RegEx thích hợp cho việc này. (Ngoài ra, còn có thể dùng ANNIE Tokenizer rồi tiếp đến là bộ phân tách câu ANNIE; đầu ra của chúng tương thích với những PR khác trong plugin này).

RASP POS Tagger: PR này đòi hỏi chú thích Token và tạo ra chú thích WordForm với các yếu tốpos, probabilitystring.

RASP2 Morphological Analyser: PR này đòi hỏi chú thích

WordForm (từ POS Tagger) và thêm vào các yếu tốlemasuffix.  RASP2 Parser: PR này đòi hỏi các kiểu chú thích ở trên và tạo ra

nhiều chú thích Dependency để biểu diễn một phân tích ứng với mỗi câu.

RASP POS Converter: PR này đòi hỏi chú thích Token với yếu tố category được sinh ra bởi ANNIE POS Tagger và tạo ra chú thích

WordForm theo định dạng RASP. ANNIE POS Tagger và bộ

chuyển đổi này có thể được dùng chung như một thay thế cho RASP2 POS Tagger.

5.4.3 Bộ phân tích SUPPLE

SUPPLE là một bộ phân tích từdưới lên. SUPPLE xây dựng cây cú pháp và hình thức logic cho các câu tiếng Anh. Bộ phân tích này hoàn chỉnh theo nghĩa mọi phân tích được theo đúng ngữpháp đều được tạo ra. Trong phiên bản hiện tại, chỉ có phân tích ‘tốt nhất’ được chọn cuối mỗi quá trình phân tích. Ngữ pháp tiếng Anh được cài đặt đưới dạng một ngữ pháp phi ngữ cảnh giá trị thuộc tính, bao gồm ngữ pháp phụ cho danh ngữ (NP), động ngữ (VP), giới ngữ (PP), quan hệ ngữ (R) và câu (S). Ngữ

nghĩa được gắn với mỗi quy tắc ngữ pháp cho phép bộ phân tích sinh ra các hình thức logic hợp thành bởi các vị từđơn để biểu thị các thực thể và sự kiện (ví dụ: chase(e1), run(e2)) và các vị từ hai ngôi cho thuộc tính (ví dụ: lsubj(e1, e2)). Các hằng (ví dụ: e1, e2) được sử dụng để diễn đạt định

GVHD: TS. Nguyễn Tuấn Đăng Trang 33

danh thực thể và sự kiện. Vỏ bọc của GATE SUPPLER chứa thông tin cú

pháp được sinh bởi bộ phân tích trong tài liệu GATE dưới dạng các chú thích parse chứa một diễn đạt của phân tích trong dấu ngoặc vuông; và chú thích semantics chứa các hình thức logic được sinh bởi bộ phân tích. Nó cũng sinh ra các chú thích SyntaxTreeNode cho phép xem cây phân tích của một câu.

5.4.4 Bộ phân tích Standford

Bộ phân tích Standford là một hệ thống phân tích được cài đặt bằng Java bởi nhóm Xử lý Ngôn ngữ Tự nhiên của trường Đại học Standford. Các tập tin dữ liệu đang được cung cấp từ Standford cho việc phân tích tiếng A-rập, tiếng Trung Quốc, tiếng Anh và tiếng Đức.

Plugin ‘Parser_Standford’ này được phát triển bởi đội ngũ GATE và cung cấp một PR (gate.stanford.Parser) hoạt động như một vỏ bọc xung quanh bộ phân tích Standford và diễn dịch các chú thích GATE thành và từ

những cấu trúc dữ liệu của chính bộ phân tích. Plugin này được cung cấp với một tập tin jar không thểthay đổi và một tập tin dữ liệu nhận được từ

Standford. Bản thân phần mềm của Standford hướng tới bản quyền GPL hoàn toàn.

Bản thân bộ phân tích có thể được huấn luyện trên các tập văn bản và ngôn ngữ khác, như được ghi trên website, nhưng plugin này không cung

cấp đúng nghĩa như vậy. Các tập tin dữ liệu đã huấn luyện không tương

thích một cách cần thiết giữa các phiên bản khác nhau của bộ phân tích.

Không thể tạo ra nhiều đối tượng của PR này trên cùng một JVM – ngay cả với cùng tập tin mô hình ngôn ngữ. Đặc biệt, PR này không an toàn khi

dùng trong môi trường đa luồng.

6 PHÂN TÍCH CÚ PHÁP CÂU TIẾNG VIỆT

GATE hiện tại không hỗ trợ tiếng Việt. Tuy nhiên, ta có thể mở rộng công cụ này cho riêng tiếng Việt. Công việc này cần tiến hành qua hai bước cơ bản:

6.1 Xây dựng bộ phân tích cú pháp tiếng Việt

Có hai hướng để tạo ra bộ phân tích cú pháp cho tiếng Việt, đó là tận dụng một plugin phân tích cú pháp sẵn có hoặc xây dựng mới dựa trên JAPE.

GVHD: TS. Nguyễn Tuấn Đăng Trang 34

Một phần của tài liệu tìm hiểu gate và ứng dụng vào phân tích cú pháp câu tiếng việt (Trang 29 - 40)

Tải bản đầy đủ (PDF)

(41 trang)