{"id":23715020,"url":"https://github.com/enescidem/twitter-topic-modeling","last_synced_at":"2026-02-10T01:30:19.255Z","repository":{"id":215606595,"uuid":"739333558","full_name":"enescidem/Twitter-Topic-Modeling","owner":"enescidem","description":" Topic modeling is an unsupervised method to identify topics in text. This project analyzes tweets from prominent Turkish accounts to uncover underlying themes in their shared content.","archived":false,"fork":false,"pushed_at":"2024-12-13T07:23:02.000Z","size":1673,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2024-12-30T20:52:01.438Z","etag":null,"topics":["data","data-science","machine-learning","nlp","topic-modeling","twitter","x"],"latest_commit_sha":null,"homepage":"","language":"Jupyter Notebook","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/enescidem.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2024-01-05T10:11:13.000Z","updated_at":"2024-12-13T07:31:26.000Z","dependencies_parsed_at":"2024-12-30T20:52:03.437Z","dependency_job_id":"81a3c22c-2819-478f-a8f3-a7cfd651959c","html_url":"https://github.com/enescidem/Twitter-Topic-Modeling","commit_stats":null,"previous_names":["enescidem/ddi","enescidem/twitter-topic-modeling"],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/enescidem%2FTwitter-Topic-Modeling","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/enescidem%2FTwitter-Topic-Modeling/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/enescidem%2FTwitter-Topic-Modeling/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/enescidem%2FTwitter-Topic-Modeling/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/enescidem","download_url":"https://codeload.github.com/enescidem/Twitter-Topic-Modeling/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":239803537,"owners_count":19699694,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["data","data-science","machine-learning","nlp","topic-modeling","twitter","x"],"created_at":"2024-12-30T20:51:59.435Z","updated_at":"2026-02-10T01:30:19.195Z","avatar_url":"https://github.com/enescidem.png","language":"Jupyter Notebook","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Twitter Topic Modeling\n\n### Medium Links:\nEnglish: https://medium.com/@enescidem/twitter-x-topic-modeling-556d5aad5d0a\n\nTürkçe: https://medium.com/@enescidem/twitter-x-konu-modelleme-e713fea6224f\n\n---\n\n## Dünyada En Çok Etkileşime Giren Yerli Twitter Hesaplarının Topic Modeling'i\nTopic Modeling, bir metin belgesinde “topics(konular)” adı verilen kelime gruplarını bulmak için kullanılan denetimsiz(unsupervised) bir yaklaşımdır. Twitter(X)'dan alınmış olan farklı hesaplardan (BabalaTv, ProfDemirtas, haluklevent, pusholder, Darkwebhaber, yirmiucderece, solcugazete, OguzhanUgur, vekilince, GalatasaraySK, aykiricomtr ve RTErdogan) çekilen tweetler analiz edilip topiclerinin belirlenmesi.\n\u003cbr/\u003e\n## Kullanılan Kütüphaneler\n-Pandas\u003cbr/\u003e\n-NumPy\u003cbr/\u003e\n-Ntscrapper\u003cbr/\u003e\n-Matplotlibt\u003cbr/\u003e\n-Scikit-learn\u003cbr/\u003e\n\n# VERİ SETİ'NİN OLUŞTURULMASI\n\nDataseti Twitter(X)'dan çekilen ve istenilen hesaplardan atılmış tweetlerden oluşacaktır. Seçilen hesaplar BabalaTv, ProfDemirtas, haluklevent, pusholder, Darkwebhaber, yirmiucderece, solcugazete, OguzhanUgur, vekilince, GalatasaraySK, aykiricomtr ve RTErdogan ' dır. Bu hesaplardaki veriler ile model eğitileceği için bu verilerin düzgün veriler olması gerekir. Bu yüzden verilerin çekileceği twitter hesapları düzgün bir şekilde seçilmiştir.\n\n\u003cbr/\u003e\n\nBu twitter hesaplarının seçilme sebebi dünyada en çok etkileşime giren yerli Twitter(X) hesapları olmasıdır:\n\n![image](https://github.com/enescidem/Dogal_Dil_Isleme/assets/92892867/bb5cbcbc-70d6-4581-bcbf-9877be9488bc) \n![image](https://github.com/enescidem/Dogal_Dil_Isleme/assets/92892867/7866e486-5890-4a11-8daa-c07ebc7472d6)\n\n[https://dogruveri.com/wp-content/uploads/2023/03/Dunyada-en-cok-etkilesime-giren-yerli-Twitter-hesaplari-.png](https://dogruveri.com/dunyada-en-cok-etkilesime-giren-yerli-twitter-hesaplari/)\n\n\n\u003cbr/\u003e\nPythonda twitter'dan istenilen tweetleri çekebilmek için scraping işlemi yapan ntscraper kütüphanesi kullanılıyor. \u003cbr/\u003e\nhttps://github.com/zedeus/nitter?tab=readme-ov-file\n\n\u003cbr/\u003e\n\u003cbr/\u003e\n\nBu kütüphane verilen kullanıcı adına veya hastage göre ve istenilen tweet sayısına göre istenilen tweetleri döndürüyor.\u003cbr/\u003e\u003cbr/\u003e \n\nData seti'ni oluştururken yapılan sorgular 12 adet hesaptan 1000'er adet tweet çekilerek oluşturulmuştur. Her hesaptan 1000'er adet tweet çekemediği için 900, 800, 750, 600 olarak değişkenlik göstermektedir. Toplam 12 hesaptan 8810 adet tweet çekilmiştir.\n\n\u003cbr/\u003e\n\u003cbr/\u003e\n\n12 hesap için 8810 adet verinin çekilmesi işlemi ortalama 35-40 dakika sürüyor.\u003cbr/\u003e\u003cbr/\u003e\n\n\u003cbr/\u003e\n\u003cbr/\u003e\n\nVeri seti'ndeki kolonlarımız aşağıdaki gibidir:\u003cbr/\u003e\n-Tweet'in linki \u003cbr/\u003e\n-Tweet'in kendisi.\u003cbr/\u003e\n-Tweet'in like sayısı.\u003cbr/\u003e\n-Tweet'in yorum sayısı.\u003cbr/\u003e\n\n### Oluşturulmuş Olan Veri seti'nin Görseli:\u003cbr/\u003e\u003cbr/\u003e\n![image](https://github.com/enescidem/Dogal_Dil_Isleme/assets/92892867/a4859957-af91-4d98-9c55-fcd7ad4dde03)\n\u003cbr/\u003e\u003cbr/\u003e\n# Tweetlerin Temizlenmesi ve Lemmatization İşlemi\u003cbr/\u003e\nVeriseti oluşturulduktan sonra modelin daha iyi çalışması ve başarı oranının daha yüksek olması için tweetlerin temizlenmesi gerekmektedir. Tweetlerin içerisinde emojiler, noktalama işaretleri, stopwordsler, linkler gibi istenmeyen ve modelin başarısını düşürecek veriler tweetlerin içerisinden temizleniyor. \n\u003cbr/\u003e\u003cbr/\u003e\n### Tweetlerin Temizlenmesi Sırasında Yapılan İşlemler\u003cbr/\u003e\u003cbr/\u003e\n![image](https://github.com/enescidem/Dogal_Dil_Isleme/assets/92892867/ec423e8e-3dca-4f75-8d44-9b18042e34f7)\n![image](https://github.com/enescidem/Dogal_Dil_Isleme/assets/92892867/fef03545-0fd3-4c30-91c1-de82ba31a037)\n\n\u003cbr/\u003e\u003cbr/\u003e\n### Oluşturulan Temiz Tweet Görseli\u003cbr/\u003e\u003cbr/\u003e\n![image](https://github.com/enescidem/Dogal_Dil_Isleme/assets/92892867/5a9c312f-c416-492d-a2d9-8967e6532907)\n\u003cbr/\u003e\u003cbr/\u003e\n\n# Modelin Oluşturulması ve Tweetlerin Kategorilendirilmesi\u003cbr/\u003e\n\n## Model Tanımı\nModelimiz metin verileri üzerinde iki farklı konu çıkarma yöntemi olan LDA ve NMF'nin çıkarılması ve her iki yöntemin sonuçlarını görselleştirmek için grafikler oluşturulmasından ibaretdir. \n\n### Latent Dirichlet Allocation (LDA):\n\nLDA, belgelerin bir koleksiyonu içinde gizli olan temel konuları (topic) çıkarmak için kullanılan bir olasılıksal bir modeldir.\nTemel bir varsayım, belgelerin bir veya birden fazla konuya ait olabileceği ve her bir konunun bir olasılık dağılımı ile temsil edilebileceğidir.\nLDA, belge-konu ve kelime-konu olasılık dağılımlarını keşfetmeye çalışarak belgeleri bu gizli konulara ayırır.\nBu model, genellikle metin belgeleri üzerinde konu çıkarma, belge sınıflandırma ve benzeri görevlerde kullanılır.\n\n### Non-negative Matrix Factorization (NMF):\n\nNMF, bir matrisin çarpanlarını (faktörlerini) bulmaya çalışan bir matris ayrıştırma tekniğidir.\nBelirli bir veri matrisini, iki veya daha fazla alt matrise çarpanları çarpanları (faktörleri) olarak ayrıştırmaya odaklanır. Bu faktörler genellikle pozitif değerlere sahiptir.\nMetin madenciliği bağlamında, NMF belgeleri ve kelimeleri içeren bir matrisi, temel konuların (topic) lineer kombinasyonları olarak ifade etmeye çalışır.\nNMF'nin kullanıldığı yerler arasında konu çıkarma, görüntü işleme ve özellik seçimi gibi alanlar bulunmaktadır.\n\n## Modelin Oluşturulmaya Başlanması\n\n### Veri Setinin Hazırlanması\nClean tweetlerin bulunduğu `clean_tweets.csv` dosyası dataframeye aktarılmıştır. Daha sonra veri seti içinde NaN değeri olan satırlar varsa bu satırlar silinir. NaN değerleri olursa modelimiz hata vermektedir.\u003cbr/\u003e\u003cbr/\u003e\n\n### Metin Verilerini Sayısal Bir Formata Dönüştürme İşlemi\nTfidfVectorizer fonksiyonu bir metin madenciliği aracıdır ve metin verilerini TF-IDF (Term Frequency-Inverse Document Frequency) vektörlerine dönüştürmek için kullanılır.\n`max_df` ve `min_df` parametreleri, vektörleştirme işlemi sırasında dikkate alınacak terimlerin belirlenmesine yardımcı olan önemli parametrelerdir:\n   `max_df`: Belirtilen bir eşik değerinden yüksek olan terimler, belgelerin yüzde kaçında görülüyorsa, dikkate alınmaz.       Bu, genellikle sık kullanılan kelimelerin (stop words) veya çok spesifik kelimelerin filtrelenmesinde kullanılır.\n\n   `min_df`: Belirtilen bir eşik değerinden düşük olan terimler, belgelerin yüzde kaçında görülüyorsa, dikkate alınmaz.   \n    Bu, nadir görülen terimleri filtrelemek için kullanılır.\n    \n`vectorizer.fit_transform(df[\"clean\"])` ile, `clean` adlı sütundaki metin verileri üzerinde TF-IDF vektörleştirmesi yapılır. Bu işlem, her bir belgeyi vektörlerle temsil eden bir matris oluşturur.\n\n![image](https://github.com/enescidem/Dogal_Dil_Isleme/assets/92892867/f28d94e1-3d82-4dbb-b937-8e87bdfaa346)\n\n### Latent Dirichlet Allocation (LDA) modeli oluşturma\n`LatentDirichletAllocation` bir konu modelleme tekniğidir ve belgelerin gizli konularını çıkarmak için kullanılır.\n\n`n_components=8` parametresi, modelin kaç adet konu çıkaracağını belirtir. Bu örnekte, 8 adet konu belirlenmiştir.\n\n`random_state=42` parametresi, modelin tekrarlanabilirliğini sağlamak için kullanılır. Aynı `random_state` değeri kullanıldığında, modelin başlangıç durumu her seferinde aynı olacaktır.\n\nBu yapılandırma ile `LatentDirichletAllocation` sınıfından bir LDA modeli oluşturulur. Bu model, veri setindeki belgelerin gizli konularını keşfetmeye çalışacaktır.\n\nDaha sonra, bu model `lda.fit(X)` ile eğitilir. `X` önceki aşamada oluşturulan TF-IDF vektör matrisini temsil eder. Model, bu vektör matrisi üzerinde çalışarak belgelerin gizli konularını öğrenir.\n\n![image](https://github.com/enescidem/Dogal_Dil_Isleme/assets/92892867/246cabaa-cea6-4f15-992b-73a79ebfdd8a)\n\n \u003cbr/\u003e\u003cbr/\u003e\n\n### Modelleri Görselleştirme\nModeli görselleştirmek için `plot_top_words` fonksiyonunu yazıyoruz.\u003cbr/\u003e\u003cbr/\u003e\n![image](https://github.com/enescidem/Dogal_Dil_Isleme/assets/92892867/432eadd3-78e2-489d-92a3-47b865ed82d0)\n\n\n### LDA Modelinin Görselleştirilmiş Hali\n![image](https://github.com/enescidem/Dogal_Dil_Isleme/assets/92892867/01078756-1e79-41c1-916c-58c301484da9)\n\n\n### NMF Modelinin Görselleştirilmiş Hali\n![image](https://github.com/enescidem/Dogal_Dil_Isleme/assets/92892867/cd91089b-ba66-4fe0-96bc-030441e871c3)\n\n\n# Modellerin Tweetlere Göre Önerdiği Topicler\u003cbr/\u003e\n\n\n## LDA Modelinin Tweetlere Göre Önerdiği Topicler\n### Test 1:\n![image](https://github.com/enescidem/Dogal_Dil_Isleme/assets/92892867/525e0018-6c7a-4045-a7ea-61e0afdc3afa)\n\n### Test 2:\n![image](https://github.com/enescidem/Dogal_Dil_Isleme/assets/92892867/17a798d0-0d7b-43af-b048-e97974569059)\n\n### Test 3:\n![image](https://github.com/enescidem/Dogal_Dil_Isleme/assets/92892867/9b993aa8-5be5-4f71-8e90-2fb117ce13ea)\n\n### Test 4:\n![image](https://github.com/enescidem/Dogal_Dil_Isleme/assets/92892867/ab5051d6-f3a3-4b45-9de1-1a04d21c9fda)\n\n### Test 5:\n![image](https://github.com/enescidem/Dogal_Dil_Isleme/assets/92892867/255f2c48-0199-4ab7-9e63-f26d3b21cb47)\n\n\n## NMF Modelinin Tweetlere Göre Önerdiği Topicler\n### Test 1:\n![image](https://github.com/enescidem/Dogal_Dil_Isleme/assets/92892867/43628e55-6a36-490c-970a-04aa24a7fca5)\n\n### Test 2:\n![image](https://github.com/enescidem/Dogal_Dil_Isleme/assets/92892867/67e9d1a0-1faa-46a7-9725-56725ed5c8e8)\n\n### Test 3:\n![image](https://github.com/enescidem/Dogal_Dil_Isleme/assets/92892867/34fc4328-0c48-4aa6-9337-928fe2c13c75)\n\n### Test 4:\n![image](https://github.com/enescidem/Dogal_Dil_Isleme/assets/92892867/df151241-a2ea-45eb-ad54-5fdce8fe1595)\n\n### Test 5:\n![image](https://github.com/enescidem/Dogal_Dil_Isleme/assets/92892867/e1d495e3-4bdc-40e2-83d3-1c979a6f032c)\n\n\n\n\n\n# Sonuç\nSonuca bakıldığında yapılan projede seçilen modelin ne kadar önemli olduğu görülmektedir. Veri setindeki verilerin miktarı bu model için yeterli olmayabilir bu yüzden daha çok veri ile proje daha iyi hale getirilebilir. Model seçiminin önemi kadar verisetinin güzel bir şekilde hazırlanmış olması, verisetindeki noktalama işaretleri, semboller ve modele olumsuz etki edecek stopwordslerden arındırılmış olmasıdır. Bu projede başarı oranı çok yüksek değildir bunun en önemli sebebi verilerin yeterli sayıda olamamsıdır. Seçilmiş olan twitter hesaplarının türkiyede en çok etkileşim alan hesaplardan seçilmiş olması bu model için uygundur. Ancak bütün hesaplar aynı tweetleri paylaşabildiği için bu modelde farklı kategorilerin bulunduğu hesaplar seçilebilir. Örneğin bir spor paylaşımı yapan twitter hesabı, asgari ücret açıklandığında önemli bir haber olduğu varsayılarak aynı tweeti paylaşabilmektedir. Verisetinde 8500 üzerinde tweet olduğu için bu tweetlerin tek tek kontrol edilmesi mümkün değildir.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fenescidem%2Ftwitter-topic-modeling","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fenescidem%2Ftwitter-topic-modeling","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fenescidem%2Ftwitter-topic-modeling/lists"}