Skip to content

Instantly share code, notes, and snippets.

@yasincidem
Created January 6, 2019 17:42
Show Gist options
  • Save yasincidem/6e0b7310c4e6d843269f699836f225c8 to your computer and use it in GitHub Desktop.
Save yasincidem/6e0b7310c4e6d843269f699836f225c8 to your computer and use it in GitHub Desktop.
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