File size: 9,484 Bytes
665a1ca
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
c7d441b
665a1ca
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
ca17471
665a1ca
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
ca17471
665a1ca
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
import re
from zemberek import (
    TurkishSpellChecker,
    TurkishSentenceNormalizer,
    TurkishSentenceExtractor,
    TurkishMorphology,
    TurkishTokenizer
)
morphology = TurkishMorphology.create_with_defaults()
normalizer = TurkishSentenceNormalizer(morphology)

stop_words_list = ['acaba', 'ama', 'ancak', 'arada', 'aslında', 'ayrıca', 'bana', 'bazı', 'belki', 'ben', 'benden',
                   'beni',
                   'benim', 'beri', 'bile', 'birçok', 'biri', 'birkaç', 'birkez', 'birşey', 'birşeyi', 'biz', 'bize',
                   'bizden',
                   'bizi', 'bizim', 'böyle', 'böylece', 'bu', 'buna', 'bunda', 'bundan', 'bunlar', 'bunları',
                   'bunların',
                   'bunu', 'bunun', 'burada', 'çok', 'çünkü', 'da', 'daha', 'dahi', 'de', 'defa', 'değil', 'diğer',
                   'diye', 'dolayı',
                   'dolayısıyla', 'eğer', 'en', 'gibi', 'göre', 'halen', 'hangi', 'hatta', 'hem', 'henüz', 'hep',
                   'hepsi', 'her', 'herhangi',
                   'herkesin', 'hiç', 'hiçbir', 'için', 'ile', 'ilgili', 'ise', 'işte', 'itibaren', 'itibariyle',
                   'kadar', 'karşın', 'kendi',
                   'kendilerine', 'kendini', 'kendisi', 'kendisine', 'kendisini', 'kez', 'ki', 'kim', 'kimden', 'kime',
                   'kimi', 'kimse', 'mu',
                   'mü', 'mı', 'nasıl', 'ne', 'neden', 'nedenle', 'nerde', 'nerede', 'nereye', 'niye', 'niçin', 'o',
                   'ona', 'ondan', 'onlar',
                   'onlardan', 'onları', 'onların', 'onu', 'onun', 'oysa', 'öyle', 'pek', 'rağmen', 'sadece', 'sanki',
                   'sen', 'senden', 'seni',
                   'senin', 'siz', 'sizden', 'sizi', 'sizin', 'şey', 'şeyden', 'şeyi', 'şeyler', 'şöyle', 'şu', 'şuna',
                   'şunda', 'şundan',
                   'şunları', 'şunu', 'tarafından', 'tüm', 'üzere', 've', 'veya', 'ya', 'yani', 'yerine', 'yine',
                   'yoksa', 'zaten', 'mi',
                   'onlari', 'acep', 'adeta', 'artık', 'aynen', 'az', 'bari', 'bazen', 'başka', 'biraz', 'bütün',
                   'dahil', 'daima', 'dair',
                   'dayanarak', 'fakat', 'halbuki', 'hani', 'hele', 'herkes', 'iken', 'ila', 'ilk', 'illa', 'iyi',
                   'iyice', 'kanımca', 'kere',
                   'keşke', 'kısaca', 'lakin', 'madem', 'meğer', 'nitekim', 'sonra', 'veyahut', 'yahut', 'şayet',
                   'şimdi', 'gerek', 'hakeza',
                   'hoş', 'kah', 'keza', 'mademki', 'mamafih', 'meğerki', 'meğerse', 'netekim', 'neyse', 'oysaki',
                   'velev', 'velhasıl',
                   'velhasılıkelam', 'yalnız', 'yok', 'zira', 'adamakıllı', 'bilcümle', 'binaen', 'binaenaleyh',
                   'birazdan', 'birden',
                   'birdenbire', 'birlikte', 'bitevi', 'biteviye', 'bittabi', 'bizatihi', 'bizce', 'bizcileyin',
                   'bizzat', 'buracıkta',
                   'buradan', 'büsbütün', 'çoğu', 'çoğun', 'çoğunca', 'çoğunlukla', 'çokça', 'çoklukla', 'dahilen',
                   'demin', 'demincek',
                   'deminden', 'derhal', 'derken', 'elbet', 'elbette', 'enikonu', 'epey', 'epeyce', 'epeyi', 'esasen',
                   'esnasında', 'etraflı',
                   'gibilerden', 'gibisinden', 'halihazırda', 'haliyle', 'hasılı', 'hulasaten', 'illaki', 'itibarıyla',
                   'iyicene', 'kala',
                   'külliyen', 'nazaran', 'nedeniyle', 'nedense', 'nerden', 'nerdeyse', 'nereden', 'neredeyse', 'neye',
                   'neyi', 'nice', 'nihayet',
                   'nihayetinde', 'onca', 'önce', 'önceden', 'önceleri', 'öncelikle', 'oracık', 'oracıkta', 'orada',
                   'oradan', 'oranca',
                   'oranla', 'oraya', 'peyderpey', 'sahiden', 'sonradan', 'sonraları', 'sonunda', 'şuncacık',
                   'şuracıkta', 'tabii',
                   'tam', 'tamam', 'tamamen', 'tamamıyla', 'tek', 'vasıtasıyla', 'doğru', 'gelgelelim', 'gırla',
                   'hasebiyle', 'zarfında',
                   'öbür', 'başkası', 'beriki', 'birbiri', 'birçoğu', 'birileri', 'birisi', 'birkaçı', 'bizimki',
                   'burası', 'diğeri',
                   'filanca', 'hangisi', 'hiçbiri', 'kaçı', 'kaynak', 'kimisi', 'kimsecik', 'kimsecikler', 'neresi',
                   'öbürkü', 'öbürü',
                   'onda', 'öteki', 'ötekisi', 'sana', 'şunlar', 'şunun', 'şuracık', 'şurası', 'nın', 'nin', 'nun',
                   'nün', 'ın',
                   'in', 'un', 'ün']
contractions_convert_dictionary = {
    "amk": "amına koyayım",
    "aq": "amına koyayım",
    "a.q": "amına koyayım",
    "a.w": "amına koyayım",
    "ak": "amına koyayım",
    "a.k": "amına koyayım",
    "mq": "amına koyayım",
    "mk": "amına koyayım",
    "aqqq": "amına koyayım",
    "awk": "amına koyayım",
    "s.kine": "sikine",
    "fuck": "siktir",
    "as": "ananı sikim",
    "ananskm": "ananı sikim",
    "skm": "sikim",
    "s.ktigim": "siktiğim",
    "s.ktugm": "soktugum",
    "b.k": "bok",
    "g.t": "göt",
    "s..": "siktir",
    "ziktir": "siktir",
    "b.kunu": "bokunu",
    "s...": "siktir",
    "s.ksin":"siksin",
    "s*çımaya": "sıçmaya",
    "amkdjdkd": "amına koyayım",
    "lgbtli": "lezbiyen",
    "lgbt": "lezbiyen",
    "orrosspuu": "orospu",
    "yardagıma": "yarrağıma"
}

black_list = {"kopek": "köpek",
              "gotlu": "götlü",
              "got": "göt",
              "kotu": "kötü"}


class CLEANING:
    def __init__(self, raw_text, contractions, stopwords, blacklist):

        raw_text = raw_text.replace("İ", "i")  # Bu kullanım, bozuk i karakterlerine çözüm üretmek adına eklenmiştir.
        raw_text = raw_text.replace("Â", "a")
        raw_text = raw_text.replace("â", "a")
        self.Text = raw_text
        self.Contractions = contractions
        self.blacklist = blacklist
        self.StopWords = stopwords

    def convert_character(self, raw_text):
        raw_text = raw_text.replace("ş", "s")
        raw_text = raw_text.replace("ğ", "g")
        raw_text = raw_text.replace("ç", "c")
        raw_text = raw_text.replace("ü", "u")
        # raw_text = raw_text.replace("ı", "i")
        raw_text = raw_text.replace("Ş", "s")
        raw_text = raw_text.replace("Ğ", "g")
        raw_text = raw_text.replace("Ç", "c")
        raw_text = raw_text.replace("Ü", "u")
        raw_text = raw_text.replace("ö", "o")
        raw_text = raw_text.replace("Ö", "o")

        return raw_text

    def lowercase(self, text):
        return text.lower()

    def split(self, text):
        return text.split()

    def tweet_tag_clean(self, text):
        temp_text = re.sub("@[A-Za-z0-9_]+", "", text)
        return ' '.join(word for word in temp_text.split() if not word[0] == "#")

    def http_clean(self, text):
        regex = re.compile(r'<[^>]+>')
        temp_text = regex.sub('', text)
        return re.sub(r'http\S+', '', temp_text)

    def numeric_clean(self, text):
        return re.sub("[0-9]", "", text)

    def special_character_clean(self, text):
        return re.sub(r'[_"\-;%()|+&=*%.”“’,!?:#$@\[\]/<>]', '', text)

    def stopwords_clean(self, text):
        return ' '.join(word for word in text.split() if word not in stop_words_list)

    def single_characters_clean(self, text):
        return ' '.join([w for w in text.split() if len(w) > 1])

    def clean(self):
        temp_text = self.Text
        temp_text = self.lowercase(temp_text)
        # temp_text = self.convert_character(temp_text)
        temp_text = self.split(temp_text)

        if self.Contractions:  # Kısaltmaları dönüştür
            new_text = []
            for word in temp_text:

                if word in contractions_convert_dictionary:
                    new_text.append(contractions_convert_dictionary[word])
                else:
                    new_text.append(word)
            temp_text = " ".join(new_text)

        temp_text = self.tweet_tag_clean(temp_text)  # tweet ve tag temizle
        temp_text = self.http_clean(temp_text)  # http tag temizle
        temp_text = self.numeric_clean(temp_text)  # numeric değerleri temizle
        temp_text = self.special_character_clean(temp_text)  # special karakterleri temizle

        if self.StopWords:
            temp_text = self.stopwords_clean(temp_text)  # stopword kelimeleri temizle

        temp_text = self.single_characters_clean(temp_text)  # special karakterleri ve emojileri temizle

        temp_text = temp_text.lstrip().rstrip()  # text baş ve sonundaki boşlukları at

        if len(temp_text.lstrip().rstrip()) > 0:
            try:

                temp_text = normalizer.normalize(str(temp_text))
                temp_text = self.convert_character(temp_text)

                if self.blacklist:  # blacklist

                    new_text = []
                    for word in temp_text.split(' '):

                        if word in black_list:

                            new_text.append(black_list[word])
                        else:
                            new_text.append(word)
                    temp_text = " ".join(new_text)

                return temp_text
            except Exception as e:
                print(temp_text)
                return temp_text

        return temp_text