Чтобы найти несуществующее слово в словаре, чтобы дать ему значение - PullRequest
0 голосов
/ 23 февраля 2019

Добрый день, это своего рода странный вопрос, поэтому я постараюсь объяснить его настолько хорошо, насколько смогу.

У меня 2 входа, несколько твитов в списке ['tweet 1', 'tweet 2',...] и словарь с{'word1': value1;'word 2': value2;...}.

Представьте, что первый твит выглядит так:

«Я люблю есть картошку»

И из 500 слов в словаре естьэто значение для

{...; 'love': 3; ...; 'potato': -1; ...}.

Theслова «я», «еда» не включены в этот словарь.Таким образом, для каждого твита, который у меня есть, мне нужно искать, какие слова НЕ включены в него, чтобы дать им оценку значения твита.

Пример: я люблю есть картошку = 2

, поэтому

Я = 2

Еда = 2

Я начал с этого:

tweet=[]
values={}
    for list in tweet:
        divided_tweet=list.split()

и получить счетЯ использую это

[sum(valores.get(j, 0) for j in i.split()) for i in divided_tweet]

Подводя итог, мне нужно искать каждый твит, каждое слово, которого нет в словаре, чтобы дать ему значение.

Распечатка должна быть:

'I':2

'eating':2

(следующий твит)

'Inexistent word #3':'score of tweet #2' 

'Inexistent word #4':'score of tweet #2'

'Inexistent word #5':'score of tweet #2'

...

И так далее

Может ли кто-нибудь мне помочь?

Спасибо

PD: есть отрицательные и положительные значения

Ответы [ 3 ]

0 голосов
/ 23 февраля 2019

Вот пример кода, который дает вам, как действовать:

>>> import re
>>> values = {'love': 3, 'potatoes': -1}
>>> tweet = 'I love eating potatoes'
>>> tweet_words = re.split("\W+", tweet)
>>> tweet_value = sum(values.get(word, 0) for word in tweet_words)
>>> {w: tweet_value for w in tweet_words if w not in values}
{'I': 2, 'eating': 2}

Сначала мы разбиваем tweet в словах, используя re.split на каждую последовательность несловесных символов (не букву, цифра или подчеркивание).Это лучше, чем простой split, потому что вы не будете хранить апостофы, запятые и т. Д. Во-вторых, мы вычисляем значение tweet: values.get(word, 0) возвращает значение, если слово находится в values и 0иначе.В-третьих, мы создаем dict (вы можете напечатать его как хотите позже) со словом, отсутствующим в values, и назначаете им tweet_value

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

Для полной программы просто выполните:

for tweet in tweets:
    d = get_unknown_word_values(tweet) # as above
    for k, v in d.items():
        print("{}: {}".format(k, v))
0 голосов
/ 24 февраля 2019

Вы упомянули

Поэтому для каждого имеющегося у меня твита мне нужно найти, какие слова НЕ включены в него, чтобы дать им оценку значения твита.

Я предполагаю, что у вас есть словарь каждого твита с оценкой.Пример - tweet_values_dc в приведенном ниже коде.Если это не так, пожалуйста, дайте мне знать, где и как твиты получают оценку.

tweets_ls = ['I love eating potatoes', 'I love eating mangoes']
tweet_values_dc = {'I love eating potatoes': 2, 'I love eating mangoes': 3}
missing_words_values_dc = {'love':3,'potatoes':-1}
for atweet in tweets_ls:
    tweet_splited = atweet.split()
    for aword in tweet_splited:
        if aword not in missing_words_values_dc.keys():
            aTweetValue = tweet_values_dc.get(atweet)
            missing_words_values_dc.update({aword:aTweetValue})
print(missing_words_values_dc)

Вывод

{'love': 3, 'potatoes': -1, 'I': 2, 'eating': 2, 'mangoes': 3}
0 голосов
/ 23 февраля 2019

Вы можете попробовать что-то вроде этого.Я предполагаю, что значения слов в вашем словаре являются целыми числами или числами с плавающей запятой, а не строками:

tweets=[]
values={}
for tweet in tweets:
    twit = tweet.split()        
    item_vals = []    
    not_in_tweet = []    
    for item in twit:
        #get value of words
        if item in values:
            ival = values[item]
            item_vals.append(ival)
        else: #word not in dict
            not_in_tweet.append(item)
    sum_items = sum(item_vals)
    for item in not_in_tweet:
        values[item] = sum_items
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...