Python ValueError: несоответствие формы: объекты не могут быть переданы одной фигуре - PullRequest
0 голосов
/ 03 марта 2019

Мой файл набора данных выглядит как

__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',...]

Ответы [ 2 ]

0 голосов
/ 04 марта 2019

Поскольку коды языков имеют фиксированные смещения в каждой строке, это может быть обработано более просто с помощью понимания списка.data.txt - это входные данные в кодировке UTF-8.Этот код будет работать в Python 2 и 3:

from __future__ import print_function
import io

def parse_labels(path):
    with io.open(path,encoding='utf8') as f:
        return [line[9:12] for line in f]

print(parse_labels('data.txt'))

Вывод (Python 3):

['ita', 'ara', 'eng', 'epo', 'spa', 'tat', 'heb', 'eng', 'eng', 'jpn', 'deu']
0 голосов
/ 03 марта 2019

Название вашего вопроса не соответствует содержанию, и я отвечаю на вопрос, заданный в теле.Я сделал ваш код немного более модульным и протестировал его.Возвращает нужный список, который у вас есть в конце вопроса (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)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...