我按照伪代码编写了一个Python函数,将标记转换为特征。它的作用是返回最常出现的k代币。我想知道是否有更好/更好的方式来编写函数。
def token2feature(k,ts): #k is number of desired features; ts is a list of all tokens
import operator
hs={} #create an empty dictionary
for tok in ts:
hs[tok] =hs[tok]+1 if tok in hs else 1
sorted_hs=sorted(hs.items(),key=operator.itemgetter(1),reverse=True)
return dict(sorted_hs[:k]).keys()
编辑:
输入是令牌列表
ts=['a','b','a','a','b'','c']
k=2
输出是列表中发生的最多k个元素。
['a','b']
答案 0 :(得分:3)
使用Counter
:
from collections import Counter
def token2feature(k, ts):
return [t for t, c in Counter(ts).most_common(k)]
print(token2feature(2, ['a', 'a', 'b', 'c', 'b'])) #=> ['a', 'b']
来自文档:
计数器是用于计算可哈希对象的dict子类。它是一个无序集合,其中元素存储为字典键,它们的计数存储为字典值。
答案 1 :(得分:1)
假设k
是" top k"和ts
是您计算的项目
您可能正在寻找Counter
的most_common
方法
from collections import Counter
from operator import itemgetter as at
def token2feature(k, ts):
return map(at(0), Counter(hs).most_common(k))