Untitled
unknown
plain_text
3 years ago
3.2 kB
7
Indexable
package com.hamedshahidi.wordfrequencyapp.controllers;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Comparator;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
import org.springframework.http.MediaType;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestPart;
import org.springframework.web.bind.annotation.RestController;
import com.hamedshahidi.wordfrequencyapp.models.WordFrequencyRequest;
import com.hamedshahidi.wordfrequencyapp.models.WordFrequencyResponse;
import jakarta.servlet.http.Part;
@RestController
public class WordFrequencyController {
@PostMapping(value = "/word-frequency", consumes = MediaType.MULTIPART_FORM_DATA_VALUE)
public ResponseEntity<WordFrequencyResponse> processWordFrequency(
@RequestPart("request") WordFrequencyRequest request) throws IOException {
try {
Part filePart = request.getFilePart();
InputStream fileInputStream = filePart.getInputStream();
Map<String, Integer> wordFrequencyMap = new HashMap<>();
BufferedReader reader = new BufferedReader(new InputStreamReader(fileInputStream));
String line;
while ((line = reader.readLine()) != null) {
// Process line by line here maybe?
String[] words = line.split("\\s+");
for (String word : words) {
wordFrequencyMap.put(word, wordFrequencyMap.getOrDefault(word, 0) + 1);
}
}
WordFrequencyResponse response = new WordFrequencyResponse(wordFrequencyMap);
return ResponseEntity.ok(response);
} catch (IOException e) {
}
return ResponseEntity.badRequest().build();
// try (BufferedReader reader = new BufferedReader(new
// InputStreamReader(req.getInputStream()))) {
// Map<String, Integer> wordFrequencyMap = new HashMap<>();
// String line;
// while ((line = reader.readLine()) != null) {
// List<String> words = Arrays.asList(line.toLowerCase().replaceAll("[^a-z0-9
// ]", "").split("\\s+"));
// words.forEach(word -> wordFrequencyMap.put(word,
// wordFrequencyMap.getOrDefault(word, 0) + 1));
// }
// List<Map.Entry<String, Integer>> sortedEntries = new
// ArrayList<>(wordFrequencyMap.entrySet());
// sortedEntries.sort(Map.Entry.comparingByValue(Comparator.reverseOrder()));
// List<String> topWords = sortedEntries.stream()
// .map(Map.Entry::getKey)
// .collect(Collectors.toList());
// WordFrequencyResponse response = new WordFrequencyResponse();
// response.setTopWords(topWords);
// return ResponseEntity.ok(response);
}
}Editor is loading...