Pazartesi, Nisan 04, 2005

Sözlüğe toplu kelime eklemek

Gerekti ki bir siteden elde ettiğim şirket adlarını sözlüğün MANUFACTURERS AND SUPPLIERS kökünün yaprakları olarak eklenmeli. Daha önceki yazıda sözlüğümüzü büyük küçük harf ayrımını dikkate alarak yapmamız gerektiğini belirtmiştim. Bu nedenle her kelimeyi ve arama yapacağım metni büyük harfe çevirmeyi uygun gördüm. Her ne kadar insan için bu anlaşılırlığı azaltacaksa da amacımız makinalara anlatmak. Bu nedenle ilk olarak Perl dilinde şu programcığı kullandım:
#!/usr/bin/perl
open(IN, $ARGV[0]) die "Couldn't open the file!";
open(OUT, ">".$ARGV[1]);
while (){
tr/a-z/A-Z/;
s/\&/AND/;
print OUT;
}
close (IN);
close (OUT);

Daha sonra aşağıdaki programı kullanarak bir dosyada satır satır yazılı şirket adlarını sözlüğe yerleştirecek PL/SQL komutcuk dizisini oluşturdum.

#!/usr/bin/perl -w

open(IN,$ARGV[0]) die("Cannot open the input file!");
open(OUT, ">".$ARGV[1]) die("Cannot open the output file!");
print OUT "begin\n";
while (defined($line=)){
chomp($line);
print OUT "ctx_thes.create_relation('nstc','MANUFACTURERS AND SUPPLIERS','NTI','".$line."');\n" ;
}

print OUT "end;\n/\n";

Sonrada PL/SQL de bu dosyayı yürüttüm. E direk PL/SQL'de de yazabilirdim ama amaç biraz Perl tecrübesi. Larry Wall tarafından tasarlanan Perl'ün, web üstündeki içeriğin %85'inin arkasındaki CGI programlama(script) dili olduğu tahmin ediliyormuş. [Bkz.]

Kaçış karakteri

Daha önce sqlplus ile ilgili şu yazıda & işaretini çok güzeş bir özellike olarak sunmuştum. Gel gör ki bu karakteri içeren bir kelime dizisi ararsam ne olacak diye sormamıştım. Evet diyelim ki metin kümenizde "MATERIALS & ELECTROCHEMICAL RESEARCH (MER) CORP. " kelime dizisi aramak icap etti ne yapacaksınız? Bu durumda sqlplus'ta
SET ESCAPE \
SELECT NAME FROM DOC_TABLE WHERE CONTAINS(TEXT,'{MATERIALS \& ELECTROCHEMICAL RESEARCH (MER) CORP.}')>0;
komutunu kullanmanız gerekiyor duyurulur.

ABOUT sorgulamaları için

ABOUT sorgulaması yapabilmek için ilk önce özelleştirdiğiniz sözlüğünüzü Oracle bilgi tabanına eklemeniz gerekiyor. Ancak bunu yapmadan önce Oracle'ın sözlük üzerine koşullarını iyi gözden geçirin. Bu koşullar önem sırasına göre şu şekilde:
  • Sözlük büyük küçük harf ayrımı yapmalı. Bu nedenle sözlüğü derlerken ctxload komutunda -thescase Y seçimini ihmal etmeyin.
  • En uzun kelime 80 karakter olabilir.
  • BTG ve BTP BT ile NTG ve NTP ise NT ile tamamen eş görülüyor.
  • BT ve NT arasında çevrimler yasak. Zaten akla yatkın olanı da bu.
  • Eğer eşanlamlı kelimeler halkası varsa muhakkak birini PT yani tercih edilen kelime olarak seçin ve bütün NT, BT ilişkilerini bunun üzerinden yapın.
  • RT ile ilişkilendirdiğiiz kelimeleri asla NT veya BT ilişkisine ya da tersine BT veya NT ilişkisindeki bir kelimeyi ayrıca RT olarak tanımlamayın.
  • Bir kelime için en fazla 32 RT ilişkisi kurulabilir.
  • En derin ağaç 16 yükseklikte olabilir.