Как удалить соответствующее слово в словаре из строки? - PullRequest
1 голос
/ 17 января 2020

У меня есть словарь и текст:

{"любовь": 1, "ожидание": 2, "раздражение": - 2}

test = "я люблю тебя, это раздражает "

Мне нужно удалить слова из строки, если они появляются в словаре. Я пробовал этот код:

for k in dict:
    if k in test:
        test=test.replace(k, "")

Тем не менее, результат:

я, то есть ING

И это не то, что я ищу, так как не следует удалять «раздражать» как часть слова, все слово должно быть оценено. Как мне этого добиться?

Ответы [ 2 ]

1 голос
/ 17 января 2020

Во-первых, вам не следует присваивать имена переменным, которые также являются именами встроенных в классы, например dict.

Переменная test - это строка, состоящая из символов. Когда вы говорите, if k in test:, вы будете тестировать k, чтобы увидеть, является ли это подстрокой test. То, что вы хотите сделать, это разбить test на список слов и сравнить k с каждым полным словом в этом списке. Если слова разделены одним пробелом, то они могут быть «разделены» с помощью:

test .split ('')

Единственное осложнение состоит в том, что он создаст следующий список :

['i', '', 'you,', 'that', 'is', 'annoying']

Обратите внимание, что у третьего элемента все еще есть ,. Таким образом, мы должны сначала избавиться от знаков препинания, которые мы можем ожидать найти в нашем предложении:

test.replace('.', '').replace(',', ' ').split(' ')

Выход:

['i', '', 'you', '', 'that', 'is', 'annoying']

Следующее фактически избавит от всех знаков препинания:

import string
test.translate(str.maketrans('', '', string.punctuation))

Итак, теперь наш код становится:

>>> import string
>>> d = {"love":1, "expect":2, "annoy":-2}
>>> test="i love you, that is annoying"
>>> for k in d:
...     if k in test.translate(str.maketrans('', '', string.punctuation)).split(' '):
...         test=test.replace(k, "")
...
>>> print(test)
i  you, that is annoying
>>>

Теперь вы можете обнаружить, что в вашем предложении есть дополнительные пробелы, но вы можете выяснить, как избавиться от них.

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

вы можете использовать это:

query = "i love you, that is annoying"
query = query.replace('.', '').replace(',', '')
my_dict = {"love": 1, "expect": 2, "annoy": -2}
querywords = query.split()

resultwords = [word for word in querywords if word.lower() not in my_dict]
result = ' '.join(resultwords)

print(result)
>> 'i you, that is annoying'

Если вы хотите исключить все слова без учета ключа, преобразуйте все ключи в my_dict в нижний регистр:

my_dict = {k.lower(): v for k, v in my_dict.items()}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...