Doğal Dil İşleme (Natural Language Processing) (NLP)

Amacımız "Bir web sayfasından doğal dil ile girilen soru cümlesini alarak, elimizdeki ontolojiye göre uygun yanıtı veren bir sistem" geliştirmekti. Önceden yapılmış çalışmalara örnek olarak aşağıdaki bağlantılardaki dökümanları inceleyebiliriz:

A Natural Language Query Interface to Structured Information

AquaLog An Ontology Portable Question Answering System

Ginseng projesi

Querying the Semantic Web with Ginseng

Querix A Natural Language Interface to Query Ontologies


İlk aşamada kullanıcının sorduğu soruyu içerdiği kelimelere göre işleyebilen bir algoritmaya ihtiyacımız olacak. Bu amaçla genel adıyla Natural Language Processing (NLP) olarak anılan ve dilin gramer yapısına göre değişiklik gösterebilen yöntemler kullanılabilir.

Biz basitçe cümleyi önceden belirlediğimiz anahtar kelimeleri arayarak ve geri kalan kelimeleri ontolojimiz içinde sorgulayarak sonuç döndüren bir yapı kurmaya çalışacağız. Öncelikle soru ya da cümle yapısını belirlememizi sağlayacak olan Kim, Kaç, Nerede, Ne zaman gibi anahtar kelimeleri ayırdetmemiz gerekir. Bu anahtar kelimeler, bağlaçlar v.s. dışında kalan kelimeler bizim için ontoloji içinde aranacak değerleri oluşturacaktır.


-->
if (question.toLowerCase().indexOf("what ") > -1)
questionType = "WHAT";
else if (question.toLowerCase().indexOf("which ") > -1)
questionType = "WHICH";
else if (question.toLowerCase().indexOf("who ") > -1)
questionType = "WHO";
else if (question.toLowerCase().indexOf("when ") > -1)
questionType = "WHEN";
else if (question.toLowerCase().indexOf("how many") > -1)
questionType = "HOWMANY";
//Look for max - min words
if (question.toLowerCase().indexOf(" max ") > -1)
checkMinMax = "MAX";
else if (question.toLowerCase().indexOf(" maximum ") > -1)
checkMinMax = "MAX";
else if (question.toLowerCase().indexOf(" min ") > -1)
checkMinMax = "MIN";
else if (question.toLowerCase().indexOf(" minimum ") > -1)
checkMinMax = "MIN";
//Look for has/is words
if (question.toLowerCase().indexOf(" has ") > -1 || question.toUpperCase().indexOf(" HAVE ") > -1)
checkHasIs = "HAS";
if (question.toLowerCase().indexOf(" is ") > -1)
checkHasIs = "IS";
if (question.toLowerCase().indexOf(" same ") > -1)
checkEquality = "YES";
if (question.toLowerCase().indexOf(" similar ") > -1)
checkEquality = "YES";

Örnek çalışmamızda soruların ingilizce sorulması isteniyordu. Soruyu kelime kelime incelerken anahtar olarak belirlediğimiz kelimeleri tarayıp, işimize yarayacak olanları aldıktan sonra temizleriz.


-->
temp = temp.replaceAll(" of ", " ");
temp = temp.replaceAll(" is ", " ");
temp = temp.replaceAll(" am ", " ");
temp = temp.replaceAll(" are ", " ");
temp = temp.replaceAll(" was ", " ");
temp = temp.replaceAll(" were ", " ");
temp = temp.replaceAll("who ", " ");
temp = temp.replaceAll("Who ", " ");
temp = temp.replaceAll("what ", " ");
temp = temp.replaceAll("when ", " ");
temp = temp.replaceAll("which ", " ");
temp = temp.replaceAll("how many", "");
temp = temp.replaceAll("how much", "");
temp = temp.replaceAll("many ", " ");
temp = temp.replaceAll("much ", " ");
temp = temp.replaceAll("why ", " ");
temp = temp.replaceAll("where ", " ");
temp = temp.replaceAll("has ", " ");
temp = temp.replaceAll("have ", " ");

Geriye kalan kelimeler bizim için veri sorgulamada kullanılacak değerler olacaktır.

Hiç yorum yok: