private String determineDeviceBrand(UserAgent userAgent) {
        // If no brand is known but we do have a URL then we assume the hostname to be the brand.
        // We put this AFTER the creation of the DeviceName because we choose to not have
        // this brandname in the DeviceName.

        String deviceBrand = null;

        AgentField informationUrl = userAgent.get(AGENT_INFORMATION_URL);
        if (!informationUrl.isDefaultValue()) {
            deviceBrand = extractBrandFromUrl(informationUrl.getValue());
        }

        if (deviceBrand != null) {
            return deviceBrand;
        }

        AgentField informationEmail = userAgent.get(AGENT_INFORMATION_EMAIL);
        if (!informationEmail.isDefaultValue()) {
            deviceBrand = extractBrandFromEmail(informationEmail.getValue());
        }

        if (deviceBrand != null) {
            return deviceBrand;
        }

        AgentField deviceName = userAgent.get(DEVICE_NAME);
        if (!deviceName.isDefaultValue()) {
            if (!GENERIC_DEVICE_NAMES.contains(deviceName.getValue())) {
                // Only try the non generic names.
                List<Pair<Integer, Integer>> splitList = WordSplitter.getInstance().createSplitList(deviceName.getValue());
                if (splitList.size() > 1) {
                    // If one of the parts is too generic we skip it.
                    List<String> splits = WordSplitter.getInstance().getSplits(deviceName.getValue(), splitList, 1, 5);
                    boolean update = true;
                    for (String split : splits) {
                        if (GENERIC_DEVICE_NAMES.contains(split.toLowerCase(Locale.ROOT))) {
                            update = false;
                            break;
                        }
                    }
                    if (update) {
                        // If we have at least 2 parts we assume the first one is the Brand name
                        deviceBrand = Normalize.brand(splits.get(0));
                    }
                }
            }
        }

        return deviceBrand;
    }
Some device names are "Generic" so we ignore them when trying to extract a Brand.
analyzer/src/main/java/nl/basjes/parse/useragent/calculate/CalculateDeviceBrand.java