Tweetleri İşlemeden Önce PreProcess Methodu İle Temizlemek

Merhabalar arkadaşlar. Bu yazımda Twitter’dan çekilen tweetleri işlemeden önce nasıl daha iyi işlenebilecek hale getiririz biraz değinmeye çalışacağım. Bunu yapmadan önce neden böyle bir şeye ihtiyacımız var isterseniz biraz bundan bahsedelim.

NLP’nin bir çok konusunda insanlar tarafından bir konu üzerine bir yerlere topluca yazılan metinlerden anlamlar çıkarmak vardır. Bu konunun özelinde atılan tweetleri anlamlandırmayı sayabiliriz. Genel itibariyle içinde geçen kelimelere göre gruplandırılmış bu tweetlerden anlamlı data üretmek için çeşitli algoritmalar ile tweetler ile “Label” dediğimiz sonuç ilişkisi bulunmaya çalışılır. Bunlara en güzel örnek olarak bir ürün altına atılan yorumların olumlu yorumlar mı?, yoksa olumsuz yorumlar mı? olduğunun tahminlenmesi verilebilir. Fakat bunu yaparken bazı problemlerle karşılaşırız. Özellikle bu işi kişilerin attığı tweetler ile yapıyorsak tahmin edebileceğiniz gibi en zorlanacağımız işlerin başında kişilerin tweet atarken yazım kurallarına dikkat etmemesi ve tepkilerini dile getirmek için kelimelerdeki harf sayılarını değiştirmesi gelmektedir.

Ne demeye çalıştığımı örnek üzerinden anlatalım. Örnek olarak bir tweet alalım.

@john Prayers, For Nepalll!!! http://t.co/XYZ #Nepal #Earthquake

Bu tweet gibi birçok tweet ile işlem yaparak bir ilişki yakalamaya çalıştığınızı varsayalım. Öncelikle bu cümlede geçen kelimeleri saptamamız gerekecek. Bunu yaparken ilk işimiz noktalama işaretlerinden kurtulmak olmalıdır. Çünkü noktalama işaretlerinden temizlenmemiş bir tweetin kelimelerini düzgün bir şekilde analiz etmemiz mümkün olmayacaktır. Nepal ve Nepal! kelimeleri iki farklı kelime olarak karşımıza çıkacaktır. Bu da işimizi zorlaştıran bir faktör.

Tweetleri temizlemek için kullanacağımız metod:

Bu metodun satırlarını açıklayarak ilerleyelim. Öncelikle “punctuation” yani noktalama işaretlerinden kurtulmalıyız. Bu sayede kelimeleri daha iyi analiz edebileceğiz. Metoda iletilen tweet noktalama işaretlerinden arındırıldıktan sonra işleme devam ediyoruz. Örnek tweetimiz bu aşamadan sonra şu şekilde karşımıza çıkıyor.

@john Prayers For Nepalll http://t.co/XYZ #Nepal #Earthquake

Kelimeler ile bu tweeti ayrıştırırsak elimizde;
[@john, Prayers, For, Nepalll, http://t.co/XYZ, #Nepal, #Earthquake] bulunuyor.

@john, bizim için bir feature olamaz çünkü bir kullanıcıya hitap ediliyor.

Prayers, kelime olarak işimize yarayabilir.

For, İngilizce’de bolca kullanılan ve tek başına bir çıkarım yapmak için bize yardımcı olmayacak bir kelime.

Nepalll, ise aslında Nepal fakat kullanıcı tarafından vurgulanmak istendiği için Nepalll şeklinde yazılmış. Yani bir başka tweette Nepal, bir diğerinde Nepall olarak yazılmış olsa toplam 3 farklı kelimeye sahip olacağız fakat bu bizim tahminlerimizi kötüleştirecek çünkü aslında hepsi aynı kelime

Sonrasında ise bir link, bizim için feature olabilir mi? Tamamen business logic ile alakalı fakat, orada bir link olduğunu bilmek bizim işimize yarayabilir

Son iki kelime ise hashtag’lerden oluşuyor

Ve sonra tüm harfleri küçük harf olarak değiştiriyoruz ki, işlem yaparken büyük harf küçük harf farklılıkları ile uğraşmayalım. Şimdi metodumuz üzerinden devam edelim. Bu aşamadan sonra öncelikle linklerden kurtuluyoruz. Bu sayede farklı linkler bizim tahminlememizi etkilemeyecek. Bunu yaparken “Regular Expressions” kullanılıyor. Regexp olarak kısaltabileceğimiz bu yöntem aslında belli bir arama pattern’ını açıklayan bir olgu ve kendine has bir gösterimi mevcut. Regexp ile belli kelimeleri yakalayarak aslında linklerden kurtulmaya çalışacağız. Kodun 10. ve 11. satırında regexp ile linklerden kurtuluyoruz. Linkleri “URL” şeklinde değiştirerek bir feature yakalayabilirdik. Bu tamamen sizin üzerinde çalıştığınız işe bağlı olarak değişecektir. Ben burada linklerden tamamen kurtuldum.

Bu işlemden sonra örnek Tweet;

@john prayers for nepalll #nepal #earthquake

Daha sonra kullanıcı referanslarını temizliyoruz. Bu sayede kullanıcı etiketlemeleri veya hitaplardan kurtulmuş olacağız. 13. satırdaki işlem sonunda örnek Tweet;

prayers for nepalll #nepal #earthquake

Username’lerden kurtulduktan sonra artık hashtaglerden kurtulma vakti fakat tahmin edersiniz ki bir tweet atarken konuyla alakalı bir kaç hashtag eklemek hemen hemen herkesin yaptığı bir eylemdir. Hatta çok alakalı hashtag’leri seçmek için zaman harcarız. Bu yüzden aslında hashtag’ler oldukça önemli, o yüzden hashtag’lerden kurtulmayacağız, sadece ‘#’ karakterini sileceğiz. 15. satırda ise bu işlemi yapacağız. Örnek tweet;

prayers for nepalll nepal earthquake

Tweetimiz son halinde oldukça temiz ve içerik hakkında net bilgi veriyor. Fakat bir problemimiz var. “nepalll” ve “nepal” kelimeleri aynı olmasına rağmen şu halde farklı kelimeler olarak işleme alınacak. Bu sebepten tekrarlanan harfleri silmemiz gerekecek. 17. satırda ise bu işlemi yapacağız. Bu işlemin sonunda örnek Tweet;

prayers for nepal nepal earthquake

Son satırda ise temizlenmiş olarak bize iletilen tweeti geri dönmemiz gerekiyor. Bunu yaparken ise bir işlem daha yapıyoruz. O da “Stopwords” denen, bize tek başına bir anlam ifade etmeyen, hiçbir şekilde bir feature olamayacak kelimeleri de ilgili tweetlerden silmemiz. Son satırdaki kontrol ile bunu da sağlıyoruz. Bu işlem sonunda ise metodun döneceği tweeti ilk haliyle kıyaslarsak;

@john Prayers, For Nepalll!!! http://t.co/XYZ #Nepal #Earthquake

prayers nepal nepal earthquake

Burada yine kendi iş mantığınıza göre tekrar eden kelimeler için ayrı işlemler yapabiliriz. Ben bu aşamadan tekrar eden kelimelerin ağırlığını artırarak kendi modelimi yönlendirmeyi tercih ediyorum. Fakat dediğim gibi her şey modelinizi nasıl şekillendirmek istediğinize göre değişir ve tamamen size bağlıdır.

Bu şekilde tüm tweetleri asıl işlemleri yapmadan önce biraz temizlememiz gerekiyor. Bu bizim tahminlerimizi kolaylaştıracak oldukça önemli bir adım olacaktır. Elimizdeki dataset’te bulunan tüm tweetler için bu işlemi uygulamalıyız.

Tüm bu işlemler elbette bir tweetin temizlenmesi için yeterli olmayacaktır. Daha farklı işlemleri de uygulayabiliriz. Örnek tweet baz alınırsa eğer, “prayers” kelimesi ile bir başka tweette bulunan “prayer” kelimesi aslında aynı şeyi ifade ediyor olmalı. Bu yüzden kelimelerin köklerine inmemiz daha iyi sonuç almamızı sağlayabilir. Ve bu örnekler çeşitlendirilebilir.

Ne kadar iyi “Text Preprocessing”, o kadar iyi tahmin demektir!

Okuduğunuz için teşekkürler arkadaşlar! Bir sonraki yazımda görüşmek üzere!

Full-time developer, and lifelong learner. Loves to learn and experience. Motto: Stay Hungry, Stay Foolish | @anilemrah_

Get the Medium app

A button that says 'Download on the App Store', and if clicked it will lead you to the iOS App store
A button that says 'Get it on, Google Play', and if clicked it will lead you to the Google Play store