2015-03-25 84 views
1

我使用的是阿拉伯语言的oracle文本。如何在数据库中保存同义词(Oracle Text)

我想将同义词列表保存在数据库表中,所以从这张表读取的领域索引,有什么想法?

+0

你的意思是你要创建阿拉伯语语言,参考同义词原始表(英语吧?)? – 2015-03-25 14:17:22

+0

不,先生,我想存储每个阿拉伯文字与它在表中的同义词,所以当我搜索我的文字,它搜索与这些同义词的文字 – 2015-03-25 22:44:51

回答

1

我找到了一个解决方案:

1 - 我上传了我的同义词列表的表中调用的话(包含所有的条款和它们的同义词IDS)和主表称为同义词集(包含同义词)

2 - 创建同义词:

begin 
    ctx_thes.create_thesaurus ('MyThesaurus'); 
end; 

3-创建存储过程从我的表中读取[话]和创建同义词之间关系:

create or replace procedure CreateSynonyms is 
    CURSOR syn_cur is select s.name_abstract,w.root,w.word_abstract 
    from p words w , synset s 
    where w.synset_id=s.synset_id and w.root<>s.name_abstract and w.word_abstract<> s.name_abstract 
    order by s.synset_id; 
    syn_rec syn_cur%rowtype; 
BEGIN 
OPEN syn_cur; 
LOOP 
    FETCH syn_cur into syn_rec; 
    EXIT WHEN syn_cur%notfound; 
    begin 
    ctx_thes.create_relation ('MyThesurus', syn_rec.name_abstract, 'syn', syn_rec.word_abstract); 
    END LOOP; 
END; 

4-重写我的查询来选择同义词:

select /*+ FIRST_ROWS(1)*/ sentence_id,score(1) as sc, isn 
      where contains(PROCESSED_TEXT,'<query> 
<textquery> 
    search for somthing here 
<progression> 
<seq><rewrite>transform((TOKENS, "{", "}", ","))</rewrite></seq> 
<seq><rewrite>transform((TOKENS, "syn(", ",listing)", " , "))</rewrite>/seq> 
</progression> 
</textquery> 
<score datatype="INTEGER" algorithm="COUNT"/></query>',1)>0 

希望这会帮助别人