FreelanceBot
71 строка · 2.7 Кб
1package telegramBot.task;
2
3import telegramBot.dto.OrderDto;
4import telegramBot.enums.Language;
5
6import java.util.HashMap;
7import java.util.Map;
8import java.util.regex.Pattern;
9
10public class OrderQueryRelation {
11private static final Map<String, String[]> keywords = new HashMap<>();
12
13static {
14keywords.put(Language.JAVASCRIPT.getName(), new String[]{"JavaScript", "Java Script",
15"Java Скрипт", "Java Скрипте" , "JS"});
16keywords.put(Language.PYTHON.getName(), new String[]{"Python"});
17keywords.put(Language.JAVA.getName(), new String[]{"Java"});
18keywords.put(Language.PHP.getName(), new String[]{"PHP"});
19keywords.put(Language.RUBY.getName(), new String[]{"Ruby"});
20keywords.put(Language.C.getName(), new String[]{"C"});
21}
22
23
24private static String[] getKeywords(Language language){
25return keywords.get(language.getName());
26}
27
28public static Language correctRelation(OrderDto dto, Language language) {
29String title = dto.getTitle(), details = dto.getDetails();
30boolean inTitle = findKeyword(title, language);
31boolean inDetails = findKeyword(details, language);
32
33if (inTitle) return language;
34else if (inDetails) {
35for(Language lang : Language.getLanguages()){
36if(lang != language && findKeyword(title, lang)) return lang;
37}
38return language;
39}
40return Language.UNKNOWN;
41}
42
43private static boolean findKeyword(String field, Language language) {
44for (String keyword : getKeywords(language)) {
45if (!containsSkipOrderPattern(field, keyword) &&
46containsKeywordPattern(field, keyword)) return true;
47}
48return false;
49}
50
51private static boolean containsSkipOrderPattern(String field, String keyword){
52Pattern skipPattern = Pattern.compile("(((не нужны)|(не нужно)|(без)|(кроме))(\\s|(\\s\\W+\\s))(?i)(" + keyword + "))|" +
53"((?i)(" + keyword + ")((\\s|(\\s?\\p{P}\\s?))|(\\s\\W+\\s))((не нужны)|(не нужно)))");
54
55return skipPattern.matcher(field).find();
56}
57
58private static boolean containsKeywordPattern(String field, String keyword){
59Pattern keywordPattern = Pattern.compile("(\\s|(\\p{P}\\s)?)(?i)(" + keyword + ")((\\p{P}|\\s)?)");
60return keywordPattern.matcher(field).find();
61
62}
63
64public static boolean falseJavaPattern(OrderDto order){
65String title = order.getTitle(), details = order.getDetails();
66Pattern jsPattern = Pattern.compile("(\\s|(\\p{P}\\s)?)(?i)(java script)((\\p{P}|\\s)?)");
67return jsPattern.matcher(title).find() || jsPattern.matcher(details).find();
68}
69
70
71}
72