yonkasoft commited on
Commit
b66c232
1 Parent(s): 7044ef9

Upload datasets.ipynb

Browse files
Files changed (1) hide show
  1. datasets.ipynb +767 -0
datasets.ipynb ADDED
@@ -0,0 +1,767 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "cells": [
3
+ {
4
+ "cell_type": "markdown",
5
+ "metadata": {},
6
+ "source": [
7
+ "Kütüphaneler eklenmesi"
8
+ ]
9
+ },
10
+ {
11
+ "cell_type": "code",
12
+ "execution_count": 1,
13
+ "metadata": {},
14
+ "outputs": [
15
+ {
16
+ "name": "stderr",
17
+ "output_type": "stream",
18
+ "text": [
19
+ "c:\\gitProjects\\yeni\\.venv\\lib\\site-packages\\tqdm\\auto.py:21: TqdmWarning: IProgress not found. Please update jupyter and ipywidgets. See https://ipywidgets.readthedocs.io/en/stable/user_install.html\n",
20
+ " from .autonotebook import tqdm as notebook_tqdm\n"
21
+ ]
22
+ }
23
+ ],
24
+ "source": [
25
+ "from datasets import load_dataset\n",
26
+ "import pandas as pd \n",
27
+ "from pymongo import MongoClient\n",
28
+ "from transformers import BertTokenizer, BertForMaskedLM, DPRContextEncoderTokenizer,DPRContextEncoder;\n",
29
+ "\n",
30
+ "\n"
31
+ ]
32
+ },
33
+ {
34
+ "cell_type": "markdown",
35
+ "metadata": {},
36
+ "source": [
37
+ "Parquet dosyalarının dataframe olarak yüklenmesi(okuma yapabilmek için)"
38
+ ]
39
+ },
40
+ {
41
+ "cell_type": "code",
42
+ "execution_count": 3,
43
+ "metadata": {},
44
+ "outputs": [],
45
+ "source": [
46
+ "# Parquet dosyalarını DataFrame olarak yükleyin\n",
47
+ "train_df1 = pd.read_parquet('C:\\\\gitProjects\\\\yeni\\\\wikipedia-tr\\\\data\\\\train-00000-of-00002-ed6b025df7a1f653.parquet')\n",
48
+ "train_df2 = pd.read_parquet('C:\\\\gitProjects\\\\yeni\\\\wikipedia-tr\\\\data\\\\train-00001-of-00002-0aa63953f8b51c17.parquet')\n"
49
+ ]
50
+ },
51
+ {
52
+ "cell_type": "code",
53
+ "execution_count": 4,
54
+ "metadata": {},
55
+ "outputs": [],
56
+ "source": [
57
+ "# İki DataFrame'i birleştirin\n",
58
+ "merged_train = pd.concat([train_df1, train_df2], ignore_index=True)\n"
59
+ ]
60
+ },
61
+ {
62
+ "cell_type": "code",
63
+ "execution_count": 5,
64
+ "metadata": {},
65
+ "outputs": [],
66
+ "source": [
67
+ "# Örneğin %80 train, %20 test olarak ayırın\n",
68
+ "train_data = merged_train.sample(frac=0.8, random_state=42)\n",
69
+ "test_data = merged_train.drop(train_data.index)\n"
70
+ ]
71
+ },
72
+ {
73
+ "cell_type": "code",
74
+ "execution_count": 6,
75
+ "metadata": {},
76
+ "outputs": [],
77
+ "source": [
78
+ "import os\n",
79
+ "\n",
80
+ "# Dosya yolları\n",
81
+ "train_dir = 'C:\\\\gitProjects\\\\yeni\\\\datasets\\\\train_Egitim'\n",
82
+ "test_dir = 'C:\\\\gitProjects\\\\yeni\\\\datasets\\\\test_Egitim'\n",
83
+ "train_file_path = os.path.join(train_dir, 'merged_train.parquet')\n",
84
+ "test_file_path = os.path.join(test_dir, 'merged_test.parquet')\n",
85
+ "\n",
86
+ "# Dizinlerin var olup olmadığını kontrol etme, gerekirse oluşturma\n",
87
+ "os.makedirs(train_dir, exist_ok=True)\n",
88
+ "os.makedirs(test_dir, exist_ok=True)\n",
89
+ "\n",
90
+ "# Veriyi .parquet formatında kaydetme\n",
91
+ "train_data.to_parquet(train_file_path)\n",
92
+ "test_data.to_parquet(test_file_path)"
93
+ ]
94
+ },
95
+ {
96
+ "cell_type": "markdown",
97
+ "metadata": {},
98
+ "source": [
99
+ "Dataframe deki bilgileri görme "
100
+ ]
101
+ },
102
+ {
103
+ "cell_type": "code",
104
+ "execution_count": 7,
105
+ "metadata": {},
106
+ "outputs": [
107
+ {
108
+ "name": "stdout",
109
+ "output_type": "stream",
110
+ "text": [
111
+ " id url \\\n",
112
+ "515773 3525037 https://tr.wikipedia.org/wiki/P%C5%9F%C4%B1qo%... \n",
113
+ "517811 3532700 https://tr.wikipedia.org/wiki/Craterolophinae \n",
114
+ "436350 3203545 https://tr.wikipedia.org/wiki/Notocrabro \n",
115
+ "223281 1765445 https://tr.wikipedia.org/wiki/Ibrahim%20Sissoko \n",
116
+ "100272 575462 https://tr.wikipedia.org/wiki/Salah%20Cedid \n",
117
+ "\n",
118
+ " title text \n",
119
+ "515773 Pşıqo Ahecaqo Pşıqo Ahecaqo (), Çerkes siyasetçi, askeri kom... \n",
120
+ "517811 Craterolophinae Craterolophinae, Depastridae familyasına bağlı... \n",
121
+ "436350 Notocrabro Notocrabro Crabronina oymağına bağlı bir cinst... \n",
122
+ "223281 Ibrahim Sissoko İbrahim Sissoko (d. 30 Kasım 1991), Fildişi Sa... \n",
123
+ "100272 Salah Cedid Salah Cedid (1926-1993) (Arapça: صلاح جديد) Su... \n",
124
+ " id url title \\\n",
125
+ "5 35 https://tr.wikipedia.org/wiki/Karl%20Marx Karl Marx \n",
126
+ "13 48 https://tr.wikipedia.org/wiki/Ruhi%20Su Ruhi Su \n",
127
+ "15 53 https://tr.wikipedia.org/wiki/Bilgisayar Bilgisayar \n",
128
+ "18 59 https://tr.wikipedia.org/wiki/Edebiyat Edebiyat \n",
129
+ "19 64 https://tr.wikipedia.org/wiki/M%C3%BChendislik Mühendislik \n",
130
+ "\n",
131
+ " text \n",
132
+ "5 Karl Marx (; 5 Mayıs 1818, Trier – 14 Mart 188... \n",
133
+ "13 Mehmet Ruhi Su (1 Ocak 1912, Van - 20 Eylül 19... \n",
134
+ "15 Bilgisayar, aritmetik veya mantıksal işlem diz... \n",
135
+ "18 Edebiyat, yazın veya literatür; olay, düşünce,... \n",
136
+ "19 Mühendis, insanların her türlü ihtiyacını karş... \n"
137
+ ]
138
+ }
139
+ ],
140
+ "source": [
141
+ "print(train_data.head())\n",
142
+ "print(test_data.head())"
143
+ ]
144
+ },
145
+ {
146
+ "cell_type": "markdown",
147
+ "metadata": {},
148
+ "source": [
149
+ "MongoDb'ye bağlama ve bilgi çekme "
150
+ ]
151
+ },
152
+ {
153
+ "cell_type": "code",
154
+ "execution_count": 7,
155
+ "metadata": {},
156
+ "outputs": [
157
+ {
158
+ "name": "stdout",
159
+ "output_type": "stream",
160
+ "text": [
161
+ " Veriler başarıyla Collection(Database(MongoClient(host=['localhost:27017'], document_class=dict, tz_aware=False, connect=True), 'EgitimDatabase'), 'train') MongoDb koleksiyonuna indirildi.\n",
162
+ " Veriler başarıyla Collection(Database(MongoClient(host=['localhost:27017'], document_class=dict, tz_aware=False, connect=True), 'EgitimDatabase'), 'test') MongoDb koleksiyonuna indirildi.\n"
163
+ ]
164
+ }
165
+ ],
166
+ "source": [
167
+ "import pandas as pd\n",
168
+ "from pymongo import MongoClient\n",
169
+ "\n",
170
+ "def get_mongodb(database_name='EgitimDatabase', train_collection_name='train', test_collection_name='test', host='localhost', port=27017):\n",
171
+ " \"\"\"\n",
172
+ " MongoDB connection and collection selection for train and test collections.\n",
173
+ " \"\"\"\n",
174
+ " client = MongoClient(f'mongodb://{host}:{port}/')\n",
175
+ " \n",
176
+ " # Veritabanını seçin\n",
177
+ " db = client[database_name]\n",
178
+ " \n",
179
+ " # Train ve test koleksiyonlarını seçin\n",
180
+ " train_collection = db[train_collection_name]\n",
181
+ " test_collection = db[test_collection_name]\n",
182
+ " \n",
183
+ " return train_collection, test_collection\n",
184
+ "\n",
185
+ "# Function to load dataset into MongoDB\n",
186
+ "def dataset_read(train_file_path,test_file_path):\n",
187
+ " data_train = pd.read_parquet(train_file_path, columns=['id', 'url', 'title', 'text'])\n",
188
+ " data_test = pd.read_parquet(test_file_path, columns=['id', 'url', 'title', 'text'])\n",
189
+ " data_dict_train = data_train.to_dict(\"records\")\n",
190
+ " data_dict_test = data_test.to_dict(\"records\")\n",
191
+ "\n",
192
+ "\n",
193
+ "\n",
194
+ " # Get the MongoDB collections\n",
195
+ " train_collection, test_collection = get_mongodb(database_name='EgitimDatabase')\n",
196
+ "\n",
197
+ " \n",
198
+ "\n",
199
+ " # Insert data into MongoDB\n",
200
+ " train_collection.insert_many(data_dict_train)\n",
201
+ " test_collection.insert_many(data_dict_test)\n",
202
+ "\n",
203
+ "\n",
204
+ " print(f\" Veriler başarıyla {train_collection} MongoDb koleksiyonuna indirildi.\")\n",
205
+ " print(f\" Veriler başarıyla {test_collection} MongoDb koleksiyonuna indirildi.\")\n",
206
+ " return train_collection,test_collection\n",
207
+ "\n",
208
+ "# Train ve test datasetlerini MongoDB'ye yüklemek için fonksiyonu çağır\n",
209
+ "train_file_path = 'C:\\\\gitProjects\\\\bert\\\\datasets\\\\train_Egitim\\\\merged_train.parquet'\n",
210
+ "test_file_path = 'C:\\\\gitProjects\\\\bert\\\\datasets\\\\test_Egitim\\\\merged_test.parquet'\n",
211
+ "\n",
212
+ "train_collection, test_collection = dataset_read(train_file_path, test_file_path)"
213
+ ]
214
+ },
215
+ {
216
+ "cell_type": "markdown",
217
+ "metadata": {},
218
+ "source": [
219
+ "MongoDb üzerinden title ve text verilerinin çekilmesi "
220
+ ]
221
+ },
222
+ {
223
+ "cell_type": "code",
224
+ "execution_count": null,
225
+ "metadata": {},
226
+ "outputs": [],
227
+ "source": [
228
+ "from sklearn.feature_extraction.text import TfidfVectorizer\n",
229
+ "from sentence_transformers import SentenceTransformer\n",
230
+ "\n",
231
+ "#bert base modeli \n",
232
+ "model = SentenceTransformer(\"emrecan/bert-base-turkish-cased-mean-nli-stsb-tr\")\n",
233
+ "\n",
234
+ "#text dosyasını koleksiyon üzerinden çekme \n",
235
+ "# Database sınıfı: Veritabanı bağlantıları ve verileri çekme işlevleri\n",
236
+ "# Database sınıfı: Veritabanı bağlantıları ve verileri çekme işlevleri\n",
237
+ "class Database:\n",
238
+ " @staticmethod\n",
239
+ " def get_mongodb():\n",
240
+ " # MongoDB bağlantı bilgilerini döndürecek şekilde tanımlanmıştır.\n",
241
+ " return 'mongodb://localhost:27017/', 'EgitimDatabase', 'train'\n",
242
+ "\n",
243
+ " @staticmethod\n",
244
+ " def get_input_titles():\n",
245
+ " mongo_url, db_name, collection_name = Database.get_mongodb()\n",
246
+ " client = MongoClient(mongo_url)\n",
247
+ " db = client[db_name]\n",
248
+ " collection = db[collection_name]\n",
249
+ " query = {\"title\": {\"$exists\": True}}\n",
250
+ " cursor = collection.find(query, {\"title\": 1, \"_id\": 0})\n",
251
+ " # Başlıkları listeye aldık\n",
252
+ " title_from_db = [doc['title'] for doc in cursor]\n",
253
+ " title_count = len(title_from_db)\n",
254
+ " return title_from_db, title_count\n",
255
+ " \n",
256
+ " @staticmethod\n",
257
+ " def get_input_texts():\n",
258
+ " mongo_url, db_name, collection_name = Database.get_mongodb()\n",
259
+ " client = MongoClient(mongo_url)\n",
260
+ " db = client[db_name]\n",
261
+ " collection = db[collection_name]\n",
262
+ " query = {\"text\": {\"$exists\": True}}\n",
263
+ " cursor = collection.find(query, {\"text\": 1, \"_id\": 0})\n",
264
+ " text_from_db = [doc['text'] for doc in cursor]\n",
265
+ " text_count= len(text_from_db)\n",
266
+ " return text_from_db,text_count\n",
267
+ "\n",
268
+ "\n",
269
+ "# Veritabanından başlıklar ve metinler alınır\n",
270
+ "titles, title_count = Database.get_input_titles()\n",
271
+ "texts = Database.get_input_texts()\n",
272
+ "\n",
273
+ "#sonuçların belirlenmesi\n",
274
+ "documents = titles + texts\n",
275
+ "print(f\"Başlıklar: {titles}\")\n",
276
+ "print(f\"Başlık sayısı: {title_count}\")\n",
277
+ "#print(f\"Metinler: {texts}\")\n",
278
+ "print(f\"Metin sayısı: {len(texts)}\")"
279
+ ]
280
+ },
281
+ {
282
+ "cell_type": "markdown",
283
+ "metadata": {},
284
+ "source": [
285
+ "TF-IDF HESAPLAMA"
286
+ ]
287
+ },
288
+ {
289
+ "cell_type": "code",
290
+ "execution_count": null,
291
+ "metadata": {},
292
+ "outputs": [],
293
+ "source": [
294
+ "from pymongo import MongoClient\n",
295
+ "from sklearn.feature_extraction.text import TfidfVectorizer\n",
296
+ "from textblob import TextBlob as tb\n",
297
+ "import numpy as np\n",
298
+ "import math\n",
299
+ "\n",
300
+ "class Database:\n",
301
+ " @staticmethod\n",
302
+ " def get_mongodb():\n",
303
+ " return 'mongodb://localhost:27017/', 'EgitimDatabase', 'train'\n",
304
+ "\n",
305
+ " @staticmethod\n",
306
+ " def get_input_documents(limit=3):\n",
307
+ " mongo_url, db_name, collection_name = Database.get_mongodb()\n",
308
+ " client = MongoClient(mongo_url)\n",
309
+ " db = client[db_name]\n",
310
+ " collection = db[collection_name]\n",
311
+ " cursor = collection.find().limit(limit)\n",
312
+ " documents = [doc for doc in cursor]\n",
313
+ " document_count = len(documents)\n",
314
+ " return documents, document_count\n",
315
+ "\n",
316
+ "class Tf:\n",
317
+ " @staticmethod\n",
318
+ " def tf(word, blob):\n",
319
+ " return blob.words.count(word) / len(blob.words)\n",
320
+ "\n",
321
+ " @staticmethod\n",
322
+ " def n_containing(word, bloblist):\n",
323
+ " return sum(1 for blob in bloblist if word in blob.words)\n",
324
+ "\n",
325
+ " @staticmethod\n",
326
+ " def idf(word, bloblist):\n",
327
+ " return math.log(len(bloblist) / (1 + Tf.n_containing(word, bloblist)))\n",
328
+ "\n",
329
+ " @staticmethod\n",
330
+ " def tfidf(word, blob, bloblist):\n",
331
+ " return Tf.tf(word, blob) * Tf.idf(word, bloblist)\n",
332
+ "\n",
333
+ " @staticmethod\n",
334
+ " def get_input_documents(limit=3):\n",
335
+ " return Database.get_input_documents(limit)\n",
336
+ "\n",
337
+ "# Kullanım örneği\n",
338
+ "documents, document_count = Tf.get_input_documents(limit=3)\n",
339
+ "\n",
340
+ "# Dokümanları işleyerek TF-IDF hesaplama\n",
341
+ "\n",
342
+ "blobs = [tb(doc.get('text', '')) for doc in documents] # veya 'title' kullanarak başlıkları işleyebilirsiniz\n",
343
+ "all_words = set(word for blob in blobs for word in blob.words)\n",
344
+ "\n",
345
+ "tfidf_scores = {}\n",
346
+ "for word in all_words:\n",
347
+ " tfidf_scores[word] = [Tf.tfidf(word, blob, blobs) for blob in blobs]\n",
348
+ "\n",
349
+ "print(\"TF-IDF Skorları:\")\n",
350
+ "for word, scores in tfidf_scores.items():\n",
351
+ " print(f\"Kelime: {word}, Skorlar: {scores}\")\n",
352
+ "\n",
353
+ "\n",
354
+ "\n",
355
+ "\n",
356
+ "\"\"\"turkish_stop_words = set([\n",
357
+ " 'ad', 'adım', 'ah', 'ama', 'an', 'ancak', 'araba', 'aralar', 'aslında', \n",
358
+ " 'b', 'bazı', 'belirli', 'ben', 'bence', 'bunu', 'burada', 'biz', 'bu', 'buna', 'çünkü', \n",
359
+ " 'da', 'de', 'demek', 'den', 'derken', 'değil', 'daha', 'dolayı', 'edilir', 'eğer', 'en', 'fakat', \n",
360
+ " 'genellikle', 'gibi', 'hem', 'her', 'herhangi', 'hiç', 'ise', 'işte', 'itibaren', 'iyi', 'kadar', \n",
361
+ " 'karşı', 'ki', 'kime', 'kısaca', 'mu', 'mü', 'nasıl', 'ne', 'neden', 'niye', 'o', 'olabilir', 'oluşur', \n",
362
+ " 'önce', 'şu', 'sadece', 'se', 'şey', 'şimdi', 'tabi', 'tüm', 've', 'ya', 'ya da', 'yani', 'yine'\n",
363
+ "])\n",
364
+ "def calculate_tfidf(documents):\n",
365
+ " vectorizer = TfidfVectorizer(stop_words=turkish_stop_words, max_features=10000) # max_features ile özellik sayısını sınırlıyoruz\n",
366
+ " tfidf_matrix = vectorizer.fit_transform(documents)\n",
367
+ " feature_names = vectorizer.get_feature_names_out()\n",
368
+ " return tfidf_matrix, feature_names\n",
369
+ "\n",
370
+ "#feature_names lerin belirlenmesi grekir \n",
371
+ "tfidf_matrix, feature_names=calculate_tfidf(documents)\n",
372
+ "\n",
373
+ "\n",
374
+ "\n",
375
+ "# En yüksek TF-IDF skorlarına sahip anahtar kelimeleri çıkarın\n",
376
+ "#sıkışık format kullanmarak tf-ıdf matrisini işleme \n",
377
+ "def get_top_n_keywords_sparse(n=10):\n",
378
+ "\n",
379
+ " # TF-IDF hesaplayıcı oluşturun\n",
380
+ " vectorizer = TfidfVectorizer()\n",
381
+ "\n",
382
+ " # Başlıklar ve metinler ile TF-IDF matrisini oluşturun\n",
383
+ " texts = Database.get_input_texts()\n",
384
+ " titles = Database.get_input_titles()\n",
385
+ " \n",
386
+ "\n",
387
+ " #title ve text değerlerini alarak vektörleştirdik.\n",
388
+ " tfidf_matrix = vectorizer.fit_transform(documents)\n",
389
+ "\n",
390
+ " # Özellik adlarını (kelimeleri) alın\n",
391
+ "\n",
392
+ " feature_names = vectorizer.get_feature_names_out()\n",
393
+ "\n",
394
+ " # TF-IDF sonuçlarını DataFrame'e dönüştürün\n",
395
+ " df = pd.DataFrame(tfidf_matrix.toarray(), columns=feature_names)\n",
396
+ " print(df)\n",
397
+ " keywords = {}\n",
398
+ " for i in range(tfidf_matrix.shape[0]):\n",
399
+ " row = tfidf_matrix[i].toarray().flatten() #list yapısından çıkarma \n",
400
+ " sorted_indices = row.argsort()[::-1] # Büyükten küçüğe sıralama\n",
401
+ " top_indices = sorted_indices[:n]\n",
402
+ " top_keywords = [feature_names[idx] for idx in top_indices]\n",
403
+ " keywords[i] = top_keywords\n",
404
+ " return keywords\"\"\"\n"
405
+ ]
406
+ },
407
+ {
408
+ "cell_type": "code",
409
+ "execution_count": null,
410
+ "metadata": {},
411
+ "outputs": [],
412
+ "source": [
413
+ "\n",
414
+ "#---------------------------------------------------------------------------------------------------------------------------------\n",
415
+ "#transformers kütüphanesine ait generation fonksiyonu özellikleri ,PyTorch generate() is implemented in GenerationMixin. \n",
416
+ "\n",
417
+ "\n",
418
+ "\"\"\"from transformers import GenerationConfig\n",
419
+ "\n",
420
+ "# Download configuration from huggingface.co and cache.\n",
421
+ "generation_config = GenerationConfig.from_pretrained(\"openai-community/gpt2\")\n",
422
+ "\n",
423
+ "# E.g. config was saved using *save_pretrained('./test/saved_model/')*\n",
424
+ "generation_config.save_pretrained(\"./test/saved_model/\")\n",
425
+ "generation_config = GenerationConfig.from_pretrained(\"./test/saved_model/\")\n",
426
+ "\n",
427
+ "# You can also specify configuration names to your generation configuration file\n",
428
+ "generation_config.save_pretrained(\"./test/saved_model/\", config_file_name=\"my_configuration.json\")\n",
429
+ "generation_config = GenerationConfig.from_pretrained(\"./test/saved_model/\", \"my_configuration.json\")\n",
430
+ "\n",
431
+ "# If you'd like to try a minor variation to an existing configuration, you can also pass generation\n",
432
+ "# arguments to `.from_pretrained()`. Be mindful that typos and unused arguments will be ignored\n",
433
+ "generation_config, unused_kwargs = GenerationConfig.from_pretrained(\n",
434
+ " \"openai-community/gpt2\", top_k=1, foo=False, do_sample=True, return_unused_kwargs=True\n",
435
+ ")\n",
436
+ "generation_config.top_k\n",
437
+ "\n",
438
+ "unused_kwargs\n",
439
+ "\"\"\"\n",
440
+ "\n",
441
+ "\n",
442
+ "#tf-ıdf hesaplama (anahtar kelimeler için) #Bir kelimenin TF IDF puanı ne kadar yüksekse, kelime bulunduğu belgeyle o kadar alakalıdır.\n",
443
+ "\n",
444
+ "turkish_stop_words = set([\n",
445
+ " 'a', 'abide', 'abi', 'abla', 'ad', 'adım', 'ah', 'ama', 'an', 'ancak', 'araba', 'aralar', 'aslında', \n",
446
+ " 'aşşağı', 'az', 'b', 'bazı', 'belirli', 'ben', 'bence', 'bunu', 'burada', 'biz', 'bu', 'buna', 'çünkü', \n",
447
+ " 'da', 'de', 'demek', 'den', 'derken', 'değil', 'daha', 'dolayı', 'e', 'edilir', 'eğer', 'en', 'fakat', \n",
448
+ " 'genellikle', 'gibi', 'hem', 'her', 'herhangi', 'hiç', 'i', 'ise', 'işte', 'itibaren', 'iyi', 'kadar', \n",
449
+ " 'karşı', 'ki', 'kime', 'kısaca', 'mu', 'mü', 'nasıl', 'ne', 'neden', 'niye', 'o', 'olabilir', 'oluşur', \n",
450
+ " 'önce', 'şu', 'sadece', 'sana', 'se', 'şey', 'şimdi', 'tabi', 'tüm', 've', 'ya', 'ya da', 'yani', 'yine'\n",
451
+ "])\n",
452
+ "\n",
453
+ "# TF-IDF hesaplayıcı oluşturun ve Türkçe durak kelimelerini dahil edin\n",
454
+ "vectorizer = TfidfVectorizer(stop_words=turkish_stop_words)\n",
455
+ "\n",
456
+ "\n",
457
+ "\"\"\"IDF, derlemedeki belge sayısının,\n",
458
+ "incelenen anahtar kelimeyi içeren topluluktaki belge sayısına \n",
459
+ "bölünmesiyle elde edilen algoritmadır. \n",
460
+ "Yani ters belge sıklığı bir terimin önemini ölçer,\n",
461
+ "toplam belge sayısının, terimi içeren belge sayısına bölünmesiyle elde edilir.\n",
462
+ "külliyat yani incelenen tüm belgelerin adedi 10 ise ve test edilen anahtar kelime,\n",
463
+ "külliyattaki üç belgede görünüyorsa, bu durumda IDF değeri 0.52’dir (log (10/3)).\"\"\"\n",
464
+ "#TF-IDF puanı; Naive Bayes ve Destek Vektör Makineleri gibi algoritmalara aktarılabilir. Böylece kelime sayısı gibi daha temel yöntemlerin sonuçları büyük ölçüde iyileştirilebilir.\n",
465
+ "#IDF = log ( Dokuman Sayısı / Terimin Geçtiği Dokuman Sayısı )\n",
466
+ "#dokuman sayısılarını almakla başlayacağız.\n",
467
+ "# : titlelerın sayısı / terimler ise \n",
468
+ "\n",
469
+ "document_number=416434\n",
470
+ "\"\"\"Sonuç olarak TF IDF’nin, SEO’da pratik ve önemli bir kullanım alanına sahip olduğunu söylenebilir,\n",
471
+ " özellikle yüksek kaliteli içeriğin optimize edilmesinde ve oluşturulmasında yararlıdır. \n",
472
+ " Ancak TF IDF, içerik optimizasyonu için tek başına kullanıldığında ciddi sınırlamalarla karşı karşıya kalır:\"\"\"\n",
473
+ "\n",
474
+ "# TF-IDF hesaplayıcı oluşturun\n",
475
+ "vectorizer = TfidfVectorizer()\n",
476
+ "\n",
477
+ "# Başlıklar ve metinler ile TF-IDF matrisini oluşturun\n",
478
+ "texts = Database.get_input_texts()\n",
479
+ "titles,title_count = Database.get_input_titles()\n",
480
+ "documents = titles + texts # Başlıklar ve metinleri birleştir\n",
481
+ "\n",
482
+ "#title ve text değerlerini alarak vektörleştirdik.\n",
483
+ "tfidf_matrix = vectorizer.fit_transform(documents)\n",
484
+ "\n",
485
+ "# Özellik adlarını (kelimeleri) alın\n",
486
+ "\n",
487
+ "feature_names = vectorizer.get_feature_names_out()\n",
488
+ "\n",
489
+ "# TF-IDF sonuçlarını DataFrame'e dönüştürün\n",
490
+ "df = pd.DataFrame(tfidf_matrix.toarray(), columns=feature_names)\n",
491
+ "\n",
492
+ "\n",
493
+ "\"\"\"def get_top_n_keywords(df, n=10):\n",
494
+ " keywords = {}\n",
495
+ " for i, row in df.iterrows():\n",
496
+ " sorted_row = row.sort_values(ascending=False)\n",
497
+ " top_keywords = sorted_row.head(n).index\n",
498
+ " keywords[i] = top_keywords.tolist()\n",
499
+ " return keywords\"\"\"\n",
500
+ "\n",
501
+ "# En yüksek TF-IDF skorlarına sahip anahtar kelimeleri çıkarın\n",
502
+ "#sıkışık format kullanmarak tf-ıdf matrisini işleme \n",
503
+ "def get_top_n_keywords_sparse(n=10):\n",
504
+ "\n",
505
+ " # TF-IDF hesaplayıcı oluşturun\n",
506
+ " vectorizer = TfidfVectorizer()\n",
507
+ "\n",
508
+ " # Başlıklar ve metinler ile TF-IDF matrisini oluşturun\n",
509
+ " texts = Database.get_input_texts()\n",
510
+ " titles = Database.get_input_titles()\n",
511
+ " \n",
512
+ "\n",
513
+ " #title ve text değerlerini alarak vektörleştirdik.\n",
514
+ " tfidf_matrix = vectorizer.fit_transform(documents)\n",
515
+ "\n",
516
+ " # Özellik adlarını (kelimeleri) alın\n",
517
+ "\n",
518
+ " feature_names = vectorizer.get_feature_names_out()\n",
519
+ "\n",
520
+ " # TF-IDF sonuçlarını DataFrame'e dönüştürün\n",
521
+ " df = pd.DataFrame(tfidf_matrix.toarray(), columns=feature_names)\n",
522
+ " print(df)\n",
523
+ " keywords = {}\n",
524
+ " for i in range(tfidf_matrix.shape[0]):\n",
525
+ " row = tfidf_matrix[i].toarray().flatten() #list yapısından çıkarma \n",
526
+ " sorted_indices = row.argsort()[::-1] # Büyükten küçüğe sıralama\n",
527
+ " top_indices = sorted_indices[:n]\n",
528
+ " top_keywords = [feature_names[idx] for idx in top_indices]\n",
529
+ " keywords[i] = top_keywords\n",
530
+ " return keywords\n",
531
+ "\n",
532
+ "\n",
533
+ "top_keywords = get_top_n_keywords_sparse(tfidf_matrix, feature_names)\n",
534
+ "print(top_keywords)\n",
535
+ "print(f\"Başlıklar: {titles}\")\n",
536
+ "print(f\"Başlık sayısı: {title_count}\")\n",
537
+ "print(f\"Metinler: {texts}\")\n",
538
+ "print(f\"Metin sayısı: {len(texts)}\")\n",
539
+ "print(f\"Birleştirilmiş Belgeler: {documents[:5]}\") # İlk birkaç belgeyi kontrol etme\n",
540
+ "\n",
541
+ "def calculate_tfidf(docs):\n",
542
+ " vectorizer = TfidfVectorizer(stop_words=turkish_stop_words)\n",
543
+ " tfidf_matrix = vectorizer.fit_transform(docs)\n",
544
+ " feature_names = vectorizer.get_feature_names_out()\n",
545
+ " return tfidf_matrix, feature_names\n",
546
+ "\n",
547
+ "# İşlem için dökümanları parçalayarak kullanın\n",
548
+ "def process_documents_in_batches(docs, batch_size=1000, top_n=5):\n",
549
+ " all_keywords = {}\n",
550
+ " for start in range(0, len(docs), batch_size):\n",
551
+ " end = min(start + batch_size, len(docs))\n",
552
+ " batch_docs = docs[start:end]\n",
553
+ " tfidf_matrix, feature_names = calculate_tfidf(batch_docs)\n",
554
+ " batch_keywords = get_top_n_keywords_sparse(tfidf_matrix, feature_names, n=top_n)\n",
555
+ " all_keywords.update(batch_keywords)\n",
556
+ " return all_keywords\n",
557
+ "\n",
558
+ "#buraya mango db üzerindeki tüm dökümanlar gelmewli \n",
559
+ "keywords= process_documents_in_batches(documents,batch_size=1000,top_n=5)\n",
560
+ "\n",
561
+ "documents = titles + texts # Başlıklar ve metinleri birleştir\n",
562
+ "print(f\"en yüksek tf-ıdf skoruna sahip anahtar kelimeler:{keywords}\")\n",
563
+ "\n",
564
+ "\n",
565
+ "# Belgeleri TF-IDF matrisine dönüştürün\n",
566
+ "\"\"\"tfidf_matrix = vectorizer.fit_transform(documents)\n",
567
+ "\n",
568
+ "# Özellik adlarını (kelimeleri) alın\n",
569
+ "feature_names = vectorizer.get_feature_names_out()\n",
570
+ "\n",
571
+ "# TF-IDF sonuçlarını DataFrame'e dönüştürün\n",
572
+ "df = pd.DataFrame(tfidf_matrix.toarray(), columns=feature_names)\n",
573
+ "\n",
574
+ "print(df)\"\"\"\n",
575
+ "\n",
576
+ "#text ve title a göre keywords belirlenmesi\n",
577
+ "\n",
578
+ "#------------------------------------------------------------------------------\n",
579
+ "\n",
580
+ "\n",
581
+ "#sbert ile alt başlıkların oluşturulması\n",
582
+ "\n",
583
+ "#kümelenme ile alt başlıkların belirlenmesi \n",
584
+ "\n",
585
+ "#-------------------------------------------------------------------------------\n",
586
+ "\n",
587
+ "#anahatar kelime ve alt başlıkların veri tabnaına eklnemesi "
588
+ ]
589
+ },
590
+ {
591
+ "cell_type": "code",
592
+ "execution_count": null,
593
+ "metadata": {},
594
+ "outputs": [],
595
+ "source": [
596
+ "#benzerlik hesaplaması için kullanılacak \n",
597
+ "from sentence_transformers import SentenceTransformer"
598
+ ]
599
+ },
600
+ {
601
+ "cell_type": "markdown",
602
+ "metadata": {},
603
+ "source": [
604
+ "Similarity Sentences "
605
+ ]
606
+ },
607
+ {
608
+ "cell_type": "markdown",
609
+ "metadata": {},
610
+ "source": []
611
+ },
612
+ {
613
+ "cell_type": "markdown",
614
+ "metadata": {},
615
+ "source": []
616
+ },
617
+ {
618
+ "cell_type": "code",
619
+ "execution_count": null,
620
+ "metadata": {},
621
+ "outputs": [],
622
+ "source": [
623
+ "#prompt oluştururak generate etmek için hazırlık"
624
+ ]
625
+ },
626
+ {
627
+ "cell_type": "markdown",
628
+ "metadata": {},
629
+ "source": [
630
+ "Bert Modeliyle tokenizer atama"
631
+ ]
632
+ },
633
+ {
634
+ "cell_type": "code",
635
+ "execution_count": null,
636
+ "metadata": {},
637
+ "outputs": [],
638
+ "source": [
639
+ "tokenizer= BertTokenizer.from_pretrained('bert-base-uncased')\n",
640
+ "model=BertForMaskedLM.from_pretrained('bert-base-uncased')\n",
641
+ "\n",
642
+ "\"\"\"BERT MODELİNİ AYARLAMA\n",
643
+ "\n",
644
+ "input_file: Modelin işlem yapacağı giriş dosyasının yolunu belirtir. Bu dosya, metin verilerini içermelidir.\n",
645
+ "-----------------------------------------------------------------------------------------------------------------\n",
646
+ "output_file: Modelin çıktılarının kaydedileceği dosyanın yolunu belirtir.\n",
647
+ "------------------------------------------------------------------------------------------------------------------\n",
648
+ "layers: Hangi BERT katmanlarının kullanılacağını belirler. Örneğin, \"-1,-2,-3,-4\" son dört katmanı ifade eder.\n",
649
+ "----------------------------------------------------------------------------------------------------------------------\n",
650
+ "bert_config_file: Önceden eğitilmiş BERT modelinin yapılandırma dosyasının yolu. Bu dosya modelin mimarisini belirler.\n",
651
+ "--------------------------------------------------------------------------------------------------------------------------\n",
652
+ "max_seq_length: Giriş sekanslarının maksimum uzunluğu. Sekanslar bu uzunluktan uzunsa kesilir, kısa ise sıfır ile doldurulur.\n",
653
+ "--------------------------------------------------------------------------------------------------------------------------------\n",
654
+ "init_checkpoint: Başlangıç ağırlıkları. Genellikle önceden eğitilmiş bir BERT modelinin ağırlıkları buradan yüklenir.\n",
655
+ "----------------------------------------------------------------------------------------------------------------------------\n",
656
+ "vocab_file: BERT modelinin eğitildiği kelime dağarcığının (vocabulary) dosya yolu. Modelin kelime parçacıklarını tanıması için gereklidir.\n",
657
+ "--------------------------------------------------------------------------------------------------------------------------------------------------\n",
658
+ "do_lower_case: Giriş metinlerinin küçük harfe mi dönüştürüleceğini belirler. Küçük harfli model için True, büyük harfli model için False olmalıdır.\n",
659
+ "-----------------------------------------------------------------------------------------------------------------------------------------------------------\n",
660
+ "batch_size: Tahminler sırasında kullanılacak veri kümesi boyutu.\n",
661
+ "--------------------------------------------------------------------------------------------------------------------------------------\n",
662
+ "use_tpu: TPU (Tensor Processing Unit) kullanılıp kullanılmayacağını belirler. True ise TPU, False ise GPU/CPU kullanılır.\n",
663
+ "--------------------------------------------------------------------------------------------------------------------------------\n",
664
+ "master: TPU kullanılıyorsa, TPU'nun ana makinesinin adresi.\n",
665
+ "---------------------------------------------------------------------------------------------------------------------------------------\n",
666
+ "num_tpu_cores: TPU kullanılacaksa, toplam TPU çekirdek sayısını belirtir.\n",
667
+ "-----------------------------------------------------------------------------------------------------------------------------------------\n",
668
+ "use_one_hot_embeddings: TPUs'da genellikle True olarak ayarlanır çünkü bu, tf.one_hot fonksiyonunu kullanarak embedding lookup işlemlerini hızlandırır. GPU/CPU kullanılıyorsa False tercih edilir.\"\"\"\n"
669
+ ]
670
+ },
671
+ {
672
+ "cell_type": "markdown",
673
+ "metadata": {},
674
+ "source": [
675
+ "t5 Modeli"
676
+ ]
677
+ },
678
+ {
679
+ "cell_type": "code",
680
+ "execution_count": null,
681
+ "metadata": {},
682
+ "outputs": [],
683
+ "source": [
684
+ "from transformers import pipeline\n",
685
+ "from dotenv import load_dotenv\n",
686
+ "import os \n",
687
+ "# Load model directly\n",
688
+ "from transformers import AutoTokenizer, AutoModelForSeq2SeqLM\n",
689
+ "\n",
690
+ "\n",
691
+ "#tokenizer ve modelin yüklenmesi\n",
692
+ "tokenizer = AutoTokenizer.from_pretrained(\"google/flan-t5-small\")\n",
693
+ "model = AutoModelForSeq2SeqLM.from_pretrained(\"google/flan-t5-small\")\n",
694
+ "prompt = \"Write an article about Machine Learning in Healthcare focusing on Introduction to ML and Applications in Healthcare.\"\n",
695
+ "#api anahtarını çevresel değişken al\n",
696
+ "api_key= os.getenv('HUGGINGFACE_API_KEY')\n",
697
+ "#env dosyasını yükleme\n",
698
+ "load_dotenv()\n",
699
+ "\n",
700
+ "#---------------------------------------------------------------------------------\n",
701
+ "if api_key is None:\n",
702
+ " raise ValueError(\"Apı anahtarı .env dosyasında bulunamadı\")\n",
703
+ "\n",
704
+ "# Başlıkları oluştur\n",
705
+ "headers = {\"Authorization\": f\"Bearer {api_key}\"}\n",
706
+ "\n",
707
+ "inputs=tokenizer(prompt, return_tensors=\"pt\")\n",
708
+ "input_sequence = \"[CLS] Machine Learning in Healthcare [SEP] Introduction to ML [SEP] Applications in Healthcare [SEP] machine learning, healthcare, AI [SEP]\"\n",
709
+ "#deneme data parçası\n",
710
+ "data = {\n",
711
+ " \"title\": \"Machine Learning in Healthcare\",\n",
712
+ " \"sub_headings\": [\"Introduction to ML\", \"Applications in Healthcare\"],\n",
713
+ " \"keywords\": [\"machine learning\", \"healthcare\", \"AI\"]\n",
714
+ "}\n",
715
+ "\n",
716
+ "# Girdiyi oluşturma\n",
717
+ "prompt = (\n",
718
+ " f\"Title: {data['title']}\\n\"\n",
719
+ " f\"Sub-headings: {', '.join(data['sub_headings'])}\\n\"\n",
720
+ " f\"Keywords: {', '.join(data['keywords'])}\\n\"\n",
721
+ " f\"Content: {input_sequence}\\n\"\n",
722
+ " \"Please generate a detailed article based on the above information.\"\n",
723
+ ")\n",
724
+ "\n",
725
+ "#metin üretimi \n",
726
+ "output_sequences = model.generate(\n",
727
+ " inputs['input_ids'],\n",
728
+ " max_length=300, # Üretilecek metnin maksimum uzunluğu\n",
729
+ " min_length=150, # Üretilecek metnin minimum uzunluğu\n",
730
+ " num_return_sequences=1, # Döndürülecek metin sayısı\n",
731
+ " do_sample=True, # Örneklemeye izin ver\n",
732
+ " top_k=50, # Top-k sampling kullan\n",
733
+ " top_p=0.95, # Top-p sampling kullan\n",
734
+ " repetition_penalty=1.2, # Anlamsız tekrarları önlemek için ceza\n",
735
+ " eos_token_id=tokenizer.eos_token_id # Tam cümlelerin oluşturulmasını sağla\n",
736
+ ")\n",
737
+ "\n",
738
+ "\n",
739
+ "# Üretilen metni token'lardan çözüp string'e çevir\n",
740
+ "generated_text = tokenizer.decode(output_sequences[0], skip_special_tokens=True)\n",
741
+ "\n",
742
+ "print(generated_text)\n"
743
+ ]
744
+ }
745
+ ],
746
+ "metadata": {
747
+ "kernelspec": {
748
+ "display_name": "base",
749
+ "language": "python",
750
+ "name": "python3"
751
+ },
752
+ "language_info": {
753
+ "codemirror_mode": {
754
+ "name": "ipython",
755
+ "version": 3
756
+ },
757
+ "file_extension": ".py",
758
+ "mimetype": "text/x-python",
759
+ "name": "python",
760
+ "nbconvert_exporter": "python",
761
+ "pygments_lexer": "ipython3",
762
+ "version": "3.10.11"
763
+ }
764
+ },
765
+ "nbformat": 4,
766
+ "nbformat_minor": 2
767
+ }