BRAIN-TR's picture
Update clean.py
ca17471
raw
history blame contribute delete
No virus
9.48 kB
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