- NodeJS yada java ile https://raw.githubusercontent.com/bilalozdemir/tr-word-list/master/files/words.json buradaki listede bulunan kelimeleri tamamen random kullanarak 4gb büyüklüğünde bir txt dosyası oluştur
- 4GB büyüklüğündeki dosyada en çok geçen 10 kelimeyi bul. Bu adımda kelimenin karakter sayısı 4'ten büyük çok sık kullanılan bağlaçları kolayca filtrelemiş olur.
const fs = require('fs');
const worldListJson = require('./wordList');
const filePath = 'new-file.txt'; // Çıktı dosyası
const totalFileSizeInBytes = 4 * 1024 * 1024 * 1024; // 4 GB
const startTime = new Date();
const writeStream = fs.createWriteStream(filePath, { flags: 'a' });
console.log('\n-> İşlem başladı...');
start();
// Dosya yoksa oluşmasını bekle
// var olun dosyanın boyutunu oku ve var olan dosyanın kalan satırlarını tamamla
async function start() {
await controlFile()
fs.stat(filePath, (err, stats) => {
if (err) {
console.error(`Hata: ${err}`);
return;
}
const fileSizeInBytes = stats.size;
function writeData() {
const randomValue = getRandomValue(worldListJson.length)
const wordJson = worldListJson[randomValue]
const wordText = wordJson.word + " : " + wordJson.meanings.toString() + "\n";
writeStream.write(wordText, (err) => {
if (err) {
console.error('Dosya yazma hatası:', err);
return;
}
if (writeStream.bytesWritten < totalFileSizeInBytes - fileSizeInBytes) {
// Toplam dosya boyutunu aşmadıysa bir sonraki veri bloğunu yaz
writeData();
} else {
// Dosya yazma işlemi tamamlandı
writeStream.end(() => {
console.log(`-> Veri ${filePath} dosyasına yazıldı.`);
const endTime = new Date();
const elapsedTime = endTime - startTime;
console.log(`\n-> Yazma işlem süresi: ${Math.floor(elapsedTime / 1000 / 60 / 60)} saat ${Math.floor(elapsedTime / 1000 / 60)} dakika ${(Math.floor(elapsedTime / 1000) % 60)} saniye. Toplam Milisaniye: ${elapsedTime}`);
console.log("\n------------------------------\n");
readText(elapsedTime);
});
}
});
}
writeData();
})
}
function readText() {
const readline = require('readline');
const wordMap = new Map(); // Kelimelerin sayısını tutmak için bir harita (Map)
const rl = readline.createInterface({
input: fs.createReadStream(filePath),
output: process.stdout,
terminal: false
});
rl.on('line', (line) => {
// Satırdaki kelimeleri ayırır.
const words = line.split(/\s+/);
// Her kelimenin sayısını haritada bulur sayısını artırır.
words.forEach((word) => {
// Kelimenin karakter sayısı 4'ten büyükse kelimeyi ayrıştırır.
if (word.length > 4) {
// kelimenin sağındaki ve solundaki değerleri dikkate almaz
const cleanedWord = word.toLowerCase().replace(/[.,\/#!$%\^&\*;:{}=\-_`~()]/g, '');
if (wordMap.has(cleanedWord)) {
wordMap.set(cleanedWord, wordMap.get(cleanedWord) + 1);
} else {
wordMap.set(cleanedWord, 1);
}
}
});
});
rl.on('close', () => {
// Kelimeyi çoktan aza sıralar
const sortedWords = [...wordMap.entries()].sort((a, b) => b[1] - a[1]);
// En çok geçen 10 kelime
const top10Words = sortedWords.slice(0, 10);
console.log('En çok geçen 10 kelime:\n');
top10Words.forEach((word, index) => {
console.log(`${index + 1}. ${word[0]}: ${word[1]} kez`);
});
const endTime = new Date();
const elapsedTime = endTime - startTime;
console.log(`\n-> OkumaYazma işlem süresi: ${Math.floor(elapsedTime / 1000 / 60 / 60)} saat ${Math.floor(elapsedTime / 1000 / 60)} dakika ${(Math.floor(elapsedTime / 1000) % 60)} saniye. Toplam Milisaniye: ${elapsedTime}`);
});
}
console.log("\n------------------------------\n");
function getRandomValue(max) {
return Math.floor(Math.random() * (max - 1));
}
// Rastgele değer oluştur.
function controlFile() {
if (!fs.existsSync(filePath)) {
console.log(`\n-> ${filePath} dosyası oluşturuldu.`);
} else {
console.log(`\n-> ${filePath} dosyası mevcut.`);
}
}