
Java
- 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.
 
terminal
           Sıra          Kelime   Tekrar Sayısı
             1         durumu           3597683
             2          kimse           2978002
             3     kullanılan           2559100
             4          olmak           2294841
             5          etmek           2231271
             6       bulunmak           1782450
             7         olarak           1527319
             8      anlamında           1335877
             9        olmayan           1308213
            10         duruma           1256157
2023-10-02T12:04:32.615+03:00  INFO 2489 --- [           main] c.t.worldlist.controller.WordController  : Toplam Okuma Yazma Geçen Süre :0 saat 8 dk 33 sn tamamlandı.Proje Terminal Çıktısı
Interface WordService
WordSevice.java
import java.util.List;
import com.tugsef.worldlist.entities.Word;
public interface WordService {
	List<Word> allWord();
	void startWordTxt();
	void wordsDesc();
}
Interface WordService
Class WordManager
WordManager.java
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.Random;
import java.util.TreeMap;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import com.fasterxml.jackson.core.type.TypeReference;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.tugsef.worldlist.business.abstracts.WordService;
import com.tugsef.worldlist.business.rules.WordBusinesRules;
import com.tugsef.worldlist.entities.Word;
import lombok.AllArgsConstructor;
import lombok.NoArgsConstructor;
@AllArgsConstructor
@NoArgsConstructor
public class WordManager implements WordService {
	private Logger logger = LoggerFactory.getLogger(WordManager.class);
	private WordBusinesRules businesRules = new WordBusinesRules();
	private Random random = new Random();
	@Override
	public List<Word> allWord() {
		ObjectMapper objectMapper = new ObjectMapper();
		List<Word> worList = null;
		try {
			worList = objectMapper.readValue(new File("wordList.json"), new TypeReference<List<Word>>() {
			});
			logger.info("Created wordlist size: " + worList.size());
		} catch (IOException e) {
			logger.info(WordManager.class.getName() + e);
		}
		return worList;
	}
	@Override
	public void startWordTxt() {
		String filePathTxt = "wordList.txt";
		List<Word> words = allWord();
		int randomWord = random.nextInt(words.size() - 1);
		long startTime = System.currentTimeMillis();
		long maksimumBoyut = 4294967296L;
		try {
			File filePath = new File(filePathTxt);
			if (!filePath.exists()) {
				filePath.createNewFile();
				logger.info("Created file: " + filePathTxt);
			}
			FileWriter fileWriter = new FileWriter(filePath, true);
			BufferedWriter writer = new BufferedWriter(fileWriter);
			long writteSize = 0;
			logger.info("Random ilk değer atandı(index): " + randomWord + " dosya yazılıyor...");
			while (writteSize < maksimumBoyut) {
				writer.write(words.get(randomWord) + "\n");
				writteSize = filePath.length();
				randomWord = random.nextInt(words.size() - 1);
			}
			logger.info("Random olarak değerler dosya ya yazıldı(İlk değer): " + "(" + words.get(randomWord) + ")");
			writer.close();
			long endTime = System.currentTimeMillis();
			float fileSize = filePath.length() / (1024 * 1024 * 1024);
			logger.info(fileSize + " GB dosya oluşturuldu. " + (endTime - startTime) / 1000 / 60 / 60 + " saat "
					+ (endTime - startTime) / 1000 / 60 + " dk " + ((endTime - startTime) / 1000) % 60
					+ " sn tamamlandı.");
		} catch (IOException e) {
			logger.info(WordManager.class.getName() + e);
		}
	}
	@Override
	public void wordsDesc() {
		Map<String, Integer> wordCounts = null;
		List<String> wordAll = null;
		try {
			long startTime = System.currentTimeMillis();
			wordCounts = new TreeMap<>();
			BufferedReader reader = new BufferedReader(new FileReader("wordList.txt"));
			String line;
			while ((line = reader.readLine()) != null) {
				String[] words = line.split("\\s+");
				wordAll = new ArrayList<String>();
				for (String word : words) {
					word = word.replaceAll("[.,=:;()-]", "");
					if (word.length() > 4)
						wordAll.add(word);
				}
				for (String word : wordAll) {
					word = word.toLowerCase();
					wordCounts.put(word, wordCounts.getOrDefault(word, 0) + 1);
				}
			}
			reader.close();
			long endTime = System.currentTimeMillis();
			logger.info("En çok kullanılan en çok kelimeler bulundu." + (endTime - startTime) / 1000 / 60 / 60
					+ " saat " + (endTime - startTime) / 1000 / 60 + " dk " + ((endTime - startTime) / 1000) % 60
					+ " sn tamamlandı.");
			this.businesRules.sortWordAll(wordCounts);
		} catch (IOException e) {
			logger.info(WordManager.class.getName() + e);
		}
	}
}
Class WordManager
Class WordBusinesRules
WordBusinesRules.java
@AllArgsConstructor
public class WordBusinesRules {
	public void sortWordAll(Map<String, Integer> wordCounts) {
		Formatter fmt = new Formatter();
		List<Map.Entry<String, Integer>> list = new ArrayList<>(wordCounts.entrySet());
		Collections.sort(list, new Comparator<Map.Entry<String, Integer>>() {
			@Override
			public int compare(Map.Entry<String, Integer> o1, Map.Entry<String, Integer> o2) {
				return o2.getValue().compareTo(o1.getValue());
			}
		});
		fmt.format("%15s  %15s\n", "Kelime", "Tekrar Sayısı");
		 list.stream().limit(10).forEach(entry -> {
				fmt.format("%14s  %17s\n", entry.getKey(), entry.getValue());
		 });;
		System.out.println(fmt);
	}
}
Class WordController
WordController.java
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Controller;
import com.tugsef.worldlist.business.abstracts.WordService;
import com.tugsef.worldlist.business.concretes.WordManager;
import lombok.NoArgsConstructor;
@Controller
@NoArgsConstructor
public class WordController {
	private WordService wordService = new WordManager();
	private Logger logger = LoggerFactory.getLogger(WordController.class);
	public void start() {
		long startTime = System.currentTimeMillis();
		this.wordService.startWordTxt();
		this.wordService.wordsDesc();
		long endTime = System.currentTimeMillis();
		logger.info("Toplam Okuma Yazma Geçen Süre :" + (endTime - startTime) / 1000 / 60 / 60 + " saat "
				+ (endTime - startTime) / 1000 / 60 + " dk " + ((endTime - startTime) / 1000) % 60 + " sn tamamlandı.");
	}
}
Class Word
Word.java
import java.util.List;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
@Data
@AllArgsConstructor
@NoArgsConstructor
public class Word {
	private String word;
	private List<String> meanings;
	@Override
	public String toString() {
		String meaning = "";
		for (String string : meanings) {
			meaning += string + ". ";
		}
		return word + " : " + meaning;
	}
}
Class WorldListApplication
WorldListApplication.java
package com.tugsef.worldlist;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import com.tugsef.worldlist.controller.WordController;
ƒ
@SpringBootApplication
public class WorldListApplication {
	public static void main(String[] args) {
		SpringApplication.run(WorldListApplication.class, args);
		WordController controller = new WordController();
		controller.start();
	}
}