在文本中搜索特定单词。效率问题

时间:2018-01-30 16:36:23

标签: java arraylist

我创建了一种方法来浏览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;
  }
}

0 个答案:

没有答案