Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import java.util.*;
- import java.util.stream.Collectors;
- import java.util.stream.IntStream;
- import java.util.*;
- import java.util.stream.Collectors;
- import java.util.stream.IntStream;
- class WordVectors {
- Map<String, List<Integer>> numericVectors;
- List<String> text;
- public WordVectors(String[] words, List<List<Integer>> vectors) {
- this.numericVectors = new LinkedHashMap<>();
- this.text = new ArrayList<>();
- for (int i = 0; i < words.length; i++) {
- numericVectors.putIfAbsent(words[i], new ArrayList<>(vectors.get(i)));
- }
- }
- public void readWords(List<String> wordsList) {
- wordsList.stream().forEach(i -> text.add(i));
- }
- public List<Integer> slidingWindow(int n) {
- for (String word : text) {
- if(numericVectors.containsKey(word))
- continue;
- numericVectors.putIfAbsent(word, new ArrayList<>());
- IntStream.range(0, 5).boxed().forEach(i -> numericVectors.get(word).add(5));
- }
- //numericVectors.values().forEach(i-> System.out.println(i));
- List<Integer> textVector = new ArrayList<>();
- for (int i = 0; i <= text.size() - n; i++) {
- textVector.add(getMaxValue(i, n, text.get(i)));
- }
- return textVector;
- }
- private Integer getMaxValue(int i, int n, String word) {
- List<Integer> temp = new ArrayList<>();
- for (int k = 0; k < 5; k++) {
- temp.add(0); // точно: имаме 5 димензии
- }
- for (int j = i; j < i + n; j++) {
- for (int k = 0; k < 5; k++) {
- temp.set(k, temp.get(k) + numericVectors.get(text.get(j)).get(k));
- }
- }
- return temp.stream().max(Comparator.naturalOrder()).orElse(0);
- }
- }
- /**
- * Word vectors test
- */
- public class WordVectorsTest {
- public static void main(String[] args) {
- Scanner scanner = new Scanner(System.in);
- int n = scanner.nextInt();
- scanner.nextLine();
- String[] words = new String[n];
- List<List<Integer>> vectors = new ArrayList<>(n);
- for (int i = 0; i < n; ++i) {
- String line = scanner.nextLine();
- String[] parts = line.split("\\s+");
- words[i] = parts[0];
- List<Integer> vector = Arrays.stream(parts[1].split(":"))
- .map(Integer::parseInt)
- .collect(Collectors.toList());
- vectors.add(vector);
- }
- n = scanner.nextInt();
- scanner.nextLine();
- List<String> wordsList = new ArrayList<>(n);
- for (int i = 0; i < n; ++i) {
- wordsList.add(scanner.nextLine());
- }
- WordVectors wordVectors = new WordVectors(words, vectors);
- wordVectors.readWords(wordsList);
- n = scanner.nextInt();
- List<Integer> result = wordVectors.slidingWindow(n);
- System.out.println(result.stream()
- .map(Object::toString)
- .collect(Collectors.joining(",")));
- scanner.close();
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement