{"id":23715023,"url":"https://github.com/enescidem/sentiment-analysis","last_synced_at":"2025-08-22T13:45:37.218Z","repository":{"id":244024035,"uuid":"814080192","full_name":"enescidem/Sentiment-Analysis","owner":"enescidem","description":"The project analyzes online comments, focusing on understanding product reviews on social media. It collects, processes, and identifies user sentiment from text data shared on the Internet.","archived":false,"fork":false,"pushed_at":"2025-02-05T08:13:06.000Z","size":1471,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-02-05T09:24:35.587Z","etag":null,"topics":["hashtable","normalization","sentiment-analysis","twitter","x","zemberek"],"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-06-12T09:51:25.000Z","updated_at":"2025-02-05T08:13:10.000Z","dependencies_parsed_at":"2024-06-22T05:11:25.030Z","dependency_job_id":"0fbba418-e5f6-44d2-9ee1-3d025541f05f","html_url":"https://github.com/enescidem/Sentiment-Analysis","commit_stats":null,"previous_names":["enescidem/duygu-analizi","enescidem/sentiment-analysis"],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/enescidem%2FSentiment-Analysis","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/enescidem%2FSentiment-Analysis/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/enescidem%2FSentiment-Analysis/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/enescidem%2FSentiment-Analysis/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/enescidem","download_url":"https://codeload.github.com/enescidem/Sentiment-Analysis/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":239803534,"owners_count":19699693,"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":["hashtable","normalization","sentiment-analysis","twitter","x","zemberek"],"created_at":"2024-12-30T20:52:00.023Z","updated_at":"2025-02-20T08:28:00.271Z","avatar_url":"https://github.com/enescidem.png","language":"Jupyter Notebook","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Duygu Analizi\n\n### Medium Links:\nEnglish: https://medium.com/@enescidem/sentiment-anlaysis-41c1776a775c\n\nTürkçe: https://medium.com/@enescidem/sentiment-analysis-duygu-analizi-39bb29c49dcd\n\n---\n\nİnternet üzerinden yapılan yorumların duygu analizi yapılması amacıyla gerçekleştirilecek proje, sosyal medya platformlarında paylaşılan metinleri veya ürün yorumlarını anlama ve yorumlama hedefine yönelik bir çalışma önermektedir. Bu proje, internette kullanıcılar tarafından paylaşılan metin verilerini toplamayı, işlemeyi ve bu metinlerdeki duygu durumlarını belirlemeyi amaçlamaktadır.\n\nBu sayede, kullanıcıların paylaşımlarının genel duygu durumunu değerlendirebilecek, örneğin olumlu, olumsuz veya nötr olarak sınıflandırabilecek bir sistem geliştirilmesi planlanmaktadır. Proje, işletmelerin müşteri memnuniyetini artırmak, ürün geliştirmek ve pazarlama stratejilerini optimize etmek için değerli bir bilgi kaynağı sağlayacaktır.\n\n# Sentiment Analysis\n\nThe project, which will be realized with the aim of analyzing the sentiment of online comments, proposes a study aimed at understanding and interpreting texts or product reviews shared on social media platforms. This project aims to collect and process text data shared by users on the Internet and identify the sentiment of these texts.\n\nIn this way, it is planned to develop a system that can evaluate the overall sentiment of users' posts, for example, classifying them as positive, negative or neutral. The project will provide a valuable source of information for businesses to improve customer satisfaction, develop products and optimize their marketing strategies.\n\n### Genel Hatlarıyla Algoritma Adımları:\n**1-** Gelen yorumlar ilk olarak get_normalizasyon fonksiyonuna girerek normalize edilir.\n\n**2-** Normalize edilmiş yorumlar get_kelimeanaliz ile sıfat, zarf ve fiil olarak ayrılır.\n\n**3-** Ayrılan kelimeler hash tablosuna atılır sayılır ve kaydedilir.\n\n**3.5-** Eğer hash tablosuna eklenirke kelime pozitif ve negatif txt dosyalarında yok ise kullanıcıya kelimenin hangi txt ye ait olduğu sorulur buna göre sıralanır.\n\n**4-** Hash tablosundaki değerler -1 ile 1 aralığına alınır.\n\n**5-** Daha sonra yorumun gerekli kelimeleri için verilen değerler toplanarak cümlenin skoru belirlenir.\n\n**6-** Cümlenin sonucu - ise olumsuz, + ise olumlu bir yorum olduğunu kaydediyoruz.\n\n### Ön Koşullar (Prerequisites)\n\nProjeyi, herhangi bir Jupyter Notebook platformunda çalıştırmak mümkündür.\n\n```\nGoogle Colab -\u003e colab.google\nJupyter Notebook -\u003e jupyter.org\n```\n\n### Gerekli Kütüphaneler\n\nProjenin Çalışması için gerekli kütüphane zemberek kütüphanesidir:\n\n```\n!pip install zemberek-python\n```\n\nGerekli importlar:\n\n```\nimport re\nimport csv\nimport string\nimport itertools\nimport numpy as np\nimport pandas as pd\nimport random\n\nfrom zemberek import (\n    TurkishSpellChecker,\n    TurkishSentenceNormalizer,\n    TurkishMorphology,\n)\n```\n\nZemberek için gerekli değişken tanımlamaları:\n\n```\nmorphology = TurkishMorphology.create_with_defaults()\nnormalizer = TurkishSentenceNormalizer(morphology)\n```\n\nProjenin çalışabilmesi için [Drive(Sözlük)](https://github.com/enescidem/Sentiment-Analysis/tree/main/Drive(S%C3%B6zl%C3%BCk)) klasöründeki dosyaları kendi Drive'ınıza Sözlük adı altında bir klasör oluşturarak yüklemeniz gerekir.\nDrive'ı projeye entegre etme:\n```\nfrom google.colab import drive\ndrive.mount('/content/drive')\n```\n\n## Fonksiyonlar Ve İşlevleri\n\n### Drive içerisindeki pozitif.txt ve negatif.txt dosyalarında kelime ekleme, silme ve arama işlemlerini yapmak için aşağıdaki fonksiyonları kullanabilirsiniz:\n```\ndef kelime_ekle(dosya_adı, kelime):\ndef kelime_sil(dosya_adı, silinecek_kelime):\ndef kelime_arama(dosya_adı, aranan_kelime):\n```\n---\n\n### Normalizasyon fonksiyonu:\n```\ndef get_normalizasyon(example):\n```\n![image](https://github.com/enescidem/Sentiment-Analysis/assets/92892867/c0aaac0f-63ab-4ca3-a40b-130913981712)\n\n---\n### Kelime Analiz fonksiyonu:\n```\ndef get_kelimeanaliz(example):\n```\n![image](https://github.com/enescidem/Sentiment-Analysis/assets/92892867/4c3b2cac-57f0-4014-b9ca-f06265643dcd)\n\n---\n### Sorgulanan kelimenin pozitif veya negatif txt dosyalarında olup olmadığını kontrol eden bir sistem:\n```\ndef pozitif_mi(kelime):\ndef negatif_mi(kelime):\n```\n---\n### Hash tablosunun fonksiyonları:\n```\ndef hash_func(kelime, boyut):\ndef linear_probe(index, step, boyut):\ndef kelime_cikar(metin):\ndef kelime_agirligi(metin_listesi, tablo_boyutu=5000):\ndef ara_tablo(kelime, frekans_tablosu, tablo_boyutu=5000):\ndef print_frekans_tablosu(frekans_tablosu):\ndef en_yuksek_frekansli_kelime(frekans_tablosu):\ndef en_dusuk_frekansli_kelime(frekans_tablosu):\ndef katsayı_hesapla(deger, min_deger, max_deger):\ndef normalize_frekans_tablosu(tablo):\n```\n1. **hash_func(kelime, boyut)**: Bir kelimenin ASCII değerlerinin toplamını verilen boyuta göre mod alarak bir hash değeri döndürür.\n2. **linear_probe(index, step, boyut)**: Çakışma durumunda lineer arama ile yeni indeks hesaplar.\n3. **kelime_cikar(metin)**: Metin içindeki kelimeleri çıkarır ve noktalama işaretleri ve rakamları kaldırarak bir liste döndürür.\n4. **kelime_agirligi(metin_listesi, tablo_boyutu)**: Metin listesindeki kelimeleri pozitif veya negatif olarak sınıflandırıp ağırlıklarını hesaplayarak hash tablosuna ekler.\n5. **ara_tablo(kelime, frekans_tablosu, tablo_boyutu)**: Bir kelimenin frekans tablosunda kaç kez geçtiğini bulur.\n6. **print_frekans_tablosu(frekans_tablosu)**: Frekans tablosundaki kelimeleri ve frekanslarını yazdırır.\n7. **en_yuksek_frekansli_kelime(frekans_tablosu)**: Frekans tablosundaki en yüksek frekansa sahip kelimeyi bulur.\n8. **en_dusuk_frekansli_kelime(frekans_tablosu)**: Frekans tablosundaki en düşük frekansa sahip kelimeyi bulur.\n9. **katsayı_hesapla(deger, min_deger, max_deger)**: Bir değeri min ve max değerlere göre normalize eder.\n10. **normalize_frekans_tablosu(tablo)**: Frekans tablosundaki tüm frekansları normalize eder.\n\nÖrnek Bir Hash Tablosu([Daha Ayrıntılı](https://github.com/enescidem/Sentiment-Analysis/blob/main/Drive(S%C3%B6zl%C3%BCk)/hash_table.csv)):\n![HashTable](https://github.com/enescidem/Sentiment-Analysis/assets/92892867/9b62d762-949a-4191-b035-b030510c50ab)\n\n---\n### Hash tablosunu Drive'a kaydetme ve geri yükleme fonksiyonları:\n```\ndef save_to_csv(frekans_tablosu, dosya_adı):\ndef load_from_csv(dosya_adı, tablo_boyutu):\n```\n---\n\n\n## Bir Veri Seti Verdiğimizde([verilen veri seti](https://github.com/enescidem/Sentiment-Analysis/blob/main/Drive(Sözlük)/veri_seti.csv)) Algoritmanın Verdiği Sonuçlar:\n![image](https://github.com/enescidem/Sentiment-Analysis/assets/92892867/48a2d958-493b-4419-a39e-6601b54676df)\nBu tabloda görülen sütunları teker teker açıklayalım:\n\n**Görüş:** Bu sütun veri setinde bulunan yorumların normalizasyondan geçirilmiş halidir.\n\n**label:** Bu sütun veri setindeki yorumların gerçek(doğru) sonuçlarını gösterir.\n\n**Kelimeler:** Bu sütun normalizasyondan geçmiş cümlelerden bulunan sıfat ve zarf kelimeleridir.\n\n**Toplam Ağırlık:** Bu sütun yorumun tüm fonksiyonlardan geçtikten sonraki aldığı sonuçtur. - değeri olumsuz + değeri olumludur.\n\n**binary_sonuçlar:** Bu sütun Toplam Ağırlıkta bulduğumuz değerleri 0 ve 1 olmaz üzere ayırıyor. -1 de veriyoruz bu değer Toplam Ağırlığı 0 olan sonuçlar için.\n\n**Doğruluk:** Bu sütun label ile binary_sonuçlar sütununu karşılaştırıp eşit olan değerlere True farklı olan değerlere ise False değeri yazdırıyor.\n\n\nBurada bulunan sonuçlarda fiiler yoktur. Fiiller için oluçturulan fonksiyonlar tam olarak doğru çalışmadığı için es geçilmiştir.\n\n### Tabloya göre modelin doğruluk oranı şu şekildedir: ###\n\n![image](https://github.com/enescidem/Sentiment-Analysis/assets/92892867/8d495c25-eb6a-4f84-aba5-68cc88c4e027)\n\n### Tek Bir Cümlenin Adım Adım Analizi: ###\n\n![image](https://github.com/enescidem/Sentiment-Analysis/assets/92892867/36850038-576c-412b-8be1-c85c616a563c)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fenescidem%2Fsentiment-analysis","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fenescidem%2Fsentiment-analysis","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fenescidem%2Fsentiment-analysis/lists"}