Заменить определенные слова в пользовательском словаре и другие на 0 - PullRequest
0 голосов
/ 08 декабря 2018

Итак, у меня есть набор данных обзоров с такими отзывами, как

Просто лучший.Я купил это в прошлом году.Все еще использую.До сегодняшнего дня проблем не возникало. Удивительное время автономной работы.Прекрасно работает в темноте или при дневном свете.Лучший подарок для любого любителя книг.

(Это из оригинального набора данных, я удалил все знаки пунктуации и в обработанном наборе данных все строчные)

Что я хочу сделатьэто заменить некоторые слова на 1 (согласно моему словарю) и другие на 0. Мой словарь

dict = {"amazing":"1","super":"1","good":"1","useful":"1","nice":"1","awesome":"1","quality":"1","resolution":"1","perfect":"1","revolutionary":"1","and":"1","good":"1","purchase":"1","product":"1","impression":"1","watch":"1","quality":"1","weight":"1","stopped":"1","i":"1","easy":"1","read":"1","best":"1","better":"1","bad":"1"}

Я хочу, чтобы мои выходные данные были такими:

0010000000000001000000000100000

Я использовал этот код:

df['newreviews'] = df['reviews'].map(dict).fillna("0")

Всегда возвращает 0 в качестве вывода.Я не хотел этого, поэтому я взял 1 и 0 в качестве строк, но, несмотря на это, я получаю тот же результат.Любые предложения, как решить эту проблему?

Ответы [ 3 ]

0 голосов
/ 08 декабря 2018

Сначала не используйте dict в качестве имени переменной, потому что встроенные функции (зарезервированное слово Python), затем используйте list comprehension с get для замены несоответствующих значений на 0.

Уведомление:

Если данные похожи на date.Amazing - пробел после пунктуации не требуется, замените пробелом.

df = pd.DataFrame({'reviews':['Simply the best. I bought this last year. Still using. No problems faced till date.Amazing battery life. Works fine in darkness or broad daylight. Best gift for any book lover.']})

d = {"amazing":"1","super":"1","good":"1","useful":"1","nice":"1","awesome":"1","quality":"1","resolution":"1","perfect":"1","revolutionary":"1","and":"1","good":"1","purchase":"1","product":"1","impression":"1","watch":"1","quality":"1","weight":"1","stopped":"1","i":"1","easy":"1","read":"1","best":"1","better":"1","bad":"1"}

df['reviews']  = df['reviews'].str.replace(r'[^\w\s]+', ' ').str.lower()

df['newreviews'] = [''.join(d.get(y, '0')  for y in x.split()) for x in df['reviews']]

Альтернатива:

df['newreviews'] =  df['reviews'].apply(lambda x: ''.join(d.get(y, '0')  for y in x.split()))

print (df)
                                             reviews  \
0  simply the best  i bought this last year  stil...   

                        newreviews  
0  0011000000000001000000000100000  
0 голосов
/ 08 декабря 2018

Вы можете сделать это с помощью

df.replace(repl, regex=True, inplace=True)

, где df - ваш фрейм данных, а repl - ваш словарь.

0 голосов
/ 08 декабря 2018

Вы можете сделать:

# clean the sentence
import re
sent = re.sub(r'\.','',sent)

# convert to list
sent = sent.lower().split()

# get values from dict using comprehension
new_sent = ''.join([str(1) if x in mydict else str(0) for x in sent])
print(new_sent)

'001100000000000000000000100000'
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...