2017-01-04 1 views
-2

Это мой код, и он разбивает данные на предложения. Каждое послание помечено эмоцией. Мне нужно подсчитать количество предложений для каждой метки (эмоции) и разбить набор данных по меткам. СпасибоКак подсчитать количество твитов для каждой метки в наборе данных, а затем данные splt с помощью меток (java)?

public class DataProcessor { 

    public static void main(String[] args) throws FileNotFoundException { 
     try (Scanner read = new Scanner (new File("E:\\blabla.txt"))) { 
      read.useDelimiter("::"); 
      String tweet; 
      while(read.hasNext()) 
      { 
       tweet = read.next();    
       System.out.println(tweet + " "+ "\n"); //just for debugging 
      } 
     } 
    } 
} 

выход выглядит так

радости: Если бы тест сегодня. Но я все еще был хороший

+0

Ваш выход имеет более чем одно предложение? - так ли каждое предложение помечено одной эмоцией или нет? –

+0

Это твиты из твиттера, поэтому вы правы, некоторые из них содержат 2 предложения. Но каждый твит обозначается одной эмоцией. Твиты разделены «::» в моем наборе данных. –

ответ

0
public static void main(String[] args) throws FileNotFoundException { 
    HashMap<String, List<String>> map = new HashMap<>(); 
    try (Scanner read = new Scanner (new File("E:\\blabla.txt"))) { 
     read.useDelimiter("::"); 
     String tweet; 
     while(read.hasNext()) 
     { 
      tweet = read.next(); 
      String[] split = tweet.split(":"); 
      String key = split[0]; 
      if (!map.containsKey(key)) { 
       map.put(key, new ArrayList<>()); 
      } 
      map.get(key).add(split[1]); 
     } 
    } 
}  

map содержит все эмоции с предложениями. Чтобы получить количество предложений, давайте назовите их твитами, потому что иногда они содержат более одного, вы можете использовать map.get("joy").size().

Если твит также может содержать :, я бы изменил tweet.split(":"); на tweet.split(":", 2);, так что для разделения используется только первый разделитель.

Чтобы проверить результат map вы можете использовать этот код:

map.forEach((e, t) -> { 
    System.out.println(e); 
    t.forEach(System.out::println); 
}); 
+0

большое спасибо! –

Смежные вопросы