• DİKKAT

    DOSYA İndirmek/Yüklemek için ÜCRETLİ ALTIN ÜYELİK Gereklidir!
    Altın Üyelik Hakkında Bilgi

farklı dildeki cümleleri ayırmak

  • Konbuyu başlatan Konbuyu başlatan m__uzun
  • Başlangıç tarihi Başlangıç tarihi
Katılım
20 Haziran 2015
Mesajlar
36
Excel Vers. ve Dili
office 2010 türkçe
selam arkadaşlar
a sütununda iki farklı dilde (Almanca Türkçe) ve aralarında nokta bulunmayan cümleler var.

cümleyi veya kelimeleri analiz edip; Almanca kelimeden sonra Türkçe kelime varsa araya nokta koyacak veya; hücrenin karşısında b sütununa türkçe cümleyi ayıracak bir makro yapılabilirmi
 
Merhaba,
Makro kodlarının dil bilgisi yoktur. Ancak Office Programlarının "Gözden Geçir" Sekmesinde Yazım ve Dil Denetleme menüleri mevcuttur.
Farklı dillere ait kelimeler aynı sütunda olsalar bile, aralarında (birden fazla boşluk, özel noktalama işaretleri, tab aralığı) herhangi bir belirgin işaret veya karakter oluşmuşsa, belki makrolarla birşeyler yapılabilir. Bunun dışında, makro kodları kelimeleri, (hangi dilden olursa olsun), string (yazı kümesi) olarak algılarlar.
 
aralarında noktalama yok hocam maalesef. benimde yapmak istediğim aralarına herhangi noktalama işareti getirip ayırmak. cümledeki kelimeleri metni stünlara ayırma mantığıyla ayırıp her kelimeyi analiz ederek (http://whatlanguageisthis.com) Almanca'dan sonra Türkçe kelime varsa Almanca kelimeye nokta eklenebilir. bu site kelimenin hangi dile ait olduğunu veriyor fakat en az birkaç kelime girmek gerekiyor.
 
selam arkadaşlar
a sütununda iki farklı dilde (Almanca Türkçe) ve aralarında nokta bulunmayan cümleler var.

cümleyi veya kelimeleri analiz edip; Almanca kelimeden sonra Türkçe kelime varsa araya nokta koyacak veya; hücrenin karşısında b sütununa türkçe cümleyi ayıracak bir makro yapılabilirmi

5-10 satırlık örnek bir dosya ekler misiniz. Örnek dosyada verilen örnek cümlelere göre almak istediğiniz sonucuda yazınız.
 
Şu an için bu kod kısmi olarak işinizi görecektir.
Daha detaylı bir çalışma düşünüyorum.

TDK sözlükdeki kelimeler ilk kelimeden itibaren aranır. Kelime tdk listesine uyuyor ise o kelimeye kadar olanlar almanca , o ve sonrası Türkçe kabul edilebilir.

Kod:
Sub ayir()
   Set shcumle = Sheets("Cumle")
   sonsatir = shcumle.Cells(Rows.Count, "A").End(3).Row
   For i = 1 To sonsatir
     cumle = shcumle.Cells(i, "A").Value
     basla = 0
     For j = 1 To Len(cumle)
         harf = Mid(cumle, j, 1)
         If harf = " " Then basla = j + 1
         If basla <> 0 And harf = "ü" Or harf = "ğ" Or harf = "ı" Or harf = "ş" Or harf = "ç" Or harf = "ö" Then
            shcumle.Cells(i, "C").Value = Mid(cumle, 1, basla - 1)
            shcumle.Cells(i, "D").Value = Mid(cumle, basla, Len(cumle))
         End If
     Next j
     
   Next i
End Sub
 
Şu an için bu kod kısmi olarak işinizi görecektir.
Daha detaylı bir çalışma düşünüyorum.

TDK sözlükdeki kelimeler ilk kelimeden itibaren aranır. Kelime tdk listesine uyuyor ise o kelimeye kadar olanlar almanca , o ve sonrası Türkçe kabul edilebilir.

Kod:
Sub ayir()
   Set shcumle = Sheets("Cumle")
   sonsatir = shcumle.Cells(Rows.Count, "A").End(3).Row
   For i = 1 To sonsatir
     cumle = shcumle.Cells(i, "A").Value
     basla = 0
     For j = 1 To Len(cumle)
         harf = Mid(cumle, j, 1)
         If harf = " " Then basla = j + 1
         If basla <> 0 And harf = "ü" Or harf = "ğ" Or harf = "ı" Or harf = "ş" Or harf = "ç" Or harf = "ö" Then
            shcumle.Cells(i, "C").Value = Mid(cumle, 1, basla - 1)
            shcumle.Cells(i, "D").Value = Mid(cumle, basla, Len(cumle))
         End If
     Next j
     
   Next i
End Sub

Hocam teşekkürler elinize emeğinize sağlık şimdi deneme imkanım yok yarın ilk işim bu olacak
 
TDK nın sözlüğü ücretsiz dağıtılamıyor. Bu nedenle programın yüksek oranda cümle ayırabilmesi için liste sayfasına Türkçe sözlüğü, küçük harfler ile ve uzun kelimeler üste gelecek şekilde sıralamanız gerekmektedir.

TDK nın olmasa da Türkçe sözlüğü wikipedia da ücretsiz olarak bulabilirsiniz.

Ben örnek olması açısından 10 karakterli kelimeleri ekledim.

Programın çalışma mantığı şu şekilde.
* kaynak cümleyi kelimelere ayırıyor.
* kelimeleri sözlükteki kelimeler ile karşılaştırıyor.
- kelime sözlükteki kelimeden büyük ise kelimeyi sondan birer azaltarak kök kelimeyi bulmaya çalışıyor.
Cümlede "iyiyim" kelimesi sözlükte yok, ancak iyi sözlükte olduğu için bu kelimeyi eşleştirebiliyor.

*Kelime sözlükte bulunduğunda cümleyi bölüyor.

** Bazı kök kelimeler her iki dilde de olabiliyor.
"gut" "bin" "mor" gibi. Bu durumda bu kelimeleri Türkçe sözlükten silmek gerekiyor.

Program %100 sonuç vermez, ancak büyük oranda ayırma yapacaktır diye düşünüyorum.

Bazı ortak kelimeler sözlükten çıkarılmış olarak yapılan örnek çalışma
Bu çalışmada lan,gut,telefon,morgen deki mor, bin kelimeleri ortak olduğu için düzgün ayıramadı.
Bu kelimeleri Türkçe sözlükten silerseniz düzgün ayıracaktır. Bu durumda gerçekte olması gereken "mor güzel bir renktir" cümlesini doğru ayırmayacaktır.

g9q95R.jpg


Kod:
Dim sozluk(100000) As String
Dim sozluksay As Long

Sub menu()
   Application.ScreenUpdating = False
   Application.DisplayAlerts = False
   Range("C:D").Clear
   
   Call sozluk_yukle
   Call ayir
   Application.ScreenUpdating = True
   Application.DisplayAlerts = True
End Sub

Sub ayir()
   Set shcumle = Sheets("Cumle")
   sonsatir = shcumle.Cells(Rows.Count, "A").End(3).Row
   For i = 1 To sonsatir
     cumle = shcumle.Cells(i, "A").Value
     buldu = False
     If cumle = "" Then GoTo son
     basla = 0
     kelimelist = Split(cumle, " ")
     For j = 1 To UBound(kelimelist)
        kelime = kelimelist(j)
        If kelime = "adı" Then
          A = A
        End If
        
        For k = 1 To sozluksay
            sozkelime = sozluk(k)
            If sozkelime = "adı" Then
              A = A
            End If
            
            If Len(kelime) > Len(sozkelime) Then
              For i1 = 1 To Len(kelime)
                  If Mid(kelime, 1, Len(kelime) - i1) = sozkelime Then
                     buldu = True
                     GoTo son
                  End If
              Next
            End If
            
            If Len(kelime) = Len(sozkelime) Then
               If kelime = sozkelime Then
                    buldu = True
                    GoTo son
               End If
            End If
           
        Next k
     
     Next j
   
son:
    If buldu Then
        shcumle.Cells(i, "C").Value = Mid(cumle, 1, InStr(cumle, kelime) - 1)
        shcumle.Cells(i, "D").Value = Mid(cumle, InStr(cumle, kelime), Len(cumle))
    End If
    
   Next i
End Sub

Sub sozluk_yukle()
   Set shliste = Sheets("Liste")
   sonsatir = shliste.Cells(Rows.Count, "A").End(3).Row
   For i = 1 To 100000
     sozluk(i) = ""
   Next i
   
   For i = 1 To sonsatir
     sozluksay = i
     sozluk(i) = shliste.Cells(i, "A").Value
   Next i
End Sub

Sub ayir1()
   Set shcumle = Sheets("Cumle")
   sonsatir = shcumle.Cells(Rows.Count, "A").End(3).Row
   For i = 1 To sonsatir
     cumle = shcumle.Cells(i, "A").Value
     basla = 0
     For j = 1 To Len(cumle)
         harf = Mid(cumle, j, 1)
         If harf = " " Then basla = j
         If basla <> 0 And harf = "ü" Or harf = "ğ" Or harf = "ı" Or harf = "ş" Or harf = "ç" Or harf = "ö" Then
            shcumle.Cells(i, "C").Value = Mid(cumle, 1, basla - 1)
            shcumle.Cells(i, "D").Value = Mid(cumle, basla + 1, Len(cumle))
            GoTo son
         End If
     Next j
son:
   Next i
End Sub
 

Ekli dosyalar

Son düzenleme:
çok sağolun hocam emek vermişsiniz elinize sağlık istediğim gibi çalışıyor saygılar
 
Geri
Üst