Çarşamba, Mart 23, 2005

Sözlük kullanımındaki kısıtlar

Kelime arama ile ilgili sorgulamalarda, daha çok ilgili kayıt getirmek için sorgu genişletilmesi yapılır. Örneğin, A terimini aradığınızda bu terimin alt sınıflarını da araştırmak için NT(A) genişletmesi yapılır. Diyelim ki B, A' nin bir alt sınıfı, C ve D, B'nin eşanlamlıları(SYN) ve E, F B ile ilgili terimler(RT) olsun. Burada dikkat edilmesi gereken NT(A)'nın sadece {A} {B} yi vereceğidir.

Salı, Mart 01, 2005

Oracle 10g de eğiticisiz sınıflandırma

Evet aşağıdaki kodun 9i da çalıştırmaya kalkmayın. Çünkü çalışmaz. 10g ile yeni gelen paket kullanılıyor.

set serverout on
/* Dökümanlarınızı içeren tabloyu oluşturun ve doldurun */
/* İndeksinizi yaratın */
create index collectionx on collection(text) indextype is ctxsys.context parameters('nopopulate');

create table clusters (
clusterid NUMBER,
descript varchar2(4000),
label varchar2(200),
sze number,
quality_score number,
parent number);
/* set the preference */
exec ctx_ddl.drop_preference('my_cluster');
exec ctx_ddl.create_preference('my_cluster','KMEAN_CLUSTERING');
exec ctx_ddl.set_attribute('my_cluster','CLUSTER_NUM','3');
/* do the clustering */
exec ctx_output.start_log('my_log');
exec ctx_cls.clustering('temp_text_idx','id','restab','clusters','my_cluster');
exec ctx_output.end_log;

token_info

Sonunda bir kelimenin hangi dökümanın neresinde bulunduğunu gösteren fonksiyonu buldum. Kendim uğraşsam yazmaya bu kadar zaman almazdı belki ya buna da şükür.
select ctx_report.token_info('temp_text_idx','engineering',0) from dual;

Örnek çıktıdan bir parça:

CTX_REPORT.TOKEN_INFO('TEMP_TEXT_IDX','ENGINEERING',0)
-----------------------------------------------------========================================================
TOKEN INFO FOR ENGINEERING (0:TEXT)
========================================================
index: "NSTC"."TEMP_TEXT_IDX"
base table: "NSTC"."DOC_TABLE"
$I table: "NSTC"."DR$TEMP_TEXT_IDX$I"
-----------------------------------------------------
ROW 1 ($I ROWID AAAKp/AAJAACCmYAAR)
-----------------------------------------------------
DOCID COUNT: 20 FIRST: 1 LAST: 67
DOCID: 1 (AAAKp1AAJAABDRIAAP) BYTE: 1 LENGTH: 4 FREQ: 2
AT POSITIONS: 52 156
DOCID: 3 (AAAKp1AAJAABDRGAAB) BYTE: 5 LENGTH: 4 FREQ: 1
AT POSITIONS: 156


TOKEN STATISTICS
========================================================
Total $I rows: 1
Total docids: 20
Total occurrences: 48
Total token_info size: 106
Total garbage size: 0 (0%)
Optimal $I rows: 1
Row fragmentation: 0%


Aynı işlemi bir program içinde de yapabilmenizi sağlayan procedure var. Parametrelerden 0 TOKEN_TYPE_TEXT sabit değerine karşılık geliyor ki sıradan bir kelimeyi temsil ediyor. Diğer sabitler için Oracle Text Reference içinde TOKEN_TYPE kısmına bak.