-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathMatcher.java
More file actions
72 lines (63 loc) · 2.55 KB
/
Matcher.java
File metadata and controls
72 lines (63 loc) · 2.55 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
import java.util.*;
/**
* Matcher
*/
public class Matcher{
public void Match(final Chunk chunk,final Long prevCnkLength ,final String names) {
HashSet<String> wordsHash = new HashSet();
try {
final var namesArr = Arrays.asList(names.split(","));
var curChunk = NormelizeChunk(chunk.cnkText.toString());
final var allWords = Arrays.asList(curChunk.split(" "));
for (final var word : allWords) {
if (!wordsHash.contains(word.toLowerCase())) {
wordsHash.add(word.toLowerCase());
}
}
for (String name : namesArr) {
//Classic for extention for "contains", not supported in java
if (wordsHash.contains(name)||wordsHash.contains(name+",")|| wordsHash.contains(name+"'s")) {
ApplyResults(chunk,prevCnkLength,name);
}
}
} catch (Exception e) {
//TODO:
}
}
private String NormelizeChunk(String curChunk) {
curChunk=curChunk.replace(","," ");
curChunk=curChunk.replace("\n"," ");
return curChunk;
}
private void ApplyResults(Chunk chunk,Long prevCnkLength,String name) {
Integer nextIndex=0;
String searchText=chunk.cnkText.toString().toLowerCase();
while (searchText.indexOf(name,nextIndex)>0) {
AddCordinate(chunk,prevCnkLength, name,nextIndex);
nextIndex=chunk.cnkText.indexOf(name,nextIndex)+1;
}
}
private void AddCordinate(Chunk chunk,Long prevCnkLength, String name,Integer nextIndex) {
List<Cordinate> matches=new ArrayList<Cordinate>();
Cordinate cor=new Cordinate();
//Char offset inside the block
cor.charOffset= Long.valueOf(chunk.cnkText.indexOf(name,nextIndex))+prevCnkLength;
cor.lineOffset=CalculateLine(chunk,name,chunk.cnkText.indexOf(name,nextIndex))+chunk.cnkNum*1000;
matches.add(cor);
//lock
synchronized (this) {
name=name.substring(0, 1).toUpperCase()+ name.substring(1);
if(Aggregator.finalMapper.get(name)==null){
Aggregator.finalMapper.put(name, matches);
}
else
{
Aggregator.finalMapper.get(name).addAll(matches);
}
}
}
private Integer CalculateLine(Chunk chunk, String name, Integer charOffset) {
String curBlock=chunk.cnkText.substring(0,charOffset);
return curBlock.split("\\n").length;
}
}