İki cümlenin !! anlamları !! aynı mı ?

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Cevapla
Kullanıcı avatarı
Asri
Kıdemli Üye
Mesajlar: 767
Kayıt: 16 Eyl 2003 08:54
Konum: istanbul

İki cümlenin !! anlamları !! aynı mı ?

Mesaj gönderen Asri » 05 Mar 2005 11:12

iki cümleyi bir biri ile karşılatırıp aynı anlama gelip-gelmediklerini yada birinci cümledeki anlamın diğer cümlede olup-olmadığını bulabilirmiyiz.

örneği:
1. cümle "Her internet kullanıcısı dosya transferi yapabilir."
2. cümle "İnterneti kullananlar dosya transferi yapabilir."

yada
1. cümle "Ali okula gider, top oynar."
1. cümle "Ali top da oynar okuluna da gider."

Gelelim bu algoritmayı neden istediğime.

İngilizceden Türkçe Bilgisayar teknik terimler sözlüğü hazırladım. Text dosyadan import özelliği ekledim. Ancak eklenen dosyadaki bir kelime var ise sözlükte eklenen anlamı var olan anlamdaki ile karşılaştırıp , eklenen farklı bir anlam ise listeye eklemek , var olan anlamın içinde var ise eklememek istiyorum. oh bee tek nefeste sölemek ne zormuş :)

iki tane procedure hazırladım. şu an da onunla uğraşıyorum :)

Bu procedure eklenen kelimenin anlamındaki her bir harfin kaç defa geçtiğini kaydediyor.

Kod: Tümünü seç

procedure tform1.kontrol_eklenen_anlam;
begin
  alfabe:='abcçdefgğhıijklmnoöpqrsştuüvyxwz';
  for it:=1 to length(turks) do
  begin
    harf:=turks[it];
    if harf in ['a','b','c','ç','d','e','f','g','ğ','h','ı','i','j','k','l','m','n','o','ö','p','q','r','s','ş','t','u','ü','v','y','x','w','z'] then
    begin
      harfler_tr[pos(harf,alfabe)]:=harfler_tr[pos(harf,alfabe)]+1;
    end;
  end;

end;


Bu procedure de varolan kelimenin anlamındaki her bir harfin kaç defa geçtiğini kaydediyor.

Kod: Tümünü seç

procedure tform1.kontrol_varolan_anlam;
begin
  alfabe:='abcçdefgğhıijklmnoöpqrsştuüvyxwz';
  for it:=1 to length(ings) do
  begin
    harf:=ings[it];
    if harf in ['a','b','c','ç','d','e','f','g','ğ','h','ı','i','j','k','l','m','n','o','ö','p','q','r','s','ş','t','u','ü','v','y','x','w','z'] then
    begin
      harfler_en[pos(harf,alfabe)]:=harfler_en[pos(harf,alfabe)]+1;
    end;
  end;

end;

1- bu çıkan sonuçları bir biri ile karşılaştırarak farkı bulucam ve dicem ki toleransım %50 farklı toplamın yarısından fazla ise aynı cümle değil yarından az ise aynı cümledir.

2- bu çıkan sonuçlardaki bir-birini tutan harfleri elicem kalanların farkını bulucam ve dicem ki toleransım %50 farklı toplamın yarısından fazla ise aynı cümle değil yarından az ise aynı cümledir.

v.s v.s bu şekilde bir çok farklı mantık yürütülebilir.

sizlerden istediğim yardım şu bunu nasıl kesin sonuca ulaştırırım baika bir şekilde nasıl yaparım.

herkese şimdiden teşekkürler.

Asri
Öğrenmek ve öğretmek, akıntıya karşı yüzmek gibidir ilerleyemediğiniz taktirde gerilersiniz.

Kullanıcı avatarı
futbolcu
Üye
Mesajlar: 129
Kayıt: 02 Tem 2003 07:33
Konum: Ankara

Mesaj gönderen futbolcu » 06 Mar 2005 07:20

İlginç bir çalışma ve yaklaşımlar. Ben olsam, eş anlamlı sözcükleri olabildiğince mecaz anlamlarını filan araştırır tablolardım. Bana göre dilin olanaklarını sonuna kullanmak daha doğal olur.
Bilgi çoğaldıkça krallar ölür

Kullanıcı avatarı
karflake
Üye
Mesajlar: 222
Kayıt: 15 Haz 2003 02:57

Mesaj gönderen karflake » 06 Mar 2005 10:28

Buradaki makaleye bakmanızın bir faydası olabilir belki.

Kullanıcı avatarı
Asri
Kıdemli Üye
Mesajlar: 767
Kayıt: 16 Eyl 2003 08:54
Konum: istanbul

Mesaj gönderen Asri » 06 Mar 2005 11:17

karflake yazdı:Buradaki makaleye bakmanızın bir faydası olabilir belki.
örnek kod için teşekkür ederim.

kontrollerim sonucunda bu functioun un yeterli olmadığını tespit ettim.
örneğin:
1.cümle "ahmet bey merhaba nasılsınız"
2.cümle "nasılsınız ahmet bey merhaba"

sonuç olarak %17 doğruluk dönmektedir.
Bence bunun %100 olması gerekir.

strsimilar isminden yola çıkarak aramalar yaptım alamanca gramer uygun olan bir function daha buldum ama oda aynı problemi verdi.

şimdi de "string compare" olarak araştırııyorum.

iyi çalışmalar.
Öğrenmek ve öğretmek, akıntıya karşı yüzmek gibidir ilerleyemediğiniz taktirde gerilersiniz.

Kullanıcı avatarı
karflake
Üye
Mesajlar: 222
Kayıt: 15 Haz 2003 02:57

Mesaj gönderen karflake » 06 Mar 2005 11:28

Rica ederim.

Şu şekilde bir mantık belki daha kullanılışlı olabilir. Önce cümleleri kelimelere ayırırsınız, daha sonra bir oran belirleyerek "bu oranın altında kalan değerleri benzer kabul etme" diyebilirsiniz.

Örneklemek gerekirse;
"ahmet bey merhaba nasılsınız" cümlesindeki kelimelerin herbini, "nasılsınız ahmet bey merhaba" cümlesinin kelimeleriyle karşılaştırma işlemine tutarak, oranları toplatırsanız, toplam 400 değerine ulaşırsınız. Zaten ilk cümle dört kelimeden oluştuğundan cümlelerin tamamen aynı olduğu anlaşılır. Cümleler tamamen aynı değilse de bir ölçü koyup, "benzerlik oranı toplamı 300'in altındaysa benzer kabul etme" diyebilirsiniz.

Cümleyi kelimelere ayırmak içinse buradaki kod işe yarıyabilir.

Kolay gelsin.

fduman
Moderator
Mesajlar: 2749
Kayıt: 17 Ara 2004 12:02
Konum: Ankara

Mesaj gönderen fduman » 06 Mar 2005 02:53

Bence bir dil bilimci ve istatistikçi ile beraber çalışmanız faydalı olacaktır. Çok uzman bir çözüm beklemediğinizi görüyorum. Bir istatistikçi bu tür benzerlikleri hesaplamanıza yardımcı olacak bir istatistik formülü kolayca verebilir.

Kullanıcı avatarı
Asri
Kıdemli Üye
Mesajlar: 767
Kayıt: 16 Eyl 2003 08:54
Konum: istanbul

Mesaj gönderen Asri » 06 Mar 2005 03:53

yapmak istediğim şeyin bir çeşit yapay zeka grubuna girdiğinin farkındayım ama çok detaya inilirse. Ben dediğiniz gib çok uzamn bir çözüm aramıyorum toleransın %25 bile olabilir hatta %50 ye kadar da düşebilirim. Önemli olan bir algoritma mantığı oturtup bunun üzerinde yoğunlaşarak en doğru sonuca ulaşmak.

@karflake arkadaşımızın dediği gibi kelimelere bölem işlemi işle daha doğru bir sonuca ulaşılabili sanırım.

* kelimelere bölüp strsimilar functionunu cümle için değil de kelime için kullanabiliriz. bunun için ayrıca kod yazmaya gerek yok. strsmilar kelime bazında doğru çalışıyor. Mantığı da şu olur.
ikili bir döngü oluşturulur 1. cumlenin kelimeleri ve 2. cümlenin kelimeleri diye.

sonra birinci cümlenin kelimeleri sırasıyla ,ikinci cümlenin bütün kelimeleri ile strsimilar functionu ile karşılatırıp en yüksek çıkan oran ın kelimesi listeden çıkarılarak bütün kelimelerin benzerlikleri bulunabilir.


* ikinci aşama olarak çıkan farklar karşılaştırır.

yeni doğrumu düşünüyorum arkadaşlar.

tşk.
Öğrenmek ve öğretmek, akıntıya karşı yüzmek gibidir ilerleyemediğiniz taktirde gerilersiniz.

Kullanıcı avatarı
Asri
Kıdemli Üye
Mesajlar: 767
Kayıt: 16 Eyl 2003 08:54
Konum: istanbul

Mesaj gönderen Asri » 06 Mar 2005 04:44

forum üyesi olmayan bir arkadaşımın sunduğu çözüm fikir vermesi açısından.

---------------------------------------------
cümle 1: "Her internet kullanıcısı dosya transferi yapabilir."
cümle 2: "İnterneti kullananlar dosya transferi yapabilir."

cümle 1 in ve cümle 2 nin kelime sayılarını bulurum

say_1 = 6
say_2 = 5

olasilik degerini bulurum

olasilik = 6 * 5 (30)
not = 100 / 30 (3.33)

her cümlenin kelimelerini dizi değişkenlere atarım

cumle1[0] = "Her"
cumle1[1] = "internet"
cumle1[2] = "kullanıcısı"
cumle1[3] = "dosya"
cumle1[4] = "transferi"
cumle1[5] = "yapabilir"

cumle2[0] = "İnterneti"
cumle2[1] = "kullananlar"
cumle2[2] = "dosya"
cumle2[3] = "transferi"
cumle2[4] = "yapabilir"

bundan sonra bir fonksiyon tanımları bu fonksiyon devamlı çağrılacak
bundan sonra başlıyor asıl iş

cumle1[0] ile cumle2[0] karşılatırılacak
her birinin harf sayıları bulunucak
sonra birer arttırılarak bu sorgu hep yapılacak
buradaki sonuç %100 çıkarsa 3.33 puan verilecek ve diğerine geçilecek
eğer sonuç hiç benzer çıkamaz ise o zaman 0 puan
aralarda ise %50 bu biraz türkçedeki takıların uzunluklarına bağlı bubu deneme ile doğru olasılığı buruz

mantık kabaca bu
sonra puanlar toplanıcak ona göre yapılamsı gereken işlem uygulanıcak
------------------------------------------
Öğrenmek ve öğretmek, akıntıya karşı yüzmek gibidir ilerleyemediğiniz taktirde gerilersiniz.

Kullanıcı avatarı
Asri
Kıdemli Üye
Mesajlar: 767
Kayıt: 16 Eyl 2003 08:54
Konum: istanbul

Mesaj gönderen Asri » 06 Mar 2005 05:31

arkadaşlar karşılaştırma strsimilar functionu ile yazdım ve programımın verdiği sonuçları açıklıyorum.

1. cümle "bugün okula sağdaki yoldan gittim"
2. cümle "okula soldaki yol üzerinden gittim"

sonuçlar
1. cümle kelimeleri
bugün
okula
sağdaki
yoldan
gittim

2. cümle kelimeleri
okula
soldaki
yol
üzerinden
gittim

karşılatırma sonuçları % delik
gittim bugün 16
okula okula 100
soldaki sağdaki 14
okula yoldan 50
gittim gittim 100


bu harf bazında çalışıyor ve benim aklıma yatmadı. şimdi de arda arda gelen harflerin doğruluğu mantığına göre yeniden yazıcam
Öğrenmek ve öğretmek, akıntıya karşı yüzmek gibidir ilerleyemediğiniz taktirde gerilersiniz.

Kullanıcı avatarı
Asri
Kıdemli Üye
Mesajlar: 767
Kayıt: 16 Eyl 2003 08:54
Konum: istanbul

Mesaj gönderen Asri » 06 Mar 2005 06:43

Programın ilk aşaması bitti arkadaşlar. yabancıların functionu kullanmaktansa kendi procedur üm daha doğru bir sonuca ulaştı :)

programımın verdiği sonuçları açıklıyorum.

1. cümle "bugün okula sağdaki yoldan gittim"
2. cümle "okula soldaki yol üzerinden gittim"

sonuçlar
1. cümle kelimeleri
bugün
okula
sağdaki
yoldan
gittim

2. cümle kelimeleri
okula
soldaki
yol
üzerinden
gittim


karşılaştırma sonuçları % de lik
bugün 0
okula okula 100
sağdaki soldaki 14
yoldan yol 50
gittim gittim 100
kelime puanı:264
cümle puanı :500
ortalama benzerlik :52


tabiki bu sonuçta tam olarak doğru değil ama bir ilerleme sonuçta. dikkat etiyseniz ikinci cümledeki "üzerinden" kelimesi hiç bir yerde hesaba dahil edilmemiş :)

ama bu haliyle bile iki cümleyi karşılaştırıp doğruya yakın bir sonuç verir.

şimdi sırada 1. cümle ile 2. cümleyi karşılaştırdıktan sonra 2. cümle ile 1. cümleyi de karşılaştırmamız gerekiyor mu?

1. kelime "yoldan" 2.kelime "yol" olursa %50
1. kelime "yol" 2. kelime "yoldan" olursa %100 olur

dah çok eksiği var ama bu mantığın dışında başka bir fikri olan varmı. yoksa buna devammı ???

Kod: Tümünü seç

unit karsilastiru;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls,math;


type
  TForm1 = class(TForm)
    Edit1: TEdit;
    Edit2: TEdit;
    Button1: TButton;
    Label1: TLabel;
    Label2: TLabel;
    Label3: TLabel;
    Memo1: TMemo;
    Memo2: TMemo;
    Memo3: TMemo;
    procedure Button1Click(Sender: TObject);
    procedure FormCreate(Sender: TObject);
  private
  procedure kontrol_turks;
  procedure kontrol_ings;
  procedure karsilastir;
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;
  ls1,ls2,it,i,j:longint;
  ekel2,kel1,kel2,s1,turks,ings,s,gec,alfabe:string;
  harf:char;
  harfler_tr,harfler_en:array [1..33] of integer;
  kelimetoplami,uzunluk1,uzunluk2,ebasari,son1,basari:integer;
  liste1,liste2,listet:tstringlist;

implementation

{$R *.dfm}

function kucult(krk:char):char;
var
a: char;
begin
   if not (krk in ['I','Ğ','Ü','Ş','İ','Ö','Ç']) then a:=ansilowercase(krk)[1];
   if (krk in ['I','Ğ','Ü','Ş','İ','Ö','Ç']) then
   begin
    if krk='I' then a:='ı';
    if krk='Ğ' then a:='ğ';
    if krk='Ü' then a:='u';
    if krk='Ş' then a:='s';
    if krk='İ' then a:='i';
    if krk='Ö' then a:='ö';
    if krk='Ç' then a:='ç';
  end;

  result:=a;
end;
function kucult_tr(cumle:string): string;
var
a: string;
krk:char;
begin
  for it:=1 to length(cumle) do
  begin
   krk:=cumle[it];
   if not (krk in ['I','Ğ','Ü','Ş','İ','Ö','Ç']) then a:=a+(lowercase(krk));
   if (krk in ['I','Ğ','Ü','Ş','İ','Ö','Ç']) then
   begin
    if krk='I' then a:=a+'ı';
    if krk='Ğ' then a:=a+'ğ';
    if krk='Ü' then a:=a+'u';
    if krk='Ş' then a:=a+'s';
    if krk='İ' then a:=a+'i';
    if krk='Ö' then a:=a+'ö';
    if krk='Ç' then a:=a+'ç';
  end;
 end;
  result:=a;
end;

procedure tform1.kontrol_turks;
begin
  s1:=turks;
  for it:=1 to 1000 do
  begin
      if s1='' then break;
      son1:=pos(chr(32),s1);gec:=copy(s1,1,son1-1);s1:=copy(s1,son1+1,length(s1));
      liste1.Add(gec);
      memo1.Lines.Add(gec);
  end;

end;

procedure tform1.kontrol_ings;
begin
  s1:=ings;
  for it:=1 to 1000 do
  begin
      if s1='' then break;
      son1:=pos(chr(32),s1);gec:=copy(s1,1,son1-1);s1:=copy(s1,son1+1,length(s1));
      liste2.Add(gec);
      memo2.Lines.Add(gec);
  end;
end;


function bakalimaynimi(s1, s2: string): Integer;
begin
  uzunluk1:=length(s1);
  uzunluk2:=length(s2);

  if uzunluk2 > uzunluk1 then
  begin
    gec:=s1;
    s1:=s2;
    s2:=gec;
  end;
  basari:=0;
  for i:=1 to length(s1) do
  begin
     if s1[i]=s2[i] then inc(basari) else break;
  end;
end;

procedure tform1.karsilastir;
begin
  uzunluk1:=liste1.Count-1;
  uzunluk2:=liste2.Count-1;
  if uzunluk2 > uzunluk1 then
  begin
    listet:=liste1;
    liste1:=liste2;
    liste2:=listet;
  end;
  kelimetoplami:=0;
  for ls1:=0 to liste1.Count-1 do
  begin
     kel1:=liste1.Strings[ls1];
     if kel1='' then continue;
     ebasari:=0;basari:=0;son1:=0;
     for ls2:=0 to liste2.Count-1 do
     begin
        kel2:=liste2.Strings[ls2];
        if kel2='' then continue;
        bakalimaynimi(kel1,kel2);
        if basari>ebasari then begin ebasari:=basari;ekel2:=kel2;end;
     end;
     ebasari:=100 * ebasari DIV length(kel1);
     if ebasari<>0 then begin
        memo3.Lines.Add(kel1+'  '+ekel2+'  '+inttostr(ebasari));
        kelimetoplami:=kelimetoplami+ebasari;
      end
      else memo3.Lines.Add(kel1+'  '+inttostr(ebasari))
   end;

end;

procedure TForm1.Button1Click(Sender: TObject);
begin
 liste1.Clear; liste2.Clear;
 memo1.Clear; memo2.Clear; memo3.Clear;

 turks:=edit1.text+' ';
 ings:=edit2.text+' ';
 turks:=kucult_tr(turks);
 ings:=kucult_tr(ings);

 kontrol_turks;
 kontrol_ings;

 karsilastir;
 memo3.lines.add('kelime puanı:'+inttostr(kelimetoplami));
 basari:=(liste1.count)*100;
 memo3.lines.add('cümle puanı :'+inttostr(basari));
 basari:=(kelimetoplami*100) div basari;
 memo3.lines.add('ortalama benzerlik :'+inttostr(basari));

 if basari>=70 then label2.Caption:='Birbirinin aynı iki cumle'
 else label2.Caption:='birbirinden farkli iki cumle';


end;

procedure TForm1.FormCreate(Sender: TObject);
begin
 liste1:=tstringlist.Create;
 liste1.Sorted:=false;
 liste1.Duplicates:=dupignore;
 //liste1.Sort;

 liste2:=tstringlist.Create;
 liste2.Sorted:=false;
 liste2.Duplicates:=dupignore;
 //liste2.Sort;
 listet:=tstringlist.Create;
 listet.Sorted:=false;
 listet.Duplicates:=dupignore;

end;

end.
//DFM dosyası

Kod: Tümünü seç

object Form1: TForm1
  Left = 192
  Top = 107
  Width = 696
  Height = 480
  Caption = 'Form1'
  Color = clBtnFace
  Font.Charset = DEFAULT_CHARSET
  Font.Color = clWindowText
  Font.Height = -11
  Font.Name = 'MS Sans Serif'
  Font.Style = []
  OldCreateOrder = False
  OnCreate = FormCreate
  PixelsPerInch = 96
  TextHeight = 13
  object Label1: TLabel
    Left = 16
    Top = 24
    Width = 32
    Height = 13
    Caption = 'Label1'
  end
  object Label2: TLabel
    Left = 56
    Top = 144
    Width = 32
    Height = 13
    Caption = 'Label2'
  end
  object Label3: TLabel
    Left = 16
    Top = 72
    Width = 32
    Height = 13
    Caption = 'Label3'
  end
  object Edit1: TEdit
    Left = 56
    Top = 24
    Width = 529
    Height = 21
    TabOrder = 0
    Text = 'bug'#252'n okula sa'#287'daki yoldan gittim'
  end
  object Edit2: TEdit
    Left = 56
    Top = 64
    Width = 529
    Height = 21
    TabOrder = 1
    Text = 'okula sa'#287'daki yol '#252'zerinden gittim'
  end
  object Button1: TButton
    Left = 56
    Top = 104
    Width = 75
    Height = 25
    Caption = 'Button1'
    TabOrder = 2
    OnClick = Button1Click
  end
  object Memo1: TMemo
    Left = 88
    Top = 160
    Width = 185
    Height = 281
    TabOrder = 3
  end
  object Memo2: TMemo
    Left = 280
    Top = 160
    Width = 185
    Height = 281
    TabOrder = 4
  end
  object Memo3: TMemo
    Left = 472
    Top = 160
    Width = 185
    Height = 281
    TabOrder = 5
  end
end


Öğrenmek ve öğretmek, akıntıya karşı yüzmek gibidir ilerleyemediğiniz taktirde gerilersiniz.

Kullanıcı avatarı
uğur alkan
Üye
Mesajlar: 227
Kayıt: 29 Ağu 2004 03:49
Konum: Istanbul

Mesaj gönderen uğur alkan » 07 Mar 2005 08:20

sadece bir fikir ;

kelimelerden ziyade kelime köklerini ve ekleri karşılaştırsan
cümlenin içeriği eklerde belli oluyor.

gittim

kök:git ,aynı eylemin birinci cümlede olup olamadıgına baksan
ek ;tim ,zaman ekinide böylece kıyaslayabilirsin....

bugün okula soldaki yoldan gittim
bugün okuluma sol taraftaki yoldan gittim
Bazen sert rüzgarlar eser başını öne eğmekten asla korkma

Kullanıcı avatarı
Asri
Kıdemli Üye
Mesajlar: 767
Kayıt: 16 Eyl 2003 08:54
Konum: istanbul

Mesaj gönderen Asri » 07 Mar 2005 12:36

coderlord yazdı:Bence bir dil bilimci ve istatistikçi ile beraber çalışmanız faydalı olacaktır. Çok uzman bir çözüm beklemediğinizi görüyorum. Bir istatistikçi bu tür benzerlikleri hesaplamanıza yardımcı olacak bir istatistik formülü kolayca verebilir.
@coderlord dediği gibi bu işlem için bir dil bilimciyle yada Türkçe yi iyi bilen biri ile çalışmak lazım. Ben edebiyattan kalmış adamım. Detayı Beni zorlar :)

Ama kaçaba bişeyler yapılabilir tabiki. Böyle doğruluk daha da kesinleşmiş olur.
Öğrenmek ve öğretmek, akıntıya karşı yüzmek gibidir ilerleyemediğiniz taktirde gerilersiniz.

Delhici
Üye
Mesajlar: 175
Kayıt: 20 Eyl 2003 08:04

Mesaj gönderen Delhici » 07 Mar 2005 04:54

Asri arkadaşım;
Değişik bir konu hakkında çalışmaktasın. Bu söylediğin işlemi bilgisayara yaptırmak oldukça güzel bir düşünce. Ancak bilgisayar yazılan cümlede ne anlatıldığını anlamaz. Sadece sen ne anlatmak istiyorsan onu kodlarsın. Ayrıca imla kurallarını sisteme tam olarak girebilirsin.
1. cümle "Ali okula gider, top oynar."
1. cümle "Ali top da oynar okuluna da gider."
Bu iki cümle birbirinden farklıdır. Bu ikiside aynı anlama gelmez. Bilgisayara bunların aynı manaya geldiğini programlayabilirsin.Ama yanlış olacaktır. Yani makina doğru şey anlamış olacak ama yanlış anlatacaktır. de,da,ki eklerinin nerde kullanılacağını programa tanıtmalısın. Özlem, yüklem tümleç,nesne gibi kavramları program da belirtmeli ve nerde kullanıldıklarını yazmalısın. Proceviri diye bir sözlük programı var ve onu yazan kişilerde bunlara dikkat etmeden programı yazdıklarından imlayı bir türlü tutturamamışlar. Ama yinede incelemeni öneririm..

İyi çalışmalar
http://www.bargem.info
Yaşıyorum..... İnadına değil yaptıklarım. Herşey istediğim için oluyor. İstediğim için türkü dinliyorum. İstediğim için çalışıyorum. İstediğim için yaşıyorum ve istediğim için seni seviyorum...

Kullanıcı avatarı
Asri
Kıdemli Üye
Mesajlar: 767
Kayıt: 16 Eyl 2003 08:54
Konum: istanbul

Mesaj gönderen Asri » 07 Mar 2005 05:08

Şu aşamada aslında programın cümlede ne dediğini anlama ya gerek yok. Önemli olan iki cümle arasındaki benzerliğin olup olamdığıdır.

if str1=str2 then iki cümle eşit
else iki cümle farklı

bu iki cümle eşitmi mantığının en temel hali. benim yapmak istediğim ve kısmende başarılı olduğuma inandığım nokta iki cümlede,
1- kelime dizilişleri aynı sırada olmasada
2- kelimeler bire bir aynı olmasada
3- arada bağlaçlar yada diğer cümlede olmayan kelimeler olsada

iki cümlenin bir birine benzerliklerini oranlayabilmek. Kurmuş olduğum bu mantığı sözlük programına uyguladım.

sıfır data ya import yaptım. 37960 satırlık bir text dosyasını iki cümle karşılaştırması %55 lik doğruluk payı esas alınarak import işlemi gereçekleştirdiğimde 30409 kayıt yapıldığını gördüm.

programın kısmende olsa yapayzekası anlamları (Bir birine benzeyen cümleleri) yakın olanları eleyebiliyor.

ekler- bağlaçlar fiiler işini girilerek bu mantık geliştirilirse sanak sohbet gibi işler içinde kullanılabilir.

iyi çalışmalar.
Öğrenmek ve öğretmek, akıntıya karşı yüzmek gibidir ilerleyemediğiniz taktirde gerilersiniz.

Kullanıcı avatarı
Asri
Kıdemli Üye
Mesajlar: 767
Kayıt: 16 Eyl 2003 08:54
Konum: istanbul

Mesaj gönderen Asri » 20 Mar 2005 06:47

viewtopic.php?p=41931#41931

Kodların son halini makaleler bölümüne gönderdim.

Program artık daha kararlı çalışıyor.
Öğrenmek ve öğretmek, akıntıya karşı yüzmek gibidir ilerleyemediğiniz taktirde gerilersiniz.

Cevapla