Advertisement
dzocesrce

[NP] Word Vectors

Apr 27th, 2025
165
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 3.09 KB | None | 0 0
  1. import java.util.*;
  2. import java.util.stream.Collectors;
  3. import java.util.stream.IntStream;
  4. import java.util.*;
  5. import java.util.stream.Collectors;
  6. import java.util.stream.IntStream;
  7.  
  8. class WordVectors {
  9.  
  10.     Map<String, List<Integer>> numericVectors;
  11.     List<String> text;
  12.  
  13.     public WordVectors(String[] words, List<List<Integer>> vectors) {
  14.         this.numericVectors = new LinkedHashMap<>();
  15.         this.text = new ArrayList<>();
  16.         for (int i = 0; i < words.length; i++) {
  17.             numericVectors.putIfAbsent(words[i], new ArrayList<>(vectors.get(i)));
  18.         }
  19.     }
  20.  
  21.     public void readWords(List<String> wordsList) {
  22.         wordsList.stream().forEach(i -> text.add(i));
  23.     }
  24.  
  25.     public List<Integer> slidingWindow(int n) {
  26.         for (String word : text) {
  27.             if(numericVectors.containsKey(word))
  28.                 continue;
  29.             numericVectors.putIfAbsent(word, new ArrayList<>());
  30.             IntStream.range(0, 5).boxed().forEach(i -> numericVectors.get(word).add(5));
  31.         }
  32.         //numericVectors.values().forEach(i-> System.out.println(i));
  33.         List<Integer> textVector = new ArrayList<>();
  34.         for (int i = 0; i <= text.size() - n; i++) {
  35.             textVector.add(getMaxValue(i, n, text.get(i)));
  36.         }
  37.         return textVector;
  38.     }
  39.  
  40.     private Integer getMaxValue(int i, int n, String word) {
  41.         List<Integer> temp = new ArrayList<>();
  42.         for (int k = 0; k < 5; k++) {
  43.             temp.add(0); // точно: имаме 5 димензии
  44.         }
  45.         for (int j = i; j < i + n; j++) {
  46.             for (int k = 0; k < 5; k++) {
  47.                 temp.set(k, temp.get(k) + numericVectors.get(text.get(j)).get(k));
  48.             }
  49.         }
  50.         return temp.stream().max(Comparator.naturalOrder()).orElse(0);
  51.     }
  52.  
  53.     }
  54.  
  55. /**
  56.  * Word vectors test
  57.  */
  58. public class WordVectorsTest {
  59.     public static void main(String[] args) {
  60.         Scanner scanner = new Scanner(System.in);
  61.         int n = scanner.nextInt();
  62.         scanner.nextLine();
  63.         String[] words = new String[n];
  64.         List<List<Integer>> vectors = new ArrayList<>(n);
  65.         for (int i = 0; i < n; ++i) {
  66.             String line = scanner.nextLine();
  67.             String[] parts = line.split("\\s+");
  68.             words[i] = parts[0];
  69.             List<Integer> vector = Arrays.stream(parts[1].split(":"))
  70.                     .map(Integer::parseInt)
  71.                     .collect(Collectors.toList());
  72.             vectors.add(vector);
  73.         }
  74.         n = scanner.nextInt();
  75.         scanner.nextLine();
  76.         List<String> wordsList = new ArrayList<>(n);
  77.         for (int i = 0; i < n; ++i) {
  78.             wordsList.add(scanner.nextLine());
  79.         }
  80.         WordVectors wordVectors = new WordVectors(words, vectors);
  81.         wordVectors.readWords(wordsList);
  82.         n = scanner.nextInt();
  83.         List<Integer> result = wordVectors.slidingWindow(n);
  84.         System.out.println(result.stream()
  85.                 .map(Object::toString)
  86.                 .collect(Collectors.joining(",")));
  87.         scanner.close();
  88.     }
  89. }
  90.  
  91.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement