Как токенизировать в numpy .ndarray? - PullRequest
0 голосов
/ 17 апреля 2020

У меня есть следующий ndarray: X_train: [[<'title'>, <'description'>]]

array([['Boots new', 'Boots 46 size new'], ['iPhone 7 plus 128GB Red',
        '\xa0/\n/\n The price is only for Instagram subscribers'], ...],
      dtype=object)

Итак, теперь мне нужно токенизировать заголовок и описание. Я написал следующую функцию:

from nltk.tokenize import WordPunctTokenizer


tokenizer = WordPunctTokenizer()
def preprocess(text: str) -> str:
    return ' '.join(tokenizer.tokenize(text.lower()))

Вопрос в том, как быстрее и эффективнее обрабатывать данные с помощью ndarrays? Я не хочу использовать вложенные циклы. Предположительно, есть способ сделать это быстро с numpy.

Я пробовал:

for row in X_train:
    row = [preprocess(x) for x in row]

Однако, это не изменилось, и я получаю:

array([['Boots new', 'Boots 46 size new'], ['iPhone 7 plus 128GB Red',
            '\xa0/\n/\n The price is only for Instagram subscribers'], ...],
          dtype=object)

Но я хочу этого:

array([['boots new', 'boots 46 size new'], ['iphone 7 plus 128gb red',
                '/ / the price is only for instagram subscribers'], ...],
              dtype=object)

Буду благодарен за любую возможную помощь.

1 Ответ

0 голосов
/ 17 апреля 2020

Я не уверен насчет скорости. Но я делаю это с помощью функции map.

sentences=['Boots new', 'Boots 46 size new'], ['iPhone 7 plus 128GB Red',
        '\xa0/\n/\n The price is only for Instagram subscribers']

def lowr(s):
    return [s[0].lower(), s[1].lower()]
result = list(map(lowr, sentences))

print(result)
[['boots new', 'boots 46 size new'], ['iphone 7 plus 128gb red', '\xa0/\n/\n the price is only for instagram subscribers']]

Как упоминалось в комментариях @hpaulj: лямбда-функция - это просто альтернативный синтаксис для функции. Так что если вы хотите сделать то же самое с лямбда-функцией, то это будет:

result = list(map(lambda s: [s[0].lower(), s[1].lower()], sentences))
print(result)

Вывод такой же:

[['boots new', 'boots 46 size new'], ['iphone 7 plus 128gb red', '\xa0/\n/\n the price is only for instagram subscribers']]
...