Determine a simple Genus-species identifier for an OTU, if possible.
    If OTU is not identified to the species level, name it as
    Unclassified (familly/genus/etc...).

    :type tax: list
    :param tax: QIIME-style taxonomy identifiers, e.g.
                 ["k__Bacteria", u"p__Firmicutes", u"c__Bacilli", ...

    :rtype: str
    :return: Returns genus-species identifier based on identified taxonomical
             level.

def otu_name(tax):
    """
    Determine a simple Genus-species identifier for an OTU, if possible.
    If OTU is not identified to the species level, name it as
    Unclassified (familly/genus/etc...).

    :type tax: list
    :param tax: QIIME-style taxonomy identifiers, e.g.
                 ["k__Bacteria", u"p__Firmicutes", u"c__Bacilli", ...

    :rtype: str
    :return: Returns genus-species identifier based on identified taxonomical
             level.
    """
    extract_name = lambda lvl: "_".join(lvl.split("_")[2:])
    spname = "spp."
    for lvl in tax[::-1]:
        if len(lvl) <= 3:
            continue
        if lvl.startswith("s"):
            spname = extract_name(lvl)
        elif lvl.startswith("g"):
            return "{}_{}".format(extract_name(lvl), spname)
        else:
            if spname != "spp.":
                return spname
            else:
                return "Unclassified_{}".format(extract_name(lvl))