按主要词组

时间:2015-10-08 20:47:33

标签: java regex algorithm collections set

考虑以下TreeSet:

  • 蓝色
  • 蓝色大车
  • 蓝色帽子123
  • 红色 apple 123
  • 红色汽车
  • 红色衬衫
  • 红色夹克
  • 一些词(必须忽略)
  • 无用的词(必须忽略)

此套装有两个主要词语蓝色红色以及不同的关键词。
我需要按照这些主要词汇进行分组,以便获得包含所有可能关键词的列表。类似的东西:

  • 蓝色:花,大,汽车,帽子,123
  • 红色:苹果,123,汽车,衬衫,夹克

我认为步骤应如下:

  1. 检测主要字词
    • 列表按字母顺序排列,因此主要词汇彼此相邻
    • 它只能是条目中的第一个单词
    • 它至少包含3个字母
    • 并非每个条目都有一个主要单词(条目某些单词无用的单词应该被跳过)
  2. 按主要词组分组
    • 某种"合并":取所有具有相同主词的条目并将其从每个条目中删除,以便只剩下剩余的关键词
      • blue flower
      •    
      • blue 大车
      •    
      • blue hat 123
    • 在这种情况下关键词:花,大,车,帽子,123 留下
  3. 有人可以给我一个建议如何完成它以及我需要什么?

1 个答案:

答案 0 :(得分:1)

我认为你不需要正则表达式。使用String.split(" ")在空格上拆分每个字符串,然后检查第一个项目,将其与“主要”字词列表进行比较。

TreeSet<String> originalSet = // as per question
List<String> mainWords = Arrays.asList("blue", "red");
Map<String, Set<String>> words = new HashMap<>();
for(String mainWord : mainWords) {
    words.put(mainWord, new HashSet<String>());
}
for(String line : originalSet) {
    String[] items = line.split(" ");
    if(words.keySet().contains(items[0])) {
        for(int i = 1 ; i < items.length ; i++) {
            words.get(items[0]).add(items[i]);
        }
    }
}