Created
January 6, 2019 17:42
-
-
Save yasincidem/6e0b7310c4e6d843269f699836f225c8 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import java.io.BufferedReader; | |
import java.io.FileNotFoundException; | |
import java.io.FileReader; | |
import java.io.IOException; | |
import java.util.Arrays; | |
import java.util.HashMap; | |
import java.util.Map; | |
import java.util.regex.Matcher; | |
import java.util.regex.Pattern; | |
public class Main { | |
public static void main(String[] args) { | |
String regexForMention = "([@][\\w_]+)"; | |
String regexForHastag = "([#][\\w_]+)"; | |
String regexForEmoji = "(^|\\s)(:D|:\\/)(?=\\s|[^\"-(*+\\-/->@-~]|$)"; | |
// final String regexForHastag = "(?:[\uD83C\uDF00-\uD83D\uDDFF]|[\uD83E\uDD00-\uD83E\uDDFF]|[\uD83D\uDE00-\uD83D\uDE4F]|[\uD83D\uDE80-\uD83D\uDEFF]|[\u2600-\u26FF]\uFE0F?|[\u2700-\u27BF]\uFE0F?|\u24C2\uFE0F?|[\uD83C\uDDE6-\uD83C\uDDFF]{1,2}|[\uD83C\uDD70\uD83C\uDD71\uD83C\uDD7E\uD83C\uDD7F\uD83C\uDD8E\uD83C\uDD91-\uD83C\uDD9A]\uFE0F?|[\u0023\u002A\u0030-\u0039]\uFE0F?\u20E3|[\u2194-\u2199\u21A9-\u21AA]\uFE0F?|[\u2B05-\u2B07\u2B1B\u2B1C\u2B50\u2B55]\uFE0F?|[\u2934\u2935]\uFE0F?|[\u3030\u303D]\uFE0F?|[\u3297\u3299]\uFE0F?|[\uD83C\uDE01\uD83C\uDE02\uD83C\uDE1A\uD83C\uDE2F\uD83C\uDE32-\uD83C\uDE3A\uD83C\uDE50\uD83C\uDE51]\uFE0F?|[\u203C\u2049]\uFE0F?|[\u25AA\u25AB\u25B6\u25C0\u25FB-\u25FE]\uFE0F?|[\u00A9\u00AE]\uFE0F?|[\u2122\u2139]\uFE0F?|\uD83C\uDC04\uFE0F?|\uD83C\uDCCF\uFE0F?|[\u231A\u231B\u2328\u23CF\u23E9-\u23F3\u23F8-\u23FA]\uFE0F?)"; | |
Pattern patternForHastag = Pattern.compile(regexForHastag); | |
Pattern patternForMention = Pattern.compile(regexForMention); | |
Pattern patternForEmoji = Pattern.compile(regexForEmoji); | |
CommandLine result = CliFactory.parseArguments(CommandLine.class, args); | |
String entityName = result.getEntity(); // girilen entity name'i okuyor mention mi hastag mi? | |
System.out.println("Entity is : " + entityName); | |
int numberOfEntity = 0; | |
numberOfEntity = result.getNumber(); | |
System.out.println("Number of entity is : " + numberOfEntity + "\n"); // girilen entity sayısı 10,20,30 vs. ? | |
boolean reversed = result.isReverse(); // Tersten mi değil mi ? | |
System.out.println("Is reversed ? : " + reversed); | |
boolean ignored = result.isIgnore(); // Büyük-küçük olayı görmezden gelinsin mi gelinmesin mi ? | |
System.out.println("Is ignored : ? " + ignored); | |
String fileName = result.fileName(); // Bu da en son okuyacağımız text dosyasının adını dönderiyor. | |
System.out.println("filename is : " + fileName); | |
if (entityName.toLowerCase().equals("mention")) { | |
if (ignored) { | |
if (reversed) { | |
printMapReversed(putValuesToHasmapWithIgnored(fileName, patternForMention),numberOfEntity); | |
} else { | |
printMapNotReversed(putValuesToHasmapWithIgnored(fileName, patternForMention), numberOfEntity); | |
} | |
} else { | |
if (reversed) { | |
printMapReversed(putValuesToHasmapWithNotIgnored(fileName, patternForMention),numberOfEntity); | |
} else { | |
printMapNotReversed(putValuesToHasmapWithNotIgnored(fileName, patternForMention), numberOfEntity); | |
} | |
} | |
} else if (entityName.toLowerCase().equals("hashtag")) { | |
if (ignored) { | |
if (reversed) { | |
printMapReversed(putValuesToHasmapWithIgnored(fileName, patternForHastag),numberOfEntity); | |
} else { | |
printMapNotReversed(putValuesToHasmapWithIgnored(fileName, patternForHastag),numberOfEntity); | |
} | |
} else { | |
if (reversed) { | |
printMapReversed(putValuesToHasmapWithNotIgnored(fileName, patternForHastag),numberOfEntity); | |
} else { | |
printMapNotReversed(putValuesToHasmapWithNotIgnored(fileName, patternForHastag),numberOfEntity); | |
} | |
} | |
} else if (entityName.toLowerCase().equals("emoji")) { | |
if (ignored) { | |
if (reversed) { | |
printMapReversed(putValuesToHasmapWithIgnored(fileName, patternForEmoji),numberOfEntity); | |
} else { | |
printMapNotReversed(putValuesToHasmapWithIgnored(fileName, patternForEmoji),numberOfEntity); | |
} | |
} else { | |
if (reversed) { | |
printMapReversed(putValuesToHasmapWithNotIgnored(fileName, patternForEmoji),numberOfEntity); | |
} else { | |
printMapNotReversed(putValuesToHasmapWithNotIgnored(fileName, patternForEmoji),numberOfEntity); | |
} | |
} | |
} else { | |
System.out.println("please give a correct argument; it can be \"mention\" or \"hashtag\""); | |
} | |
} | |
public static HashMap<String, Integer> putValuesToHasmapWithNotIgnored(String fileName, Pattern pattern) { | |
HashMap<String, Integer> resultHashMap = new HashMap<>(); | |
String line = null; | |
try { | |
FileReader fileReader = | |
new FileReader(fileName); | |
// Always wrap FileReader in BufferedReader. | |
BufferedReader bufferedReader = | |
new BufferedReader(fileReader); | |
while ((line = bufferedReader.readLine()) != null) { | |
Matcher matcher = pattern.matcher(line); | |
while (matcher.find()) { | |
if (resultHashMap.containsKey(matcher.group())) { | |
int keyValue = resultHashMap.get(matcher.group()); | |
keyValue++; | |
resultHashMap.put(matcher.group(), keyValue); | |
} else { | |
resultHashMap.put(matcher.group(), 1); | |
} | |
} | |
} | |
bufferedReader.close(); | |
} catch (FileNotFoundException ex) { | |
System.out.println( | |
"Unable to open file '" + | |
fileName + "'"); | |
} catch (IOException ex) { | |
System.out.println( | |
"Error reading file '" | |
+ fileName + "'"); | |
// Or we could just do this: | |
// ex.printStackTrace(); | |
} | |
return resultHashMap; | |
} | |
public static HashMap<String, Integer> putValuesToHasmapWithIgnored(String fileName, Pattern pattern) { | |
HashMap<String, Integer> resultHashMap = new HashMap<>(); | |
String line = null; | |
try { | |
FileReader fileReader = | |
new FileReader(fileName); | |
// Always wrap FileReader in BufferedReader. | |
BufferedReader bufferedReader = | |
new BufferedReader(fileReader); | |
while ((line = bufferedReader.readLine()) != null) { | |
Matcher matcher = pattern.matcher(line); | |
while (matcher.find()) { | |
if (resultHashMap.containsKey(matcher.group().toLowerCase())) { | |
int keyValue = resultHashMap.get(matcher.group().toLowerCase()); | |
keyValue++; | |
resultHashMap.put(matcher.group().toLowerCase(), keyValue); | |
} else { | |
resultHashMap.put(matcher.group().toLowerCase(), 1); | |
} | |
} | |
} | |
bufferedReader.close(); | |
} catch (FileNotFoundException ex) { | |
System.out.println( | |
"Unable to open file '" + | |
fileName + "'"); | |
} catch (IOException ex) { | |
System.out.println( | |
"Error reading file '" | |
+ fileName + "'"); | |
// Or we could just do this: | |
// ex.printStackTrace(); | |
} | |
return resultHashMap; | |
} | |
private static void printMapNotReversed(Map map, int entityNumber) { | |
Object[] b = map.entrySet().toArray(); | |
Arrays.sort(b, (o1, o2) -> ((Map.Entry<String, Integer>) o2).getValue() | |
.compareTo(((Map.Entry<String, Integer>) o1).getValue())); | |
for (int i = 0; i < entityNumber; i++) { | |
System.out.println(((Map.Entry<String, Integer>) b[i]).getKey() + "\t" | |
+ (((Map.Entry<String, Integer>) b[i]).getValue())); | |
} | |
} | |
private static void printMapReversed(Map map, int entityNumber) { | |
Object[] b = map.entrySet().toArray(); | |
Arrays.sort(b, (o1, o2) -> ((Map.Entry<String, Integer>) o2).getValue() | |
.compareTo(((Map.Entry<String, Integer>) o1).getValue())); | |
for (int i = b.length-1; i > (b.length - 1 - entityNumber ); i--) { | |
System.out.println(((Map.Entry<String, Integer>) b[i]).getKey() + "\t" | |
+ (((Map.Entry<String, Integer>) b[i]).getValue())); | |
} | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment