Текст, группирующий текст

Мне нужна помощь в группировке текстов... У меня есть список таких продавцов, и мы видим, что первые несколько принадлежат CENTURYLINK рядом с SMART ATT... есть ли способ сгруппировать/пометить эти тексты одной меткой или классифицировать их тексты в соответствии с пулом, в который они попадают..

заранее спасибо

001 CENTURYLINK IREP

003 CENTURYLINK МОЙ АККАУНТ

003-ClearTalk Wireless

004 CENTURYLINK IVR

005 CENTURYLINK ПОВТОРЯЮЩИЙСЯ

006 СЕНТУРИЛИНК WI-FI

007 КАБЕЛЬ CENTURYLINK

111 УМНЫЙ АТТ

112 УМНЫЙ АТТ

113 - СМАРТ - АТТ

114 УМНЫЙ АТТ

120 - СМАРТ - АТТ

131 - СМАРТ - АТТ

137 - СМАРТ - АТТ

БЕСПРОВОДНАЯ АМЕРИ

БЕСПРОВОДНАЯ АННА

БЕСПРОВОДНОЙ АПТОС

БЕСПРОВОДНАЯ АРКАДИЯ

БЕСПРОВОДНОЙ АРНОЛЬДС ПАР

БЕСПРОВОДНОЙ ASHLAND

БЕСПРОВОДНЫЕ АФИНЫ


person pskumar    schedule 14.06.2016    source источник


Ответы (1)


У вас есть несколько вариантов. Одним из самых простых было бы сопоставление подстрок поставщика следующим образом:

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"
}

Я сделал предположение, что список категорий поставщиков, которые вас интересуют, - это "CENTURYLINK", "SMART", "ATT" и "A WIRELESS". Это приводит к категоризации всех записей, содержащих как «SMART», так и «ATT» в обеих своих ячейках. Если вы хотите, чтобы каждый поставщик относился к одной категории только в одной ячейке, вам нужно решить, какой поставщик вы предпочитаете, когда категории избыточны.

person Dylon    schedule 18.06.2016