Различают, является ли предложение положительным или отрицательным - PullRequest
0 голосов
/ 17 декабря 2018
neg=['no','not',"don't",'have no interest in']
verb=['like','love','want']
senten=['I love apples.', 'I do not like grapes', 'I have no interest in wanting bananas.','No love for cars']

Я хотел бы знать, является ли мое предложение положительным или отрицательным.Если строка в предложении содержит только глагол, выведите «1».но если перед глаголом стоит отрицание, я дам ему «-1».

Пример:

like +1
love +1
want +1
no like -1
not want -1
don't love -1

Код:

for j in senten:
    j=j.lower()
    if any(x in j for x in verb):
        first_match = list(filter(lambda x: x in j, verb))[0]
        loca=j.find(first_match)  #location of the first word
        #the sentence might be too short.
        if int(loca)<=3:
            if j[int(loca)-3:int(loca)-1]== "no": 
                print(j)
                print(-1)
                continue
        elif int(loca)<=4:
            if j[int(loca)-3:int(loca)-1]== "no" or j[int(loca)-4:int(loca)-1]== "not":
                print(j)
                print(-1)
                continue
        elif int(loca)<=6:
            if j[int(loca)-3:int(loca)-1]== "no" or j[int(loca)-4:int(loca)-1]== "not" or j[int(loca)-6:int(loca)-1]== "don't":
                print(j)
                print(-1)
                continue
        elif int(loca)<=22:
            if j[int(loca)-3:int(loca)-1]== "no" or j[int(loca)-4:int(loca)-1]== "not" or j[int(loca)-6:int(loca)-1]== "don't" or j[int(loca)-20:int(loca)-1]== "have no interest in":
                print(j)
                print(-1) 
                continue                
        print(j)
        print(1)

Мой код не содержит ошибоки он печатает:

i love apples.
1
i do not like grapes
-1
i have no interest in wanting bananas.
-1
no love for cars
-1

Но я хотел бы попросить совета, если есть лучший способ написать это?Потому что я добавлю больше слов в neg, мне нужно сделать много выражений if или, и это может быть неэффективно.Спасибо:)

Ответы [ 2 ]

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

Вы можете упростить команду следующим образом:

neg=['no','not',"don't",'have no interest in']
verb=['like','love','want']
senten=['I love apples.', 'I do not like grapes', 'I have no interest in wanting bananas.','No love for cars', "There's no sun, but I still love the weather."]

for chk in senten:
    cnt=0
    for n in neg:
        for v in verb:
            if n+' '+ v in chk.lower():
                cnt+=1
    if cnt > 0:
        print("(-)", chk)
    else:
        print("(+)", chk)

результаты будут выглядеть так:

  • (+) Я люблю яблоки.
  • (-) Я не люблю виноград
  • (-) Я не заинтересован в желании бананов.
  • (-) Нет любви к автомобилям
  • (+) Солнца нет, но я все еще люблю погоду.
0 голосов
/ 17 декабря 2018

Если я правильно понимаю, вы ищете любой минус, за которым следует пробел, за которым следует любой глагол.

for s in senten:
    for v in verb:
        for n in neg:
            if n + ' ' + v in s:
                print('found a negative')
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...