我创建了一种方法来浏览word文档并查找某些关键字。这些关键字被添加到ArrayList中。如果找到关键字,则将其添加到另一个ArrayList。据我所知,我的代码遍历关键字数组中的每个项目,并检查文档是否存在。有没有办法让我的代码更有效率,也许可以将所有关键字与第一个单词进行比较,然后再与第二个单词进行比较,依此类推?对于较大的文件来说它很慢(很明显),但我想它不应该那么慢。
这是我的方法
public final void findKeywordsInDocument(POITextExtractor te, Map<String,ArrayList<Keyword>> tagMap, ArrayList<Integer> existingTags, ArrayList<Integer> KeywordsFound) {
final String[] tagArrays = {"KEYWORDS", "CUSTOMERS", "SYSTEM_DEPS", "MODULES", "DRIVE_DEFS", "PROCESS_IDS"};
for(int i=0; i<tagArrays.length; i++) {
System.out.println("\nNew " + tagArrays[i] + " found in the document:");
ArrayList<Keyword> al = tagMap.get(tagArrays[i]);
int itemsFound = 0;
for (Keyword item : al) {
if (te.getText().contains(item.getName())) {
/*
* Check if a document is not tagged with this keyword already
*/
if (!existingTags.contains(item.getId())) {
KeywordsFound.add(item.getId());
System.out.println(item.getName());
itemsFound++;
}
}
}
if(itemsFound == 0) {
System.out.println("Not Found");
}
}
}
这就是我称呼它的方式
Map<String,ArrayList<Keyword>> tagMap = new HashMap<>();
tagMap.put("KEYWORDS", Keywords);
tagMap.put("CUSTOMERS", Customers);
tagMap.put("SYSTEM_DEPS", SystemDeps);
tagMap.put("MODULES", Modules);
tagMap.put("DRIVE_DEFS", DriveDefs);
tagMap.put("PROCESS_IDS", ProcessIDs);
ArrayList<Integer> KeywordsFound;
if(file_name.endsWith(".docx") || file_name.endsWith(".docm")) {
ArrayList<Integer> existingTags = new ArrayList<Integer>();
XWPFDocument document = new XWPFDocument(resultSet.getBinaryStream(3)); //blob
XWPFWordExtractor wordExtractor = new XWPFWordExtractor(document);
KeywordsFound = new ArrayList<Integer>();
findKeywordsInDocument(wordExtractor, tagMap, existingTags, KeywordsFound);
}
关键字类
public class Keyword {
private int id;
private String name;
public Keyword() {
int id;
String name;
}
public Keyword(int id, String name) {
this.id = id;
this.name = name;
}
public int getId() {
return id;
}
public String getName() {
return name;
}
}