Python - 查找通常出现在一个列表中但不出现在另一个列表中的后缀

时间:2014-07-27 21:42:11

标签: python

我有3个单词列表。一个列表仅包含南非荷兰语中的单词。一个列表仅包含英语单词。第三个列表包含两种语言的单词。我试图自动确定第三个列表中的哪些单词属于前两个列表中的哪个。我想到的一种方法是查看最后出现的最长的子串。

因此,例如,英语中的单词将以...结尾,而南非语中的单词将以...结尾(例如字母与alfabeties)。

如何自动查找通常出现在第一个列表中但不在第二个列表中的后缀?我想用Python来做这件事。我在列表中使用Python列表。

1 个答案:

答案 0 :(得分:1)

假设固定后缀大小suffix_size和"通常"的阈值thresh

from collections import Counter, defaultdict

def suffix_counts(wordlist):
    output = defaultdict(int)
    counts =  Counter(
        word[-suffix_size:]
        for word in wordlist
        if len(word) >= suffix_size
    )
    output.update(counts)
    return output

afrikaans_suffixes = suffix_counts(afrikaans_list)
english_suffixes = suffix_counts(english_list)
common_english_suffixes = [
    suffix
    for suffix, count in english_suffixes.iteritems()
    if (float(count) / (count + afrikaans_suffixes[suffix])) > thresh
]  # All suffixes which are found in English thresh percent of the time

话虽如此,这可能不是解决这个问题的最佳方法 - 您可能会发现使用类似nltk的方法为每种语言构建n-gram模型是值得的,然后使用这些模型对未知单词进行分类