2016-12-13 11 views
-2

のセットで各単語を比較したいと私は内容のリストを持っている: - 私は、それぞれの文を分割し、キーワードのセットと比較したいどのようにリスト内の文字列を分割し、キーワード

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'

以下のような分割さ文字列で dictionnary = {"day":1, "month":30 ... }

+0

は本当にそのような内容はありますか右/左側に複数のテキストがあることができますか? –

+0

[このデモ](https://ideone.com/8MHDFv)を確認してください。 –

+0

私はちょうど私のために働く答えを投稿しました(私は自分のコンピュータで試しました) – javidgon

答えて

0

は、あなたが最初dictionnaryを作成することができ、そこから

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

、あなただけの要素「日」を取得し、あなたのdictionnaryの対応する要素を見つけることができます。要素が見つかると、値を取得してループを解除します。

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

あなたは最終的にあなたの操作をperfromことができます。

result = mult*splitted_string[1] #30 
+0

splitted_string = worn.split( '')... AttributeErrorを返します: 'list'オブジェクトに属性 'split'がありません...どうすれば修正できますか? – safwan

+0

これは、すでに着用されているのはリストであり、ストリングではないことを意味します。 >>> s = "for 30 days" >>> s.split( '')はあなたに与えます: ['、' 30 '、' days '] – iFlo

+0

これはコードのちょうど一部です。実際に着用されている書き込みは、実際には別の作業全体が行われています...とにかく私は1つずつ着用してストリングを分割することができます...リストは着用されており、リストです。 – safwan

0
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

あなたのデータがリストにある場合、あなたはそれを反復処理することができます。次に、各文字列を分割し、リストの最後('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) 
関連する問題