独特的令牌计数速度
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]
我正在尝试将文档列表(每个文档都是标记列表)转换为 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]