• 02-01-2010, 16:18:08
    #10
    batinduz adlı üyeden alıntı: mesajı görüntüle
    Merhaba, bir scriptimde kullanmak için makale özgünleştirici yapmayı düşünüyorum.
    Temel mantık olarak gelen makaledeki kelimeleri boşluğa göre ayırtıp eş anlamlılarını veritabanından çektirerek yazdırmak.
    Ama kullanılan ekleri bulamayacağından sorun olacağını düşünüyorum.
    Türkçe kelimelerdeki ekleri belirli bir şeye göre eklerinden ayrabilen bir fonksiyon falan var mı?
    Bu konuyla ilgili başka önerileriniz varsa yazın tartışalım.
    açıkçası bu konu sadece kod bilmeye değil , Türkçe dilbilgisinede ihtiyaç duruyor.

    fikir vermek bakımından yazılacak fonksiyonun.

    1.özel isimler
    2. ünlü ünsüz benzeşme ve yumuşamalarını ayırt edebilmesi.
    3. database deki tabloda bir çok özel ismin ve kurallara aykırı kelimenin isim çekimlerine göre tanımlanması
    4. algoritmanın ise cümlenin bitişine göre isim çekimlerini anlayabilmesi gerekmektedir.

    genel kelimeler değiştirile bilir mesela tıp medikal vs gibi ama toptan bir cümlenin yazımı imkansız gibi birşey . örnek olarak google translate bile %100 çalışmıyor.
  • 02-01-2010, 21:19:12
    #11
    Kimlik doğrulama veya yönetimden onay bekliyor.
    Şu eş anlamlılarla değiştirme olayı için php.net'ten bi örnek: http://www.php.net/manual/tr/function.preg-replace.php Örnek 2 - preg_replace() ile indisli dizi kullanımı
  • 04-06-2010, 14:38:56
    #12
    Yalnızca yüksek sıklıkta görülenlere odaklanarak dişe dokunur bir miktarda değişiklik sağlanabilir.

    Bunun için önce elimizdeki yazıları sözcük grupları şeklinde listeleriz, sonra bunları görünme sıklıklarına göre listeleriz, ve listenin tepesine neleri değiştirebiliriz diye bakarız, ve bunların değişik biçimlerini ilk biçimleri ile birlikte karşılıklı bir tabloya alırız.

    İlk aşama için bir örnek:

    Alıntı
    $sorgu="SELECT y.yazi FROM yazi y LEFT JOIN varlikyazi vy ON vy.yazino=y.no LEFT JOIN varlik v ON v.no=vy.varlikno WHERE v.sinif=1 LIMIT 1000";
    $sonuc=mysql_query($sorgu);
    while($str=mysql_fetch_row($sonuc)) {
    $soz=explode(" ",preg_replace("/([\.:,;\!\?])/"," $1",$str[0]));
    $adet=count($soz);
    for($i=0;$i<$adet;$i++) {
    if ( ! preg_match("/[[unct:] ]/",$soz[$i].$soz[$i+1]) ) echo trim($soz[$i])." ".trim($soz[$i+1])."\n";
    } // for i
    } // while str
    Burada karışık bir veritabanından yalnızca belli bir tür yazıları çektik, noktalama işaretlerinin kimilerini ayıkladık, ve ikişerli olarak yazdırdık. Üç sözcüklü sözcük öbekleri olarak yazdırmak için ilgili kısma $soz[$i+2] eklemek, tek sözcük içinse $soz[$i+1]'i çıkarmak yeterli.

    Bu arada bu işlemleri bir unix komut satırında yapıyoruz. Bu yukardaki kodu uygun veritabanı açma kapama ve verilerle sizin elinizdeki verilere uygun bir sorgu ile çalışacak şekilde getirdikten, ve verial.php gibi bir adla kaydettikten sonra, unix/linux komut satırında çağırıyoruz:

    #php verial.php

    Bir sürü sözcük çifti göreceğiz. Sıralayalım:

    #php verial.php|sort

    Sıralı listede ardışık olarak tekrarlananları gruplayıp başına kaç kez yinelendiğini yazalım:

    #php verial.php|sort|uniq -c

    Şimdi de son olarak başlarındaki bu çokluk bilgisine göre bir daha (sort -n) ve büyük sayılar yukarda olacak şekilde (sort -r) sıralayalım:

    #php verial.php|sort|uniq -c|sort -nr

    Evet... Şimdi elimizde bir liste var. En çok görülen sözcük çiftleri (2-gram'lar) yukarıda. Bu listeyi inceleyip, yanlarına tab ile ayrılmış biçimde yazıyoruz...

    Örneğin:

    7683 ya da | veya
    2417 pek çok | birçok
    645 her sene | her yıl
    ...
    gibi... '|' işaretini "tab" karakteri yerine kullandım. Önerim olabildiğince daha Türkçe ve doğru sözcükler kullanmak ki, bu işlevi kullandığımız forumlar daha bir standart olsun, ve bilgisayarlarca rahat işlnebilsin ileride. Örneğin önceki sayfadaki örnekte "elle" sözcüğü "manuel" olarak dönüştürülmüştü. Bunun tersini öneriyorum: "Fakat", "lakin" ve "ama" gibi yabancı sözcüklerin "ancak" gibi Türkçe olanları ile değiştirilmesini.

    Bu arada eş anlam kullanımı yüzünden tekli sözcüklerin dönüştürülmesini önermiyorum. 2-gram veya 3-gram'larla çalışmak anlam sapmasını engelleyecektir. Kısaca, örneğin tüm "numara"ları "no" yapmaya kalkışan bir program, "yüz numara"yı da "yüz no" yapacağından insanların gülmekten altına yapmasına yol açabilir...

    Değişiklikleri yapmaksa çok kolay:

    Bir veritabanından bunları yüklüyoruz:

    Alıntı
    $sorgu="SELECT ilkbicimi,digerbicimi FROM karsiliklartablosu LIMIT 100;";
    $sonuc=mysql_query($sorgu);
    $i=0;
    $sozilk=array();
    $soziki=array();
    while ($sz=mysql_fetch_row($sonuc)) {
    $sozilk[$i]="/ ".$sz[0]." /";
    $soziki[$i]=$sz[1];
    $i++;
    } // while
    Burada sozilk dizisini oluştururken sağına soluna boşluk koymayı ve regexp olduğunu belirtmek için başına ve sonuna '/' koymayı unutmuyoruz.

    Devam edelim... Şimdi değişecek yazıdaki sözcüklerden noktalama işaretlerini uzaklaştıralım, regexp ile yazıyı bu az önce oluşturduğumuz dizileri kullanarak değiştirelim, ve noktalama işaretlerini yeniden sözcüklere bitiştirelim:

    Alıntı
    $yazi=preg_replace("/([\.,:;\?\!)/"," $1",$yazi);
    $yazi=preg_replace($sozilk,$soziki,$yazi);
    $yazi=preg_replace("/( [\.,:;\?\!)/","$1",$yazi);
    Evet, hepsi bu. preg_replace parametre olarak dizi alabiliyor. Bu işimizi kolaylaştırdı... Bu arada noktalama işaretlerinden kimisini bu örneklerde atladım, uygulamada tüm özel durumları düşünmek gerek. Bu yukardakiler yalnızca örnek kod parçacıkları.

    İşe yaraması ve Türkçe özürlü forumların bu programlama yollarıyla daha düzgün olması dileğiyle.

    (not: bu yazıyı şimdi forumun şu üç satırlık form boşluğuna yazıyorum; kimi yazım hataları olabilir. Kontrol edilmeden denenmesini önermiyorum. İlk kod örneğinde dil çıkaran işaretin bulunduğu yerde "[ [ : p u n c t : ] ]" yazıyor boşluklar olmadan. İşte regexp'in böyle bir tehlikesi var, özel durumları değiştirmemeye dikkat etmeli.)
  • 18-08-2010, 11:17:20
    #13
    Aslında zor birşey değil, bu tamamen veritabanına nekadar karşılık girmenizle alakalı bir durum, bence dil bilgisi ile alakası yok!! Neden yok derseniz, Türkçe çok zengin bir dil ve bu replace işlemini dil bilgisi kurallarına göre yaparsanız büyük yanılgılar ve hatalar havuzunda bulursunuz kendinizi... Öyleki dilimizde her kelime her farklı cümlede farklı anlam ifade edebilmektedir...Bunu sadece kelimelere gelen ekler ile çözemezsiniz...Peki napılabilir...Tabiki İstatistiki düşünülmelidir...
    Bir defa makaleyi bütünüyle özgünleştiremeyiz otomatik olarak, bir defa bunu kabul etmek gerek..Az biraz ucundan kicindan özgünlestirebiliriz..Bunu nasıl yaparız...
    Birebir eş anlamlı kelimeler ve deyimleri replace ederek..
    Beyaz kelimesinin eş anlamlısı "AK" tır evet ama bakkala "ak peynir almaya gidiyorum" diyemeyiz...
    Kendimize bir veritabanı olusturabiliriz: ve bu kelimeler makalenin anlam bütünlüğünü bozmaması için her cümlede aynı anlamı verecek kelimeler olmalı,
    Yani kelimelerimiz birebir eş anlamlı olmalı !!!! böyle bir veritabanı hazırlamak zor değil; hemen size ufak bir örnek yazayım...

    sıkça (oldukça sık)
    hediye (armağan)
    fayda (yarar)
    lider (önder)
    oluşur (meydana gelir)
    ortaya çıkan (meydana gelen)
    ortaya çıkar (meydana gelir)
    başlıca (temel olarak)
    az (seyrek)
    güçlü (kuvvetli)
    milletlerarası (uluslar arası)

    İstatistik dedim, istatistik mükemmel bir bilimdir..hayatımın anlamı, tecrübelerimin sebebidir..

    böyle bir program yazdığımızı varsayalım..
    Access veritabanına bağlanacak, en çok kullanılan kelimeleri tespit edecek o kelimeler için veritabanında bir karşılık yok ise olmayanlar için kullanıcadan birebir eş anlamını girmesini isteyecek...Yarı yapay zeka diyebiliriz.. )) Kendişsi öğrenerek devam edecek yani..Veritabanı genişleyecek..

    Ve Replace butonuna basıldığında değişen cümleleri değişmiş haliyle önünüze getirecek ve her birine ayrı ayrı onay isteyecek..
    Neden mi?
    Tamam lider kelimesinin hemen hemen tamamına önder kelimesini yerleştirebilirsiniz ama önder'in yerine heryerde lider koyamazsınız.. "Ulu önder Atatürk" yerine ulu lider atatürk derseniz komik olur..
    İşte istatistik de burda devreye girer..

    İşin özü bu işlemin Türkçe dilbilgisiyle alakası yoktur kanımca, olduğunu düşünenlerde bu projede başarısız olurlar...

    Ha dilimiz ingilizce olsaydı o başka...Dünyanın en kolay dili o...
  • 27-05-2014, 00:43:17
    #14
    Google'da bazen Türkçe arama yaptığınızda İngilizce eşanlamlısıyla da sonuçlar geldiğini görmüş olabilirsiniz. Bunun gibi İngilizce arama yaptığınızda Türkçe sonuçlar da gelebiliyor. Google translation'da eşanlamlı kelimeler veritabanında bulunduğu için makale özgünleştirme programlarıyla yaptığınız değişikliklere rağmen siteniz bir süre sonra google'ın filtresine takılabilir. Dolayısıyla http://berr.in/ozgunlestirici/index.php adresindeki makale özgünleştiricide olduğu gibi çoğunlukla Türk lehçelerinden kelimelerle özgünleştirme yaparsanız google'ın eşanlamlı sözcüklerle karşılaştırma yapmasına engel olmanız mümkün olabilir.
  • 28-05-2014, 11:32:47
    #15
    Bu tarz bir yazılım aslında 1 kişi ila değil'de birden fazla kişi ila yapılabilir. Benim bakış açım böyle bir yazılımı yapabilmek için özgünleştirilecek kelimenin bir veya birden fazla karşılığı olabilmeli zaten arkadaşlar çok güzel örnek vermişler.

    Yukarıda ki arkadaşımızın örnek verdiği gibi ;

    sıkça (oldukça sık)
    hediye (armağan)
    fayda (yarar)
    lider (önder)
    oluşur (meydana gelir)
    ortaya çıkan (meydana gelen)
    ortaya çıkar (meydana gelir)
    başlıca (temel olarak)
    az (seyrek)
    güçlü (kuvvetli)
    milletlerarası (uluslar arası)


    Bu biraz yapay zeka gibi birşey yapay zekayı yaratacak olan ise bizleriz. Yoksa hiç bir programlama dili zeki değil hiç biride bunu yapamaz. IBM yıllardır insan beynine en yakın dili geliştirmeye çalışıyor. Sonuç = 0..
  • 28-05-2014, 14:30:41
    #16
    konu hortlatma vol 654132418574