首页 > 解决方案 > Python ValueError:形状不匹配:无法将对象广播到单个形状

问题描述

我的数据集文件看起来像

__label__ita Adesso datemi le chiavi.
__label__ara ياله من طفل محبب! يييي!
__label__eng You're a really bad bartender.
__label__epo En kiu hotelo vi restados?
__label__spa Él dijo haber perdido su vigor a los cuarenta.
__label__tat Сиңа булышмакчы идем.
__label__heb את מה פותח המפתח הזה?
__label__eng I caught a glimpse of him from the bus.
__label__eng I advise you to do that today.
__label__jpn この歌の歌い方を教えてくれますか。
__label__deu Ich habe gewusst, dass ihr Tom nicht vergessen würdet.

我正在使用这个函数来解析第一列标签

def parse_labels(path):
    with open(path, 'r') as f:
        return np.array( list(map(lambda x: x[9:], f.read().decode('utf-8').split() )) )

所以我拆分行并通过示例ita从前缀中获取标签__label__ita,但由于某种原因它中断了

test_labels = parse_labels(args.test)
print("Test labels:%d (sample)\n%s" % (len(test_labels),test_labels[:1]) )
print("labels:%s" % test_labels)

我得到

Test labels:71828 (sample)
[u'ita']
labels:[u'ita' u'' u'' ... u'' u'' u'']

虽然我应该有

[u'ita',u'ara',u'eng',...]

标签: pythonunicode

解决方案


您问题的标题似乎与内容不符,我正在回答正文中提出的问题。我使您的代码更加模块化并对其进行了测试。它返回您在问题结尾处拥有的所需列表 ( u'ita',u'ara',u'eng',...]):

def parse_labels(path):
    test_labels = []
    with open(path,'rb') as f:
        for line in f:
            test_labels.append(line.decode('utf-8').split(' ')[0][10:])
        return [x for x in test_labels if x] #removes empty strings
parse_labels(args.test)

推荐阅读