2016-12-07 9 views
0

私は2つの大きなcsvファイルを持っています。主要なものは製品名としてフィールドを持ち、他のCSVファイルにはいくつかのキーワードがあります。私は最初のCSVファイルの製品名でこれらのキーワードを探しています。現時点では私のコードは次のようである:2つの大きなcsvファイル(Python)で文字列の部分文字列を見つける方法

class Keyword: 
    # keyword class for adding match keywords 
     def __init__(self): 
      self.data={} 
     def add(self, keyword, count): 
      if keyword in self.data.keys(): 
      self.data[keyword]+=count 
      else: 
      self.data[keyword]=count 
     def get_match(self): 
      temp = [] 
      for key, value in self.data.iteritems(): 
       temp.append(key) 
       temp.append(value) 
      return temp 

for i, product_row in product_df.iterrows(): 
    product_title = product_row['title'].lower().replace(',','') 
    k = Keyword() 
    for j, keyword_row in keyword_df.iterrows(): 
     if keyword_row['keyword'] in product_title: 
      k.add(keyword_row['keyword'], keyword_row['count']) 

    match_items = k.get_match() 
    if len(match_items)>0: 
     temp = product_row.tolist() 
     temp = [str(x).replace(',','') for x in temp] 
     temp.extend(match_items) 
     print>>sys.stdout, str(temp).strip('[]').replace("'",'') 
    else: 
     pass 

このコードは非常に遅く、私はお互いに比較し得るべきであるこれらのCSVファイルの多くを持っています。あなたはこれらのファイルを比較するより効率的な方法を知っていますか?

+0

コードインデントを修正してください。 –

+0

csvファイルの製品名フィールドに各キーワード*が表示される回数を数えていますか? – wwii

+0

各ファイルからいくつかの行を表示してください。 – wwii

答えて

0

は、キーワード全体のファイルを読んで、中にキーワードを保存しますリスト。その後、商品フィールドを読み、フィールドにキーワードが含まれているかどうかを確認してください。

with open("keywords.txt", "r") as f: 
    keywords = f.read().splitlines() 

with open("products.txt") as f: 
    for product_name in f: 
     if any(keyword in product_name for keyword in keywords): 
      print product_name 
+0

ありがとう、驚くほど速くなります。 – Moohebat

0

キーワードが本当に単一の言葉ではなく、マルチワード表現されている場合は、私の最初の提案は、より高速な検索のためのセットに、製品のタイトルを変換することです:

product_title = set(product_row['title'].lower().replace(',','').split()) 
+0

問題は、キーワードがbigram、trigramなどになる可能性があることです。私はこれらのキーワードが繰り返される製品を知りたいです。 – Moohebat

+0

バイワード、トライなどの単語の並び順は気になりますか?もしそうでなければ、キーワードをセットにあらかじめ変換し、タイトルワードセットとのセット交差を計算することもできます: 'keyword_row ['keyword']&product_title:' – DyZ

+0

はい、その順序は重要です。 – Moohebat

関連する問題