2016-06-14 13 views
0

私はテキストをグループ化するのに助けが必要です。私はこのような加盟店のリストを持っています。最初のいくつかはSMART ATTの隣にあるCENTURYLINKに属しています。これらのテキストをグループ化/単一ラベルを持つか...彼らはに陥るプールごととして予めテキストをグループ化するテキスト

001センチュリーIREP

003センチュリーMY ACCOUNT

003-ClearTalkワイヤレス

おかげでこれらのテキストを分類

004センチュリーIVR

005センチュリー繰り返し

006センチュリーWIFI

007センチュリーCABLE

111 SMART ATT

112 SMART ATTが

113 - SMART - ATT

114 SMART ATT

120 - SMART - ATT

131 - SMART - ATT

137 - SMART - ATT

A WIRELESSアメリー

A WIRELESS ANNA

ワイヤレスAPTOS

A WIRELESS ARCADIA

A WIRELESSアーノルズPAR

A WIRELESS ASHLAND

あなたはいくつかのオプションを持っているA WIRELESS ATHENS

答えて

0

import java.util.Arrays; 
import java.util.LinkedList; 
import java.util.List; 
import java.util.Map; 
import java.util.TreeMap; 
import java.util.stream.Collectors; 

public class GroupVendors { 
    public static void main(final String[] args) { 
     final List<String> vendors = Arrays.asList(
      "CENTURYLINK", 
      "SMART", 
      "ATT", 
      "A WIRELESS"); 

     final List<String> uncategorizedVendors = Arrays.asList(
      "001 CENTURYLINK IREP", 
      "003 CENTURYLINK MY ACCOUNT", 
      "003-ClearTalk Wireless", 
      "004 CENTURYLINK IVR", 
      "005 CENTURYLINK RECURRING", 
      "006 CENTURYLINK WIFI", 
      "007 CENTURYLINK CABLE", 
      "111 SMART ATT", 
      "112 SMART ATT", 
      "113 - SMART - ATT", 
      "114 SMART ATT", 
      "120 - SMART - ATT", 
      "131 - SMART - ATT", 
      "137 - SMART - ATT", 
      "A WIRELESS AMERY", 
      "A WIRELESS ANNA", 
      "A WIRELESS APTOS", 
      "A WIRELESS ARCADIA", 
      "A WIRELESS ARNOLDS PAR", 
      "A WIRELESS ASHLAND", 
      "A WIRELESS ATHENS"); 

     final Map<String, List<String>> categorizedVendors = new TreeMap<>(); 

     for (final String vendor : vendors) { 
      categorizedVendors.put(vendor, new LinkedList<String>()); 
     } 

     for (final String vendor : uncategorizedVendors) { 
      for (final Map.Entry<String, List<String>> entry : categorizedVendors.entrySet()) { 
       final String category = entry.getKey(); 
       if (vendor.contains(category)) { 
        final List<String> bin = entry.getValue(); 
        bin.add(vendor); 
       } 
      } 
     } 

     for (final Map.Entry<String, List<String>> entry : categorizedVendors.entrySet()) { 
      final String category = entry.getKey(); 
      final List<String> bin = entry.getValue(); 
      System.out.printf("vendors(\"%s\") = {%n", category); 
      if (!bin.isEmpty()) { 
       System.out.printf(" %s%n", 
        bin.stream() 
         .map((vendor) -> String.format("\"%s\"", vendor)) 
         .collect(Collectors.joining(",\n "))); 
      } 
      System.out.println("}"); 
     } 
    } 
} 

サンプル実行::私はあなたが興味のあるベンダーのカテゴリのリストは、「センチュリー」であることを前提として作られました

% java GroupVendors 
vendors("A WIRELESS") = { 
    "A WIRELESS AMERY", 
    "A WIRELESS ANNA", 
    "A WIRELESS APTOS", 
    "A WIRELESS ARCADIA", 
    "A WIRELESS ARNOLDS PAR", 
    "A WIRELESS ASHLAND", 
    "A WIRELESS ATHENS" 
} 
vendors("ATT") = { 
    "111 SMART ATT", 
    "112 SMART ATT", 
    "113 - SMART - ATT", 
    "114 SMART ATT", 
    "120 - SMART - ATT", 
    "131 - SMART - ATT", 
    "137 - SMART - ATT" 
} 
vendors("CENTURYLINK") = { 
    "001 CENTURYLINK IREP", 
    "003 CENTURYLINK MY ACCOUNT", 
    "004 CENTURYLINK IVR", 
    "005 CENTURYLINK RECURRING", 
    "006 CENTURYLINK WIFI", 
    "007 CENTURYLINK CABLE" 
} 
vendors("SMART") = { 
    "111 SMART ATT", 
    "112 SMART ATT", 
    "113 - SMART - ATT", 
    "114 SMART ATT", 
    "120 - SMART - ATT", 
    "131 - SMART - ATT", 
    "137 - SMART - ATT" 
} 

を次のように最も簡単なの中で、ベンダーのストリングに一致するようになります「スマート」、「ATT」、および「ワイヤレス」を含む。これにより、両方のビンに「SMART」と「ATT」の両方を含むすべてのエントリを分類する効果があります。各ベンダーを正確に1つのビンに分類するには、カテゴリーが重複している場合はどのベンダーを解決する必要があります。

関連する問題