独特的令牌计数速度

Unique token count speed

我正在尝试将文档列表(每个文档都是标记列表)转换为 Blei Lab 主题估计例程通常使用的格式,其中 ['token1', 'token4', 'token1'] 的文档变为 2 1:2 4:1。我能够生成唯一计数,但速度非常慢。

token_list = sorted(set([stem for document in clean_tokens for stem in document]))

# token_nums = [[token_list.index(tok) for tok in document] for document in clean_tokens]
token_nums = []
for document in clean_tokens:
    document_nums = []
    for tok in document:
        document_nums.append(token_list.index(tok))
    token_nums.append(document_nums)    

counters = [Counter(document_nums).items() for document_nums in token_nums]
tok_strs = [' '.join([str(a[0]) + ':' + str(a[1]) for a in count]) for count in counters]

第二行(注释掉,重写为循环以提高可读性)是我的表现非常糟糕的地方。对于每个文档,内部列表理解正在搜索整个 token_list 以便在整个标记列表中找到正确的索引。然后必须对每个文档进行此操作。

我怎样才能加快搜索所有这些索引的过程?

如果有更有效的方式来执行整个过程,我也很乐意听到。

使用字典代替 .index,像这样

dd = dict((i, k) for k, i in enumerate(token_list))

for document in clean_tokens:
    print [dd[x] for x in document]