У меня есть список с содержанием, как: -

for 30 days
for 40 working days
for 20 weeks
for 2 months

Я хочу разделить каждое предложение и сравнить с набором ключевых слов: -

day
week
month
year

Если в строке присутствует ключевое слово 'days', то я хочу умножить число в этой строке на '1'. если присутствует ключевое слово 'month', умножьте число в этой строке на '30' и так далее ... я новичок в python, поэтому, пожалуйста!

мой код

   with open("test_term.csv", "rb") as file1:
        reader = csv.reader(file1)
        extractedlist = list(reader)
        #print extractedlist
def split_line(text):
    # split the text
    words = text[0].split(' ')
    # for each word in the line:
    new_list = []
    for word in words:
        #print word
        #print w2n.word_to_num(word)
        conversion = w2n.word_to_num(word)
        if isinstance(conversion, (int,long)):
            #print conversion
            new_list.append(conversion)            

        else:
            new_list.append(word)


    return new_list

for extraRow in extractedlist:
    worn = split_line(extraRow)
    keywords = {"day":1,"days":1,"year":365,"years":365,"week":7,"weeks":7,"month":30,"months":30}
    #for s in worn:
     #   splitted_string = s.split(' ')
    interesting_words = worn[2:]
    mult = 1
    for k,v in keywords.iteritems():
        for word in interesting_words :
            mult = v
            break
        result = mult*worn[1]
        print result

Сейчас у меня есть только одна входная строка for thirty working days, здесь 'thirty' преобразуется в '30', поэтому изношенные мы имеем 'for thirty working days' выход:

210  
900  
10950
900  
210  
10950
30   
30   

Но результат, который я ожидаю, равен 30 * 1, т. е. '30'

-2
safwan 13 Дек 2016 в 12:26

3 ответа

Лучший ответ

Вы могли бы сначала создать словарь: {{Х0}}

С расщепленной строкой вроде:

splitted_string = ["for", 30, "working", "days"]
interesting_words = splitted_string[2:] # ["working", "days"]

Оттуда вы можете просто получить элемент «days» и найти соответствующий элемент в своем словаре. Как только элемент найден, мы просто получаем значение и разрываем цикл.

mult = 1
for k,v in dictionnary.iteritems():
    for word in interesting_words :
        if k in word :
            mult = v
            break

Наконец вы можете выполнить свою операцию:

result = mult*splitted_string[1] #30
0
iFlo 13 Дек 2016 в 10:08

Если ваши данные находятся в списке, вы можете просто перебрать их. Затем разбейте каждую строку и найдите ключевое слово в конце списка ('day' in ' '.join(data_split[2:])):

data = ['for 30 days',
    'for 40 working days',
    'for 20 weeks',
    'for 2 months']

for d in data:
    data_split = d.split(' ')
    if 'day' in ' '.join(data_split[2:]):
        print(int(data_split[1]))
    elif 'month' in ' '.join(data_split[2:]):
        print(int(data_split[1]) * 30)
0
cyprieng 13 Дек 2016 в 09:55
import csv     # imports the csv module

f = open('file.csv', 'rb') # opens the csv file
results = []
try:
    reader = csv.reader(f)  # creates the reader object
    for row in reader:   # iterates the rows of the file in orders
        l = row[0].split(' ')
        if 'day' in l[2]:
            l[1] = int(l[1]) * 1
        elif 'working' in l[2]:
            if len(l) > 3  and 'day' in l[3]:
                l[1] = int(l[1]) * 1
        elif 'week' in l[2]:
            l[1] = int(l[1]) * 7
        elif 'month' in l[2]:
            l[1] = int(l[1]) * 30
        elif 'year' in l[2]:
            l[1] = int(l[1]) * 365
        results.append(l)

finally:
    print results
    f.close()      # closing
0
javidgon 13 Дек 2016 в 10:05