5.1.1 Ứng dụng web phía Client
Ứng dụng web phía client được hiện thực dưới dạng JSP. Người dùng cung cấp đầu vào, gửi yêu cầu cho server và nhận trả lời từ server. Người dùng cĩ thể sử dụng 1 trong 3 dịch vụ:
− Câu truy vấn ngơn ngữ tự nhiên.
− Tìm kiếm mở rộng.
− Lựa chọn thực thể thỏa truy vấn để tìm tài liệu. Ứng dụng client sử dụng các dịch vụ chính sau:
Kiểu trả về
Tên dịch vụ Đặc tả
String parse(String query)
Web service operation
Trả về đồ thị ý niệm từ câu truy vấn tiếng Việt
String lucene(String query)
Web service operation
Trả về các thực thể thỏa truy vấn
String getDocuments(String query)
Web service operation
Trả về các tài liệu thỏa truy vấn dựa trên API query của Semantic Lucene
5.1.2 Hệ thống xử lý trên server
Khối nhận diện thực thể và từ quan hệ:
Lớp ENSearch
Kiểu trả về Tên phương thức Đặc tả
String GetAnnotation (String query, QueryBuffer output)
Kết nối vào KIM để nhận diện thực thể cĩ tên trong câu query, chèn vào bộ đệm output.
Dùng Gate để nhận diện thực thể khơng tên và từ quan hệ, tính từ, liện từ luận lý cĩ trong câu query, chèn vào bộ đệm output
String getNS (String classname)
Trả về namespace của lớp truyền vào dưới dạng chuỗi
String runSeRQL (String
query) Kết nối vào KB của KIM, thực thi câu lệnh SeRQL để tìm các thực thể thỏa mãn truy vấn
Khối phân tách câu truy vấn nguyên tử:
Lớp QuerytoCG
Kiểu trả về
Tên phương thức Đặc tả
void splitQueryToAtomicQuery(String fullQuery, List<ItemType> query, List<AtomicQuery> result, RelationType defaultRel)
Tách câu truy vấn cĩ AND, OR, NOT (đã được nhận diện thành phần) thành danh sách các câu truy vấn nguyên tử. Danh sách này là tham số “result”
Khối xác định quan hệ đỉnh:
Kiểu trả về Tên phương thức Đặc tả
TopRelationType identifyTopRel(QueryBuffer
buf) Nhận diện quan hê đỉnh là “COUNT”, “MAX”, “MIN”, “MOST”, hayt “AVERAGE”
Khối hiệu chỉnh tập thực thể và từ quan hệ:
Lớp ProcessingXML
Kiểu trả về Tên phương thức Đặc tả
void FindClassofAgent(QueryBuffer buffer) Xác định lớp của “What”
void CombineEntitys(QueryBuffer buffer) Gom các thực thể cùng ngữ nghĩa
void AddRealtion(QueryBuffer buffer) Thêm từ quan hệ giữa các thực thể
Khối xác định quan hệ ngữ nghĩa giữa thực thể và từ quan hệ:
Lớp ProcessingQuery
Kiểu trả về Tên phương thức Đặc tả
QueryTriple ProcessQuery2Triple(QueryBuf fer buffer)
Sử dụng các thực thể cĩ tên, khơng tên, từ quan hệ đã nhận biết được để sinh ra các bộ ba quan hệ. Giá trị trả về là các tập các bộ ba quan hệ.
TripleType CheckRE(ItemType subject, ItemType relation, ItemType object)
Tìm bộ 3 bằng cách kiểm tra tập luật
TripleType InterRE(ItemType subject, ItemType relation, ItemType object)
Tìm bộ 3 bằng phương pháp giao
Lớp ProcessingQuery
Kiểu trả về Tên phương thức Đặc tả
void processQuantitativeAdjective(Q ueryTriple tripleset,
QueryBuffer buffer)
Sử dụng các tính từ định lượng
(thường, so sánh nhất, so sánh hơn) đã nhận biết được để sinh ra các bộ ba quan hệ. Tập các bộ ba quan hệ kết quả là “tripleset” void processQuanlitativeAdjective(Q ueryTriple tripleset, QueryBuffer buffer) Sử dụng các tính từ định lượng (thường, so sánh nhất) đã nhận biết được để sinh ra các bộ ba quan hệ. Tập các bộ ba quan hệ kết quả là “tripleset
Khối xây dựng đồ thị ý niệm:
Lớp QueryOutput
Kiểu trả về Tên phương thức Đặc tả
String generatelistJsCG(ListCG lsCG) Tạo đồ thị cho tồn bộ câu truy vấn dưới dạng JavaScript
String generateJsCG(QueryBuffer buffer, int currentleft, int currentTop, boolean isCoverByBox)
Tạo đồ thị con dưới dạng JavaScript
Khối sinh câu truy vấn SeRQL
Lớp SeRQLMapping Kiểu trả về Tên phương thức Đặc tả String getSeRQLQuery(QueryBuffer buffer)
Sinh ra câu SeRQL cho từng câu truy vấn nguyên tử. Trả về dưới dạng String.
Lớp QuerytoCG
Kiểu trả về
Tên phương thức Đặc tả
String appendWhereClauseForSQTA(String query, QueryBuffer buf, TopRelationType topRe)
Thêm các phần cần thiết vào câu SeRQL truyền vào để xử lý trường hợp cĩ tính từ định lượng so sánh nhất. Trả về câu SeRQL đã được chỉnh sửa
String appendOrderByClause(String query, QueryBuffer buf) Thêm các phần cần thiết vào câu SeRQL truyền vào để xử lý trường hợp cĩ tính từ định lượng ở dạng nguyên mẫu. Trả về câu SeRQL đã được chỉnh sửa
String appendWhereClauseForCQTA(String query, QueryBuffer buf)
Thêm các phần cần thiết vào câu SeRQL truyền vào để xử lý trường hợp cĩ tính từ định lượng so sánh hơn. Trả về câu SeRQL đã được chỉnh sửa
5.2 Hệ thống luật [tham khảo CDT]
Ta sẽ xây dựng tập luật theo định dạng XML.
Dạng chung của mỗi luật trong hệ thống luật như sau:
“Nếu [điều kiện] thì [hành động]”
Trong đĩ, vế điều kiện cĩ những đặc điểm sau:
• Cĩ ràng buộc về tên lớp, giá trị chuỗi ban đầu và kiểu thực thể.
• Cĩ thể xét nhiều quan hệ đồng thời trong cùng một luật. Phần hành động cĩ những đặc tính sau:
• Cĩ thể thay đổi tên lớp, thay đổi định của danh thực thể và xác định loại quan hệ.
Các phần sau trình bày cấu trúc của tập luật dùng để ánh xạ bộ ba quan hệ thành quan hệ ngữ nghĩa.
5.2.1 Cấu trúc của hệ thống luật
Hệ thống luật được định nghĩa trong một tập tin XML, và mơ tả theo định dạng DTD (Document Type Definition) như sau:
Thành phần gốc (root element) của tập tin là TransformRules, mỗi TransformRules chứa nhiều thành phần (element) rule.
<!ELEMENT TransformRules (rule)+ >
<!ELEMENT rule (premiselist, consequentlist) > <!ATTLIST rule
name CDATA #REQUIRED priority CDATA #IMPLIED>
[hình tham khảo HA]
Trong ví dụ trên, từ khĩa ELEMENT được dùng để khai báo cấu trúc của một thành phần; từ khĩa ATTLIST được dùng để mơ tả các thuộc tính của một thành phần; CDATA mơ tả kiểu dữ liệu chuỗi cho thuộc tính; #REQUIRED dùng mơ tả tính chất bắt buộc của thuộc tính; #IMPLIED dùng mơ tả tính chất khơng bắt buộc của thuộc tính. DTD dùng các ký hiệu “*”, “+” và “?” dùng để chỉ số lượng của một thành phần con trong thành phần cha của nĩ. Ý nghĩa của mỗi ký hiệu như sau:
• Dấu “*”: xuất hiện từ 0 đến n
• Dấu “+”: xuất hiện từ 1 đến n
• Dấu “?”: xuất hiện 0 hoặc 1
Theo định nghĩa trên, TransformRules cĩ thể chứa nhiều thành phần rule, mỗi rule chứa hai thành phần là premiselist và consequentlist. Ngồi ra, thành phần rule cịn cĩ thuộc tính là name và priority, lần lượt để mơ tả tên luật và độ ưu tiên của luật. Cấu trúc các thành phần con trong thành phần rule sẽ được mơ tả rõ hơn theo sau đây.
5.2.2 Cấu trúc thành phần điều kiện của luật
Như đã được nhắc đến ở đầu chương này, mỗi luật bao gồm hai phần: điều kiện và hành động. Phần điều kiện của luật được mơ tả bằng thành phần premiselist, là con của thành phần rule. Mỗi
premiselist bao gồm một hay nhiều thành phần premise, hình dưới mơ tả cấu trúc của một thành phần
premise. Mỗi premise gồm cĩ 3 thành phần con là subject, relation và object tương ứng với một bộ ba mà ta đã thảo luận ở phần trên. Ý nghĩa của các thuộc tính trong các thành phần này được thể hiện trong hình dưới:
<!ELEMENT premise(subject, relation, object) > <!ELEMENT subject EMPTY>
<!ATTLIST subject
var CDATA #REQUIRED value CDATA #IMPLIED className CDATA #IMPLIED classType CDATA #IMPLIED> <!ELEMENT relation EMPTY>
<!ATTLIST relation
var CDATA #REQUIRED value CDATA #IMPLIED> <!ELEMENT object EMPTY>
<!ATTLIST object
var CDATA #REQUIRED value CDATA #IMPLIED className CDATA #IMPLIED classType CDATA #IMPLIED>
[hình tham khảo HA]
Tên thuộc tính Đặc tả
var Thuộc tính này dùng để đặt tên biến cho các thành phần, nhằm phân biệt các thành phần
value Giá trị chuỗi ban đầu của thực thể. Ta cĩ thể liệt kê tập các giá trị trong đĩ các thành phần cách nhau bằng dấu phẩy. className Thuộc tính ràng buộc tên lớp thực thể
5.2.3 Cấu trúc thành phần hành động của luật
Nếu một bộ ba nào đĩ thỏa mãn thành phần điều kiện, thì phần hành động consequent sẽ được áp dụng cho bộ ba đĩ. Cấu trúc của thành phần hành động được mơ tả như dưới.
Các thuộc tính của thành phần hành động cũng giống như phần tử điều kiện đã được mơ tả trong bảng ở phần 5.2.2. Ngồi ra, thành phần hành động cịn cĩ hai thuộc tính mới là quantifier và delete, thuộc tính quantifier dùng để gán giá trị định danh cho lớp, thuộc tính delete dùng để yêu cầu xĩa thành phần đĩ.
<!ELEMENT consequent(subject, relation, object) > <!ELEMENT subject EMPTY>
<!ATTLIST subject
var CDATA #REQUIRED value CDATA #IMPLIED className CDATA #IMPLIED classType CDATA #IMPLIED quantifier CDATA #IMPLIED delete CDATA #IMPLIED> <!ELEMENT relation EMPTY>
<!ATTLIST relation
var CDATA #REQUIRED value CDATA #IMPLIED delete CDATA #IMPLIED> <!ELEMENT object EMPTY>
<!ATTLIST object
var CDATA #REQUIRED value CDATA #IMPLIED className CDATA #IMPLIED classType CDATA #IMPLIED quantifier CDATA #IMPLIED delete CDATA #IMPLIED>
[hình tham khảo HA]
Hình sau đây là ví dụ minh họa đặc tả một luật hồn chỉnh:
<rule name="hasCurrency" priority="70"> <premiselist>
<premise>
<subject var="a" className="Currency"/> <relation var="b" value="of,used in" /> <object var="c" />
</premise> </premiselist> <consequentlist>
<consequent>
<subject var="c" />
<relation var="b" value="hasCurrency" /> <object var="a" />
</consequent> </consequentlist> </rule>
[hình tham khảo HA]
5.2.4 Xây dựng một số luật đặc biệt
Ngồi ra, ta sẽ cần một số luật đặc biệt, các luật này được dùng cho bước gom các thực thể cĩ cùng ngữ nghĩa trong câu truy vấn. Ví dụ câu truy vấn “Who was the president of Vichy France?”, các từ who và president đều biểu diễn cho thực thể khơng tên thuộc lớp PERSON, và chúng cách nhau bởi từ quan hệ was. Do đĩ who và president được gom lại thành một thực thể duy nhất. Luật đặc biệt cũng cĩ cấu trúc như luật thường nhưng nĩ cĩ độ ưu tiên là -1.
5.3 Lưu trữ đồ thị và hiển thị đồ thị [tham khảo HA]
Trước khi hiển thị kết quả ra màn hình, chương trình dùng cấu trúc dữ liệu như sau để lưu trữ đồ thị ý niệm trong bộ nhớ:
Cấu trúc dữ liệu trên sẽ gồm một mảng các phần tử. Mỗi phần tử cĩ vùng lưu trữ Sub-CG chứa đựng thơng tin để xây dựng đồ thị ý niệm nguyên tử (atomic conceptual graph),là đồ thị ý niệm mà khơng chứa liên từ luận lý trong câu truy vấn. “Các thơng tin để xây dựng đồ thị ý niệm nguyên tử bao gồm thơng tin về thực thể, kiểu quan hệ giữa các thực thể và chiều của quan hệ. Dữ liệu được lưu trong vùng lưu trữ Sub-CG sau đĩ sẽ được dùng để biểu diễn thành một đỉnh truy vấn con.”
Mỗi phần tử cĩ thuộc tính Next relation lưu trữ kiểu quan hệ giữa hai đỉnh truy vấn con liền nhau. Các giá trị cĩ thể cĩ của Next relation chính là kiểu quan hệ cĩ thể cĩ giữa hai đỉnh truy vấn con trong câu truy vấn cĩ liên từ luận lý, cụ thể là UNION, INTERSECT, MINUS.
“Thêm vào đĩ, cấu trúc dữ liệu cĩ một thuộc tính Top relation để lưu trữ quan hệ gộp của câu truy vấn. Đĩ cĩ thể là quan hệ COUNT đối với câu truy vấn cĩ từ để hỏi là “How many”, hoặc quan hệ MIN, MAX đối với các truy vấn cĩ tính từ so sánh nhất.”
Từ cấu trúc dữ liệu nêu trên. Đồ thị ý niệm được hiển thị ra màn hình cĩ dạng tổng quát như hình sau:
[hình tham khảo HA]
“Trong đĩ, mỗi đỉnh truy vấn con được xây dựng từ vùng lưu trữ Sub-CG của mỗi thành phần trong cấu trúc lưu trữ. Quan hệ giữa các đỉnh truy vấn con (UNION, INTERSECT, MINUS) được xây
dựng từ thuộc tính Next relation. Quan hệ gộp (COUNT, MAX, MIN) được xây dựng từ thuộc tính
Top relation của cấu trúc lưu trữ. Đường liên kết nét đơi sẽ được nối từ quan hệ gộp vừa tạo tới thực thể câu truy vấn về số lượng trong trường hợp truy vấn “How many” hoặc nối tới biểu diễn tính từ nằm trong đỉnh truy vấn con tương ứng trong trường hợp câu truy vấn cĩ chứa tính từ so sánh nhất.”
Lấy một ví dụ cho phương pháp lưu trữ và hiển thị như phân tích nêu trên: câu truy vấn “Who was biographer and Samuel Johnsons's friend?”, hệ thống sẽ kết xuất ra đồ thị ý niệm như ví dụ sau:
[hình tham khảo HA]
5.4 Xây dựng câu truy vấn SeRQL
Dù đồ thị ý niệm là một ngơn ngữ vừa dễ hiểu với con người, vừa khả xử lý với máy tính, nhưng đồ thị ý niệm mới chỉ mang tính chất tham khảo, để kiểm tra sự chính xác của quá trình xử lý câu truy vấn. Bởi vì, đồ thị ý niệm chưa được sử dụng làm ngơn ngữ truy vấn trên bất cứ cơ sở dữ liệu ngữ nghĩa nào, nên máy tính khơng thể trực tiếp dùng đồ thị để tìm thực thể hay tài liệu. Vì vậy, trong chương này sẽ trình bày phương pháp dịch đồ thị sang ngơn ngữ SeRQL, là ngơn ngữ truy vấn sử dụng bởi cơ sở tri thức ngữ nghĩa.
Một phần trong quá trình sinh câu SeRQL của hệ thống sẽ sử dụng lại giải thuật trước đây của VN-KIM Search [tham khảo Dũng], chỉ thêm vào những đoạn cần thiết để những câu truy vấn cĩ tính từ.
Giải thuật đã cĩ của VN-KIM Search như sau:
Generalize the query CG
For each relation in the generalized query CG do {
Get all neighbour concepts of the current relation //process each concept sequentially
For each concept do {
if the concept is new //i.e. not processed before {
if the concept referent is “?” or “*” {
if the concept referent is “?” {
Assign to it a variable starting with “x” //e.g x1, x2, x3,... Assign to it a label variable starting with “z” //e.g z1, z2, z3,... Append these variables to the SELECT clause
Append the “rdfs:label” statement for this concept to the FROM clause }
if the concept referent is “*” {
Assign to it a variable starting with “y” //e.g y1, y2, y3,... }
Append the “rdf:type” statement for this concept to the FROM clause
Assign to the constrained properties variables starting with “p” //e.g p1, p2, p3,... Append the property constraints to the WHERE clause
} //end of “?” or “*”
if the concept referent is specific, assign to it its identifier as a dummy variable Remember this concept having been processed
}
}//end of if new
Assign to the current relation its URI
Append the statement for the current relation with its neighbour concepts to the FROM clause }
//process the disconnected concept nodes
For each concepts that has not been visited yet, process it as above
[hình tham khảo Dũng]
Giải thuật đề tài này thêm vào để xử lý tính từ sẽ nhận kết quả của giải thuật trên làm đầu vào, rồi thêm những bộ phận cần thiết:
Giải thuật cho tính từ bình thường (dạng nguyên mẫu): Truy vấn tất cả thực thể phù hợp và trả về theo một trật tự
//Function: append ORDER BY clause for normal adjective to the input SeRQL
Initialize new ORDER BY clause
For each semantic relation generated from normal adjective {
Append the its object’ variable to SELECT clause
Identify the way of ordering //i.e DESC or ASC. Use a dictionary (XML file)
Append to ORDER BY clause the variable of the relation’s object, and the way it is ordered }
//Function: append WHERE clause for superlative adjective to the input SeRQL
Initialize the WHERE, nested SELECT and nested FROM clause
//select the value of all other entities which are also qualified, then use “>= ALL” or “<= ALL” to //find the entity that has the maximum and minimum value
Identify whether “>= ALL” or “<=ALL” from the Top relation. Call this OP. Find the relation that is generated from superlative adjective
{
With its subject, create a new variable representing all others qualified entities. Call this the temporary subject. Then use the temporary subject to append all constraints on the subject to the nested FROM clause
With its object, create a new variable representing all others qualified entities’ values. Call this the temporary object. Append the temporary object to the nested SELECT clause.
Append the statement of this relation to the nested FROM clause. But use the temporary subject and temporary object as the 2 variables.
Append to WHERE clause the object’s variable and the OP identified before. }
Giải thuật cho tính từ so sánh hơn:
//Function: append WHERE clause for comparative adjective to the input SeRQL Initialize the WHERE clause
For every relation generated from comparative adjective {
Append its subject’s variable to the WHERE clause
Identify the comparative operator //i.e. “>” or “<”. Use a dictionary (XML file) Append comparative operator to the WHERE clause
else if its object is a constant, append its object’s quantifier to the WHERE clause